返回目錄
A
數據驅動決策:實務分析師的數據科學指南 - 第 2 章
第二章:數據收集與管道設計
發布於 2026-03-02 18:41
# 第二章:數據收集與管道設計
> 本章將帶領讀者從 **資料來源辨識** 開始,逐步走向 **ETL(抽取、轉換、載入)流程設計**,並最終落實到 **資料倉庫(Data Warehouse)** 與 **數據湖(Data Lake)** 的建構。全程以實務案例、最佳做法與實際程式碼為支撐,讓您能快速落地可重複、可擴充的數據基礎。
## 2.1 資料來源辨識
### 2.1.1 內部資料來源
| 類別 | 典型資料 | 取用方式 | 典型範例 |
|------|----------|----------|----------|
| 交易資料 | 客戶下單、支付紀錄 | OLTP資料庫、REST API |
| 產品資料 | 商品目錄、庫存 | 應用程式資料庫、CRM |
| 業務指標 | KPI、績效報表 | BI 伺服器、報表工具 |
| 運營日誌 | 伺服器日誌、系統監控 | Log 系統、ELK 堆疊 |
| 內部文件 | 產品規格、政策 | SharePoint、Confluence |
### 2.1.2 外部資料來源
| 類別 | 典型資料 | 取得方式 | 典型範例 |
|------|----------|----------|----------|
| 市場數據 | 競爭對手價格、廣告費 | API、網頁爬蟲 | e.g. Amazon Product Advertising API |
| 社群媒體 | 轉發、點讚、評論 | Twitter API、Facebook Graph API |
| 公共數據 | 行政區域、人口統計 | 政府開放資料平台 |
| 第三方平台 | 銀行交易、物流跟蹤 | 版權授權、合作協議 |
### 2.1.3 資料來源評估指標
| 指標 | 說明 | 評估方法 |
|------|------|----------|
| 可得性 | 是否能穩定取得 | 資料提供商 SLA、API 文檔 |
| 資料質量 | 正確性、完整度、時效性 | 交叉驗證、樣本抽查 |
| 法規合規 | 隱私、版權、合約 | 法務審查、GDPR 影響評估 |
| 成本 | 取得、儲存、處理成本 | 價格模型、雲端計費 |
## 2.2 ETL 流程設計
> **ETL** 是「抽取(Extract)→轉換(Transform)→載入(Load)」的縮寫。它是把資料從原始格式轉成可供分析與報表的標準化資料。以下將依序闡述三個步驟,並以 Airflow 與 Python 為示範。
### 2.2.1 抽取(Extract)
- **批量抽取**:一次性從資料庫取出大量資料,例如 nightly batch。
- **實時抽取**:利用 Kafka、AWS Kinesis 等流式平台,實時接收資料。
- **API 抽取**:對接 RESTful API,使用 token 進行認證。
> **最佳實務**:使用增量抽取(Change Data Capture, CDC)減少重複抓取。
#### 範例:使用 Python 抽取 MySQL 資料
python
import pymysql
import pandas as pd
conn = pymysql.connect(host='db.example.com', user='user', password='pwd', database='sales')
query = "SELECT order_id, customer_id, amount, order_date FROM orders WHERE order_date >= %s"
df = pd.read_sql(query, conn, params=('2024-01-01',))
print(df.head())
conn.close()
### 2.2.2 轉換(Transform)
| 步驟 | 說明 | 工具範例 |
|------|------|----------|
| 資料清洗 | 處理缺失值、重複、格式化 | pandas、Spark DataFrame |
| 資料合併 | 將多個來源合併 | SQL JOIN、PySpark union |
| 特徵工程 | 產生衍生欄位、編碼類別 | scikit-learn OneHotEncoder |
| 資料驗證 | 確保資料完整性 | Great Expectations |
| 資料分區 | 方便分布式讀寫 | Parquet partitioning |
#### 範例:使用 Spark 進行資料清洗與合併
python
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, to_date
spark = SparkSession.builder.appName("ETL_Example").getOrCreate()
orders = spark.read.csv("s3://bucket/raw/orders.csv", header=True, inferSchema=True)
customers = spark.read.csv("s3://bucket/raw/customers.csv", header=True, inferSchema=True)
orders_clean = orders.withColumn("order_date", to_date(col("order_date"), "yyyy-MM-dd"))\
.dropna(subset=["order_id", "customer_id"])
customers_clean = customers.dropDuplicates()
joined = orders_clean.join(customers_clean, on="customer_id", how="left")
joined.show(5)
### 2.2.3 載入(Load)
| 目標 | 方案 | 優缺點 |
|------|------|--------|
| 資料倉庫 | Snowflake、Redshift、BigQuery | 易於分析、資料治理功能;成本較高 |
| 數據湖 | S3、Azure Data Lake、Google Cloud Storage | 彈性存儲、低成本;需自行治理 |
| 實時儲存 | Kafka、Kinesis Streams | 高吞吐;需要流式處理 |
> **最佳實務**:使用分區與壓縮格式(Parquet、ORC)提升查詢效能。
## 2.3 資料倉庫與數據湖建構
### 2.3.1 資料倉庫(Data Warehouse)
- **結構化**:以模式化資料為主,支持 SQL 查詢。
- **模式驅動**:事先定義 schema,確保資料一致性。
- **OLAP 優化**:資料多維度、可聚合。
- **典型架構**:星型、雪花型模型。
#### 典型使用案例
| 需求 | 資料倉庫角色 |
|------|---------------|
| 企業報表 | 月度營收、客戶細分 |
| 內部 KPI | 透過 BI 工具(Tableau、Looker)呈現 |
| 風險管理 | 交易異常偵測、信用評分 |
### 2.3.2 數據湖(Data Lake)
- **非結構化**:儲存原始檔案(CSV、JSON、圖像、音訊)
- **即席分析**:資料以「原始」存放,分析時再做轉換。
- **成本效益**:使用物件儲存,低成本、可彈性擴充。
- **治理挑戰**:需自行實作資料目錄、品質管控。
#### 常見實作
| 平台 | 特色 |
|------|------|
| AWS S3 + Glue | 內建資料目錄、ETL 服務 |
| Azure Data Lake + Synapse | 結合資料倉庫與湖的分析 |
| GCP Cloud Storage + BigQuery | 直接查詢湖中資料 |
### 2.3.3 混合模式:湖倉(Lakehouse)
- 結合資料湖的彈性與資料倉庫的治理與效能。
- 典型技術:Databricks Delta Lake、Apache Hudi、Iceberg。
| 特色 | 與資料倉庫比較 |
|------|----------------|
| 支援 ACID 交易 | 同樣 |
| 支援 schema evolution | 高 |
| 直接 SQL 查詢 | 同樣 |
### 2.3.4 建構流程範例
1. **需求分析**:定義資料來源、治理需求、分析用途。
2. **架構設計**:選擇雲端平台、決定倉庫或湖。
3. **資料目錄**:使用 Glue Data Catalog、Azure Purview 或 BigQuery Metadata。
4. **ETL/ELT 實作**:以 Spark 或 Airflow 建構流程。
5. **測試與驗證**:使用 Great Expectations、dbt 進行資料品質測試。
6. **部署與監控**:利用 CloudWatch、Azure Monitor 或 GCP Operations 監控資料流。
## 小結
- **資料來源辨識** 是建構可靠資料管道的第一步,需要綜合考量可得性、品質、合規與成本。
- **ETL** 需要精心設計抽取、轉換與載入三個階段,並採用增量、分區與壓縮等技巧提升效能。
- **資料倉庫** 與 **數據湖** 各有優缺點,根據業務需求選擇單一或混合架構,確保資料治理與查詢效能。
- **實務工具**:Airflow、Spark、Python、dbt、Great Expectations、Delta Lake 等,都是值得在組織內部落地的技術。
> 下一章將深入資料清理與預處理,從資料品質層面進一步提升模型效能與決策可靠性。