聊天視窗

數據驅動決策:現代分析師的實戰手冊 - 第 2 章

第二章:數據收集與清洗——從源頭到乾淨數據的轉化

發布於 2026-02-22 02:15

# 第二章:數據收集與清洗 --- > **「收集」不是抓取,而是把握價值;「清洗」不是消除,而是塑造洞察。」 ## 2.1 需求與目標設定 在任何數據工程之前,先把問題定義清楚。\ - **業務問題**:公司想預測哪一類客戶最可能升級?\ - **決策需求**:需要一個可解釋的模型,並確保資料合規。\ - **資料指標**:客戶行為、交易歷史、客服交互。\ 把需求轉成 **KPIs** 與 **資料需求表**,再交由資料工程師制定采集規範。\ > **提示**:常見錯誤是把「想知道什麼」等同於「把所有資料都拿來」。結果會得到「噪聲多、成本高」的數據倉庫。 ## 2.2 資料來源與采集方法 | 來源 | 采集方式 | 特色 | 潛在風險 | |------|----------|------|-----------| | **關係型資料庫** | SQL ETL | 結構化、穩定 | 數據變動慢,版本控制困難 | | **Web API** | REST/GraphQL | 實時、靈活 | 速率限制、認證變更 | | **物聯網設備** | MQTT/CoAP | 大量、連續 | 裝置失效、資料遺失 | | **社群平台** | Web Scraper | 內容豐富 | 合規風險、版權問題 | | **雲端儲存** | S3、Blob | 可擴展、成本低 | 存取成本、資料一致性 | > **實務建議**:先跑小批量測試,確認數據結構、格式與頻率。若使用 API,考慮 **exponential backoff** 機制防止被封。 ## 2.3 數據存取與存儲 ### 2.3.1 目標設計 - **資料湖**(Data Lake):存放原始、未處理的資料。適合多模態、非結構化。 - **資料倉庫**(Data Warehouse):結構化、經過 ETL、為報表設計。 - **緩存層**(Redis、Memcached):即時查詢、低延遲。 ### 2.3.2 存儲技術選擇 | 技術 | 優點 | 缺點 | |------|------|------| | **Parquet / ORC** | 列式存儲,壓縮高 | 需要 Spark 之類的引擎 | | **JSON Lines** | 易讀、流式 | 數據膨脹 | | **Delta Lake** | ACID 交易,版本控制 | 複雜度較高 | > **案例**:某電商公司將日交易資料存成 **Delta Lake**,利用 Hive Metastore 做元資料管理,實現「即時 + 歷史」分析。 ## 2.4 數據清洗流程 > **流程圖**:\ > 1️⃣ 采集 → 2️⃣ 存儲 → 3️⃣ 轉換 → 4️⃣ 清洗 → 5️⃣ 驗證 → 6️⃣ 加載 ### 2.4.1 缺失值處理 | 方法 | 適用場景 | 風險 | |------|----------|------| | **刪除** | 缺失率 < 5% | 可能失去關鍵樣本 | | **均值/中位數填補** | 連續變量 | 低估方差 | | **前向/後向填補** | 時序資料 | 產生偏差 | | **插值** | 連續、非隨機缺失 | 複雜度高 | ### 2.4.2 異常檢測 python import numpy as np from scipy import stats def detect_outliers(series): z = np.abs(stats.zscore(series)) return series[z > 3] > **說明**:對數據分布不明的變量,先做 **log** 轉換,再檢測異常。若發現異常值,先與原始業務人員核對,避免誤刪。 ### 2.4.3 重複值與衝突解決 1. **唯一鍵**:建立 Composite Key(客戶ID + 時間戳)\ 2. **版本號**:若多個來源更新同一筆資料,保留最高版本或最新時間戳。\ 3. **手動審核**:對重要決策資料,可設置 **Data Steward** 進行核對。 ### 2.4.4 資料格式化 - **日期時間**:統一為 **ISO 8601**(YYYY-MM-DDTHH:MM:SSZ)。\ - **數值**:統一為 **float64**,並做小數位校正。\ - **分類變量**:使用 **Label Encoding** 或 **One-Hot**,視模型需求決定。 ## 2.5 常見挑戰與對策 | 挑戰 | 來源 | 對策 | |------|------|------| | **資料偏差** | 采集時選擇性 | 設計 **Sampling Bias Mitigation** 模組 | | **資料遺失** | 網路斷線、裝置失效 | 使用 **Checkpointing** 與 **Redundancy** | | **合規風險** | GDPR、CCPA | 實作 **Data Masking**、**Consent Management** | | **資料不一致** | 多源同步 | 引入 **Event Sourcing** 或 **Kafka Streams** | > **小結**:清洗不是一次性工作,而是 **持續迭代** 的流程。每天至少跑一次 **Data Quality Report**,確保數據符合 SLA。 ## 2.6 案例實踐:零售業客戶行為數據清洗 ### 目標 - 建立客戶購買行為資料集,供風險模型與客戶分群使用。 ### 步驟 1. **ETL**:從 POS、網站、APP 三個系統拉取原始交易與瀏覽日志。\ 2. **結合**:以 **客戶ID + 交易時間** 為鍵,合併多來源資料。\ 3. **清洗**: - 刪除重複交易。\ - 填補缺失的 **付款方式**。\ - 轉換 **價格** 為統一貨幣。\ - 對 **時間戳** 做 **時區校正**。\ 4. **驗證**:利用 **Data Steward** 與線上客服核對 100 條樣本。\ 5. **加載**:寫入 **Delta Lake**,並註冊到 Hive Metastore。 ### 成效 - **清洗時間** 從 3 小時縮短到 30 分鐘。\ - **缺失率** 降至 0.3%。\ - **模型準確率** 提升 8%。 ## 2.7 小結與延伸閱讀 > **核心要點**: > 1. **需求驅動**,先把業務目標轉成資料指標。\ > 2. **源頭多元**,選擇合適的采集技術並預防合規風險。\ > 3. **清洗流程化**,設置自動化管道、質量指標與審核機制。\ > 4. **資料治理**,建立元資料、版本控制與安全管理。\ > > **延伸閱讀**: > - *Data Management for Researchers* – K. H. & P. C. 2022 > - *The Data Warehouse Toolkit* – R. Kimball & M. Ross 2019 > - *Clean Code for Data Engineers* – J. H. 2021 > **思考題**:設計一個「自動缺失值判斷」模組,並在此模組中加入 **機器學習** 來決定最合適的填補方法。你會如何落實?