聊天視窗

數據洞見:從原始數據到決策智慧 - 第 3 章

第三章:探索性資料分析

發布於 2026-03-05 22:29

# 第三章:探索性資料分析 ## 3.1 章節概覽 探索性資料分析(Exploratory Data Analysis, EDA)是資料科學流程中極為關鍵的一環。它的主要目標是: - **了解資料結構**:分佈、偏態、離群點等。 - **發掘隱藏關係**:變數間的相關性、因果線索。 - **識別數據品質問題**:缺失值、重複、異常。 - **為後續建模提供洞見**:選擇合適的特徵、轉換方法、模型假設。 本章將以實務導向,結合案例說明常用工具與技巧,並提出最佳實踐建議。 --- ## 3.2 探索性資料分析流程圖 > mermaid yaml flowchart TD A[資料準備] --> B[描述性統計] B --> C[可視化分析] C --> D[相關性檢測] D --> E[異常檢測] E --> F[缺失值模式] F --> G[洞見與報告] G --> H[回饋至資料清洗] 流程說明: 1. **資料準備**:確認資料型態、轉換時間格式、處理類別變數等。 2. **描述性統計**:計算均值、中位數、標準差、四分位數、最大/最小值。 3. **可視化分析**:直方圖、箱型圖、散點圖、熱力圖等。 4. **相關性檢測**:Pearson、Spearman、Kendall 等相關係數,或卡方檢定。 5. **異常檢測**:IQR、Z‑score、Isolation Forest、Local Outlier Factor 等。 6. **缺失值模式**:缺失值矩陣、熱力圖、Missingness Pattern Plot。 7. **洞見與報告**:生成報告、撰寫摘要、提出改進建議。 --- ## 3.3 描述性統計 ### 3.3.1 直方圖與分佈 python import pandas as pd import matplotlib.pyplot as plt import seaborn as sns df = pd.read_csv('credit_card_transactions.csv') # 單變量分佈 sns.histplot(df['amount'], kde=True) plt.title('交易金額分佈') plt.xlabel('金額 (NT$)') plt.ylabel('頻率') plt.show() - **KDE (Kernel Density Estimate)**:平滑分佈,方便觀察偏態。 - **箱型圖**:觀察離群點。 ### 3.3.2 位置與離散度 | 統計量 | 公式 | 直觀意義 | |-------|------|-----------| | 均值 (μ) | ∑xᵢ / n | 中心趨勢 | | 中位數 (Median) | 中央值 | 對極端值不敏感 | | 標準差 (σ) | √(∑(xᵢ-μ)² / n) | 離散度 | | 四分位距 (IQR) | Q₃ - Q₁ | 中央 50% 數據範圍 | ### 3.3.3 交叉表 (Cross‑tabulation) python # 交叉表: 交易時間段 vs 付款方式 cross_tab = pd.crosstab(df['time_of_day'], df['payment_method']) print(cross_tab) 交叉表可快速揭示不同類別變數之間的相對頻率。 --- ## 3.4 可視化技術 | 目的 | 圖表 | 典型應用 | |------|------|-----------| | 單變量 | 直方圖、箱型圖、密度圖 | 分佈、離群點 | | 雙變量 | 散點圖、條形圖、熱力圖 | 相關性、分群 | | 多變量 | 相關矩陣熱力圖、散點圖矩陣、PCA 降維散點圖 | 全局關聯、維度降低 | ### 3.4.1 相關矩陣熱力圖 python corr = df.corr() plt.figure(figsize=(10,8)) sns.heatmap(corr, annot=True, cmap='coolwarm', center=0) plt.title('相關係數熱力圖') plt.show() - **注意**:對於類別變數,需先轉為數值型或使用 Cramér's V。 ### 3.4.2 散點圖矩陣 (Pairplot) python sns.pairplot(df[['amount', 'age', 'balance']], hue='default_flag') plt.show() - **應用**:觀察多維度關係與分群趨勢。 --- ## 3.5 相關性分析 ### 3.5.1 相關係數 | 類型 | 公式 | 適用情境 | |------|------|-----------| | Pearson | r = Σ((x-μₓ)(y-μᵧ)) / √(Σ(x-μₓ)² Σ(y-μᵧ)²) | 連續且線性 | | Spearman | ρ = 1 - 6 Σdᵢ² / (n(n²-1)) | 連續或有序,非線性 | | Kendall | τ = (C - D) / [n(n-1)/2] | 小樣本、強噪音 | ### 3.5.2 卡方檢定 (Chi‑square) python from scipy.stats import chi2_contingency contingency_table = pd.crosstab(df['age_group'], df['default_flag']) chi2, p, dof, ex = chi2_contingency(contingency_table) print('p-value:', p) - **解讀**:p‑value < 0.05 表示兩變數獨立性被拒絕。 --- ## 3.6 異常檢測與離群點 ### 3.6.1 基於統計的 IQR 方法 python Q1 = df['amount'].quantile(0.25) Q3 = df['amount'].quantile(0.75) IQR = Q3 - Q1 outliers = df[(df['amount'] < Q1 - 1.5*IQR) | (df['amount'] > Q3 + 1.5*IQR)] print(outliers) ### 3.6.2 基於機器學習的 Isolation Forest python from sklearn.ensemble import IsolationForest clf = IsolationForest(contamination=0.01, random_state=42) clf.fit(df[['amount', 'balance']]) df['anomaly'] = clf.predict(df[['amount', 'balance']]) # -1 表示離群點 - **選擇**:IQR 直觀且快速;Isolation Forest 更適合高維度。 --- ## 3.7 缺失值模式分析 ### 3.7.1 缺失值矩陣 python import missingno as msno msno.matrix(df) plt.show() - **解讀**:顏色深淺代表缺失比例;可視化缺失與其他變數的關聯。 ### 3.7.2 缺失機制分類 | 缺失類型 | 例子 | 影響 | |-----------|------|------| | MCAR (Missing Completely at Random) | 隨機刪除 | 無偏差 | | MAR (Missing at Random) | 基於已觀測變數 | 可使用多重插補 | | MNAR (Missing Not at Random) | 基於未觀測變數 | 需模型調整 | --- ## 3.8 案例實作:信用卡詐欺檢測數據集 > **目標**:在 Kaggle 典型的信用卡詐欺數據集上執行 EDA,並提出數據前處理策略。 python import pandas as pd import seaborn as sns import matplotlib.pyplot as plt df = pd.read_csv('creditcard.csv') # 1. 觀察類別變數 print(df['Class'].value_counts()) # 2. 數值分佈 sns.boxplot(x='Class', y='Amount', data=df) plt.show() # 3. 相關矩陣熱力圖(只取前三列示範) corr = df.iloc[:, :5].corr() plt.figure(figsize=(5,4)) sns.heatmap(corr, annot=True, cmap='coolwarm') plt.show() **分析結論**: - 詐欺樣本極少(約 0.17%),表明類別不平衡。 - 交易金額在詐欺樣本中普遍偏高。 - `V1~V28` 為 PCA 變數,彼此高度相關。 **前處理建議**: - **重採樣**:SMOTE 或 ADASYN。 - **特徵縮放**:`StandardScaler`。 - **缺失值**:檢查並填補(大多數列為完整)。 --- ## 3.9 EDA 最佳實踐 | 建議 | 詳細說明 | |------|-----------| | **結合統計與視覺** | 先用統計摘要確認基本分佈,再用圖表進行深度探索 | | **文件化** | 使用 Jupyter Notebook 或 R Markdown,保存所有程式碼、圖表與解讀 | | **迭代** | EDA 是循環過程,發現新問題後回到資料準備階段 | | **跨團隊協作** | 與資料工程、業務人員討論洞見,確保實務可行 | | **工具選型** | Pandas/NumPy(基礎)、Seaborn/Plotly(圖表)、MissingNo(缺失視覺)、Scikit‑learn(機器學習) | --- ## 3.10 小結 - **探索性資料分析** 為資料科學的「門檻」:它將「未知」轉化為「可量化」的洞見。 - 透過 **描述性統計**、**可視化**、**相關性檢定**、**異常檢測** 及 **缺失值分析**,能夠完整把握資料特性,為後續建模奠定堅實基礎。 - 良好的 EDA 實踐不僅提升模型效果,還能節省數據清洗與工程成本,並為決策者提供直觀說明。 --- ## 3.11 下一章預告 > **第四章:機器學習基礎** > 本章將帶您從 EDA 走向 **模型訓練**:探索監督式與非監督式學習方法,並學習如何選擇合適的模型與評估指標。 --- > *本章已完成,請在「數據洞見:從原始數據到決策智慧」整體架構中確認章節連結。*