擷取非表格式資料

使用 Python 的 ETL 與 ELT

Jake Roach

Data Engineer

擷取非表格式資料

ETL 流程,已標示 extract 元件。

使用 Python 的 ETL 與 ELT

非表格式資料的類型

多數產生與使用的資料是非結構化資料

  • 文字
  • 音訊
  • 影像
  • 影片
  • 空間
  • IoT

非結構化資料來源 undergoing transformation.

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() 函式

# 讀取上述格式的 JSON 檔
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:
    # 將檔案載入為字典
    raw_stock_data = json.load(file)

# 確認 raw_stock_data 變數的型別
print(type(raw_stock_data))
<class 'dict'>
使用 Python 的 ETL 與 ELT

一起來練習吧!

使用 Python 的 ETL 與 ELT

Preparing Video For Download...