聊天視窗

數據驅動決策:實務分析師的數據科學指南 - 第 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 等,都是值得在組織內部落地的技術。 > 下一章將深入資料清理與預處理,從資料品質層面進一步提升模型效能與決策可靠性。