使用 Python 與 Pandas 進行資料轉換:完整實戰指南(ETL/ELT)


使用 Python 與 Pandas 進行資料轉換:完整實戰指南(ETL/ELT)

為資料工程師、分析師與機器學習實務者打造的分步驟、生產導向教學。內含可直接貼入 Notebook 的程式碼範例。

目錄

  1. 什麼是資料轉換?
  2. ETL 與 ELT:轉換所在的位置
  3. 三大類轉換
  4. 專案設定與範例資料集
  5. 資料格式操作
  6. 特徵工程
  7. 資料值轉換
  8. 轉換如何驅動機器學習
  9. 常見陷阱、QA 與最佳實務
  10. 常見問題 (FAQ)
  11. 結論與後續步驟

什麼是資料轉換?

資料轉換是將原始資料重塑、清理、豐富及標準化,使其適合分析、報告與機器學習的過程。實務上,轉換橋接了資料生成方式(交易、事件或日誌)與下游任務所需格式(整齊、一致且有文件記錄)之間的差距。

現代資料管線中,轉換通常涵蓋三個目標:

  • 格式操作:排序、篩選、重新命名、去重、補值及重塑(寬/長)。
  • 特徵工程:從現有欄位建立新欄位以供模型使用。
  • 數值轉換:改變分布與尺度(對數、開方、次方、標準化、正規化)。

ETL 與 ELT:轉換所在的位置

ETL(Extract → Transform → Load)與 ELT(Extract → Load → Transform)都包含關鍵的「T」。在 ETL 中,你在載入到資料倉或服務層 之前 進行轉換;在 ELT 中,資料先載入,再在倉儲或資料湖內使用 SQL 或 Notebook 進行轉換。選擇取決於資料量、延遲、治理需求及平台優勢。

ETL 適合:

  • 必須在邊界驗證與清理資料。
  • 下游系統要求嚴格的 Schema。
  • 在轉換層的運算成本較低。
ELT 擅長:

  • 倉儲/湖倉可輕鬆擴展。
  • 分析師可快速使用 SQL/Notebook 迭代。
  • 需要完整 lineage、版本管理與大規模重跑能力。

三大類轉換

  1. 格式操作:重新排序/選取列、重新命名/選取欄、去重、缺失值處理、寬↔長重塑。
  2. 特徵工程:衍生新欄位(如從生日計算年齡)、字串解析、分桶、合併/拆分欄位、類別編碼。
  3. 數值轉換:對數/開方/次方轉換、標準化、正規化及異常值處理。

專案設定與範例資料集

我們將使用 PythonPandas 示範轉換。假設範例檔案 student_data.csv 含有 participant_idnamedobis_studenttarget 及季度指標 Q1..Q4 等欄位。

import pandas as pd
import numpy as np

df = pd.read_csv("student_data.csv")
df.head()

提示:建議一開始就使用 df.info()df.describe() 以及 null 統計檢查資料,以避免後續出錯。

資料格式操作

格式操作涵蓋:列選取/過濾、欄選取/重命名、去重、缺失值補值、寬↔長格式轉換。

# 只選取特定欄位
df_subset = df[['participant_id', 'name', 'Q1']]

# 寬格式轉長格式
df_long = df.melt(id_vars=['participant_id', 'name'],
                  value_vars=['Q1', 'Q2', 'Q3', 'Q4'],
                  var_name='quarter', value_name='score')

特徵工程

可以依需求建立衍生欄位,例如年齡、分桶、文字長度、類別編碼等:

# 計算年齡
df['age'] = pd.to_datetime('2025-01-01').year - pd.to_datetime(df['dob']).dt.year

# 分桶
df['age_group'] = pd.cut(df['age'], bins=[0,18,25,40,60,100], labels=['0-18','19-25','26-40','41-60','60+'])

資料值轉換

常見方法包括標準化、正規化、對數或平方根轉換:

# 標準化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['Q1','Q2','Q3','Q4']] = scaler.fit_transform(df[['Q1','Q2','Q3','Q4']])

# 正規化到 0~1
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['Q1','Q2','Q3','Q4']] = scaler.fit_transform(df[['Q1','Q2','Q3','Q4']])

轉換如何驅動機器學習

適當的轉換可提升模型穩定性與效能,例如標準化、缺失值補值、類別編碼、衍生特徵。轉換策略需與模型匹配:

  • 距離型模型:正規化、標準化
  • 樹模型:通常不需要標準化,但缺失值與類別編碼仍需處理
  • 線性模型:標準化/正則化特別重要

常見陷阱、QA 與最佳實務

  • 永遠保留原始資料,轉換後建立新欄位或 DataFrame。
  • 記錄轉換規則與方法,方便重現與生產化。
  • 針對每個模型或下游需求檢查轉換效果。
  • 避免在整個資料集上 fit scaler,應僅 fit 訓練集,並 transform 測試集。

常見問題 (FAQ)

  • ETL 與 ELT 差別? → ETL 先轉換再載入;ELT 先載入再轉換。
  • 何時正規化? → 適用距離敏感模型或欄位尺度差異大時。
  • 如何處理遺失值? → 補值、刪除或模型預測。
  • 寬格式與長格式差別? → 寬格式適合樞紐分析;長格式適合繪圖與時序分析。

結論與後續步驟

資料轉換是 ETL/ELT 中的核心環節,能直接影響下游分析、報告與模型效果。掌握格式操作、特徵工程、數值轉換,並結合生產實務,可讓資料管線穩定且易維護。

後續可進一步學習:

  • 資料驗證與品質監控(Data Quality Checks)
  • 自動化管線(Airflow、Prefect 或 Dagster)
  • 進階特徵工程與時間序列轉換




发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注