返回目錄
A
資料洞察:企業數據分析與決策支援全攻略 - 第 3 章
第 3 章 資料清理與品質管理
發布於 2026-03-01 11:52
# 第 3 章 資料清理與品質管理
資料清理(Data Cleaning)與品質管理(Data Quality Management)是任何資料分析流程中最關鍵、也最費時的環節。若資料本身存在錯誤、不一致、缺失或重複,最終模型的預測準確度與商業洞察將大打折扣。以下將以實務案例與可操作工具,說明如何從資料湖或資料倉中抽取原始資料,進行清理、標準化,並設計可量化的品質指標,為後續分析與決策打下堅實基礎。
## 3.1 資料清理概述
| 階段 | 目標 | 常見手段 |
|------|------|----------|
| 數據掃描 | 找出異常與缺失 | 統計描述、直方圖、箱型圖 |
| 重複處理 | 去除重複紀錄 | `drop_duplicates()`、分群聚合 |
| 缺失值處理 | 補值或刪除 | `impute`、`fillna()`、kNN、插值 |
| 格式統一 | 確保欄位格式一致 | 轉型、正則表達式 |
| 單位標準化 | 同一度量尺度 | 轉換、比例縮放 |
| 外延檢查 | 驗證資料邏輯 | 交叉欄位校驗、正則表達式 |
> **案例**:某零售商在導入數據湖後,發現「訂單金額」欄位包含「$」符號與逗號,導致匯總失誤。經過正則轉換與數值型轉換,訂單金額正確匯總後,月度毛利率提升 4%。
## 3.2 重複資料處理
### 3.2.1 重複判斷邏輯
- **完整重複**:行完全相同。
- **關鍵欄位重複**:基於業務關鍵欄位(如「訂單編號」+「產品編號」)判斷。
- **相似度重複**:使用相似度指標(如 Jaro‑Winkler)針對文字欄位。
### 3.2.2 實作範例(Python + Pandas)
```python
import pandas as pd
# 讀取資料
orders = pd.read_csv('orders.csv')
# 1. 完整重複
orders_clean = orders.drop_duplicates()
# 2. 關鍵欄位重複(保留最新)
orders_clean = orders_clean.sort_values('order_date').drop_duplicates(subset=['order_id'], keep='last')
```
### 3.2.3 重複處理策略
| 需求 | 建議策略 |
|------|----------|
| 大批量資料 | 批次執行、Spark `dropDuplicates()` |
| 資料即時更新 | CDC + 唯一索引、寫時去重 |
| 重複多表合併 | 先合併再去重,保留原始來源標記 |
## 3.3 缺失值處理
### 3.3.1 缺失類型
- **MCAR**(Missing Completely at Random)
- **MAR**(Missing at Random)
- **MNAR**(Missing Not at Random)
### 3.3.2 處理方法
| 方法 | 適用情境 | 例子 |
|------|-----------|------|
| 刪除 | 缺失比例 < 5% | `df.dropna()` |
| 單值填補 | 連續數值 | `df['age'].fillna(df['age'].mean())` |
| 多值填補 | 連續數值 | `KNNImputer` |
| 預測填補 | 非線性關係 | `RegressionImputer` |
| 旗標 + 填補 | 需要保留缺失資訊 | 新欄位 `age_missing_flag` |
### 3.3.3 實作範例
```python
from sklearn.impute import KNNImputer
import numpy as np
# 以 3 個鄰近點為例
imputer = KNNImputer(n_neighbors=3)
X = df[['age', 'income', 'spending_score']]
X_imputed = pd.DataFrame(imputer.fit_transform(X), columns=X.columns)
```
## 3.4 資料標準化與正規化
| 標準化方法 | 公式 | 適用範圍 |
|-------------|------|-----------|
| Z‑score | (x - μ) / σ | 連續數值、機器學習前處理 |
| Min‑Max | (x - min) / (max - min) | 需要保留原始範圍、圖表可視化 |
| Log 轉換 | log(x + 1) | 右偏分佈、消除極端值 |
| 標準化單位 | e.g., kg → g | 商業報表統一度量 |
### 3.4.1 實作範例
```python
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(df[['sales', 'cost']])
```
## 3.5 資料品質指標設計
### 3.5.1 資料品質維度
| 維度 | 指標範例 |
|------|----------|
| 完整性 | 缺失率、非空比 |
| 正確性 | 參照外部基準、校驗規則 |
| 一致性 | 互相參照欄位、格式一致 |
| 時效性 | 最後更新時間、資料停滯 |
| 可用性 | 取得成本、查詢延遲 |
### 3.5.2 KPI 例子
| KPI | 目標 | 計算方式 |
|------|------|----------|
| 缺失率 | < 1% | `df.isnull().mean()` |
| 重複率 | < 0.5% | `df.duplicated().mean()` |
| 資料延遲 | < 5 分鐘 | `max(df['updated_at'])` |
| 合法性檢查率 | 100% | `df[~df['email'].str.contains('@')].empty` |
### 3.5.3 監控流程
1. **每日 ETL**:完成後觸發品質檢查腳本。
2. **報表儀表板**:Grafana / Power BI 顯示 KPI。
3. **告警機制**:當 KPI 違規時,自動發送 Email 或 Slack 通知。
4. **追蹤修復**:在資料治理平台(如 Collibra)紀錄修復歷史。
## 3.6 工具與技術選型
| 需求 | 推薦工具 | 特色 |
|------|----------|------|
| 批次清理 | Apache Spark, Pandas, Azure Data Factory | 大規模、容錯、易於擴充 |
| 互動式清理 | Jupyter Notebook, Zeppelin | 交互、可視化、原型快速迭代 |
| 資料品質監控 | Great Expectations, Data Quality Service | 期望定義、報告、CI 集成 |
| 元資料管理 | Apache Atlas, Amundsen | 追蹤資料血統、存取控制 |
## 3.7 實務小結
1. **先定義品質指標**:在資料進入清理流程前,先確定 KPI,以便後續量化評估。
2. **自動化重複與缺失處理**:盡量將規則化操作寫成腳本或工作流程,減少人為干預。
3. **維護資料血統**:每一次轉換都應留下元資料,方便追蹤與回溯。
4. **建立品質監控儀表板**:即時掌握資料狀態,確保決策依據可靠。
5. **持續迭代**:隨著業務變化與新資料來源加入,定期更新清理規則與品質標準。
> **實務提醒**:在多來源資料整合時,先統一資料型別與時間格式,再進行重複、缺失處理,可大幅降低後續的資料錯誤率。
## 3.8 小結
資料清理與品質管理是數據分析的基石。透過系統化的重複檢查、缺失值處理、標準化,以及可量化的品質指標,企業能夠確保後續分析與模型建立的可靠性。下一章將進一步探討如何利用清理後的高品質資料,執行探索性分析與可視化,將數據轉化為直觀洞察。