비정형 데이터 추출하기

Python으로 하는 ETL과 ELT

Jake Roach

Data Engineer

비정형 데이터 추출하기

추출 단계가 강조된 ETL 파이프라인.

Python으로 하는 ETL과 ELT

비정형 데이터의 종류

생성되고 활용되는 데이터 대부분은 비정형 데이터입니다

  • 텍스트
  • 오디오
  • 이미지
  • 비디오
  • 공간 데이터
  • IoT

변환 과정을 거치는 비정형 데이터 소스.

1 https://mitsloan.mit.edu/ideas-made-to-matter/tapping-power-unstructured-data
Python으로 하는 ETL과 ELT

API와 JSON 데이터 다루기

API (Application Programming Interface)

  • 데이터 소스 위에 위치하는 소프트웨어
  • 데이터베이스와의 직접적인 상호작용을 방지

$$

API를 사용해 데이터베이스와 상호작용하는 데이터 엔지니어.

JSON (JavaScript Object Notation)

  • 키-값 쌍
  • 고정된 스키마 없음
  • dict(딕셔너리)와 형태와 느낌이 유사함
{
    "key": "value",
    ...
    "open": 0.121875
}
Python으로 하는 ETL과 ELT

pandas로 JSON 파일 읽기

{
    "timestamps": [863703000, 863789400, ...],
    "open": [0.121875, 0.098438, ...],
    "close": [...],
    "volume": [...]
}

.read_json() 함수를 사용하세요

# Read in a JSON file in the format above
raw_stock_data = pd.read_json("raw_stock_data.json", orient="columns")
1 https://pandas.pydata.org/docs/reference/api/pandas.read_json.html
Python으로 하는 ETL과 ELT

중첩되거나 비정형인 JSON 데이터

데이터가 항상 DataFrame으로 바로 변환 가능한 형태는 아닙니다

  • 중첩된 객체
  • 가변적인 "스키마"
{
    "863703000": {
        "volume": 1443120000,
        "price": {
            "close": 0.09791,
            "open": 0.12187
        }
    }, 
    "863789400": {
        ...
    }, ...
}
Python으로 하는 ETL과 ELT

json으로 JSON 파일 읽기

import json

with open("raw_stock_data.json", "r") as file:
    # Load the file into a dictionary
    raw_stock_data = json.load(file)

# Confirm the type of the raw_stock_data variable
print(type(raw_stock_data))
<class 'dict'>
Python으로 하는 ETL과 ELT

연습해 봅시다!

Python으로 하는 ETL과 ELT

Preparing Video For Download...