聊天視窗

資料科學實戰:從數據到決策的完整流程 - 第 4 章

4. 探索性資料分析

發布於 2026-03-04 21:23

# 第 4 章:探索性資料分析 在資料科學工作流中,探索性資料分析(EDA)是橋接「乾淨資料」與「模型」之間的關鍵階段。透過統計摘要、可視化與相關性檢驗,我們不僅能檢查資料品質,還能從數字背後捕捉業務洞見。 --- ## 4.1 EDA 的角色與目標 | 目標 | 說明 | |---|---| | 資料品質確認 | 檢查缺失值、異常值、重複資料、分佈不均等問題 | | 變數特徵理解 | 探索每個變數的分佈、統計指標、類別比例 | | 變數關聯發掘 | 透過相關係數、交叉表、因子分析等找出潛在關聯 | | 商業假設生成 | 基於數據特徵提出可驗證的商業假說 | | 模型選型指引 | 為後續建模選擇合適的算法、特徵工程方法 | > **小提示**:EDA 應該是一個迭代的過程。初始探索往往會提出新的假說,進而重新整理資料或收集額外資訊。 --- ## 4.2 統計摘要與描述性統計 ### 4.2.1 基本統計量 python import pandas as pd df = pd.read_csv('sales_data.csv') print(df.describe(include='all')) - **數值型變數**:平均值、標準差、最小值、最大值、四分位數等。 - **類別型變數**:頻數、唯一值數、缺失值比例。 ### 4.2.2 缺失值與重複值檢測 python # 缺失值比例 missing = df.isnull().mean() * 100 print(missing.sort_values(ascending=False)) # 重複值 duplicate_pct = df.duplicated().mean() * 100 print(f"重複資料佔比:{duplicate_pct:.2f}%") > **實務技巧**:對於缺失值佔比>30%的變數,先評估其商業重要性;若為非關鍵變數,可直接 drop 或填補平均/中位數。 --- ## 4.3 可視化技巧 ### 4.3.1 分佈圖 | 變數 | 圖型 | 工具 | |---|---|---| | 數值 | Histogram / KDE | matplotlib / seaborn | | 類別 | Bar Chart / Pie | matplotlib / plotly | python import seaborn as sns import matplotlib.pyplot as plt sns.histplot(df['sales_amount'], kde=True, color='steelblue') plt.title('銷售金額分佈') plt.xlabel('金額') plt.ylabel('頻率') plt.show() ### 4.3.2 盒鬚圖(Boxplot) python sns.boxplot(x='region', y='sales_amount', data=df) plt.title('不同區域銷售金額盒鬚圖') plt.show() > **注意**:盒鬚圖能直觀顯示極端值(outliers),可進一步檢查是否為錯誤錄入或真實異常。 ### 4.3.3 散佈圖與趨勢線 python sns.scatterplot(x='promo_spend', y='sales_amount', hue='category', data=df) sns.regplot(x='promo_spend', y='sales_amount', data=df, scatter=False, color='red') plt.title('促銷費用 vs 銷售金額') plt.show() ### 4.3.4 熱力圖(Correlation Heatmap) python corr = df.corr() plt.figure(figsize=(10,8)) sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f') plt.title('變數相關性熱力圖') plt.show() > **實務提醒**:若相關係數>0.8,可能存在多重共線性,需考慮變數選擇或降維。 --- ## 4.4 相關性檢驗與假說驗證 | 檢驗 | 目的 | 主要參數 | |---|---|---| | Pearson | 連續型變數之線性關係 | r, p-value | | Spearman | 非參數的單調關係 | rho, p-value | | Chi‑square | 類別型變數之獨立性 | chi2, p-value | | ANOVA | 分組間平均差異 | F, p-value | ### 4.4.1 Pearson 相關係數 python from scipy.stats import pearsonr r, p = pearsonr(df['promo_spend'], df['sales_amount']) print(f'Pearson r = {r:.3f}, p = {p:.3e}') ### 4.4.2 Spearman 相關係數 python from scipy.stats import spearmanr rho, p = spearmanr(df['days_on_sale'], df['sales_amount']) print(f'Spearman rho = {rho:.3f}, p = {p:.3e}') ### 4.4.3 Chi‑square 獨立性檢定 python from scipy.stats import chi2_contingency contingency = pd.crosstab(df['promotion_type'], df['sale_success']) chi2, p, dof, expected = chi2_contingency(contingency) print(f'Chi2 = {chi2:.2f}, p = {p:.3e}') > **實務說明**:p‑value < 0.05 通常表示統計顯著,然而在商業場景需結合效益大小與商業重要性評估。 --- ## 4.5 案例:從 EDA 到商業洞見 > **場景**:某電商平台欲提升週末促銷效能。 ### 4.5.1 資料探索 | 步驟 | 結果 | |---|---| | 資料摘要 | 週末(Saturday, Sunday)銷售額比平日高 1.8 倍,但促銷費用比例較高 30%。 | | 盒鬚圖 | 週末銷售額中位數上升,極端值出現。 | | 相關性 | 促銷費用與銷售額 Pearson r = 0.72,顯示正相關。 | | Chi‑square | 促銷類型(折扣、贈品)與是否成功(≥10% 銷售增長)顯著相關,p = 0.001。 | ### 4.5.2 洞見生成 1. **週末促銷更有效**:即使成本提高,銷售額提升更大,ROI 仍正向。 2. **折扣促銷優於贈品**:因折扣與銷售額關聯更緊密。 3. **極端值**:部分週末銷售額過高,可能由特殊事件(節日、限量商品)造成,需進一步分段分析。 ### 4.5.3 商業建議 - **加碼週末折扣**:針對高潛力商品,設計更大折扣。 - **節日預測模型**:結合歷史節日數據,預測週末效能。 - **動態調整預算**:使用即時數據調整週末促銷預算,確保 ROI 最高。 --- ## 4.6 小結 1. **統計摘要**:快速掌握資料基本特徵,檢查品質。 2. **可視化**:圖形化分佈、關聯,便於溝通與洞察。 3. **相關性檢驗**:量化變數之關係,支援假說驗證。 4. **商業洞見**:從數據中提煉可操作的策略。 5. **工具選擇**:pandas + seaborn + scipy 為最常見且易於上手的組合。 > **最後提醒**:EDA 不是一次性活動,而是持續迭代的探索。每次新資料或模型迭代都應重新執行 EDA,以確保洞見仍符合實際業務。