聊天視窗

數據決策的藝術:從資料蒐集到洞察生成 - 第 4 章

第四章 探索性資料分析(EDA)

發布於 2026-02-25 05:44

# 第四章 探索性資料分析(EDA) 探索性資料分析(Exploratory Data Analysis, EDA)是資料科學工作流程中最核心的階段之一。透過統計圖表與描述統計,我們能快速掌握資料結構、分佈特徵以及潛在關聯,進而為後續的特徵工程、模型選擇與評估奠定堅實基礎。 ## 4.1 EDA 的核心目標 | 目標 | 具體內容 | 為何重要 | |------|----------|----------| | 了解資料結構 | 檢查資料型別、缺失值比例、資料範圍 | 能預防型別錯誤、避免資料遺失 | | 分佈與離群 | 繪製直方圖、箱型圖、密度圖 | 判斷是否需要轉換或刪除異常值 | | 變數關係 | 計算相關係數、畫散點圖、熱力圖 | 探索潛在預測因子與交互效應 | | 取樣與分群 | 觀察分組統計、箱線圖、聚類預覽 | 檢視群體差異、判斷分群策略 | | 可視化設計 | 選擇恰當圖表、配色、標籤 | 提高洞察速度、便於溝通 | ## 4.2 典型的 EDA 步驟 1. **資料探索前置** - 載入資料集(pandas DataFrame) - 檢查 `shape`, `head()`, `info()`, `dtypes` - 初步缺失值統計 2. **統計描述** - `describe()`(數值型) - `value_counts()`(類別型) - 取樣分布與平均值 3. **可視化探索** - **單變量**:直方圖、箱型圖、密度圖 - **雙變量**:散點圖、條形圖、熱力圖 - **多變量**:pairplot、heatmap、FacetGrid 4. **關係與交互** - 相關係數矩陣(Pearson / Spearman) - 交叉表 (`pd.crosstab`) 與堆疊條形圖 5. **異常偵測** - IQR 盒鬍鬚法、Z‑score - 針對時間序列:滑動平均、季節性分解 6. **可視化迭代** - 針對發現的洞察進行更深入的圖表(如交互式圖) 7. **結論與假設** - 建立初步假設,確認是否需要特徵轉換或處理 - 記錄所有觀察與決策,方便後續重現 ## 4.3 重要統計圖表與程式範例 ### 4.3.1 直方圖 & 密度圖 python import pandas as pd import seaborn as sns import matplotlib.pyplot as plt df = pd.read_csv('ecommerce_orders.csv') # 直方圖 sns.histplot(df['order_amount'], bins=30, kde=True) plt.title('Order Amount Distribution') plt.xlabel('Order Amount ($)') plt.ylabel('Frequency') plt.show() ### 4.3.2 箱型圖(Boxplot) python # 分別查看不同類別的金額分佈 sns.boxplot(x='product_category', y='order_amount', data=df) plt.xticks(rotation=45) plt.title('Order Amount by Category') plt.show() ### 4.3.3 散點圖 & 相關係數 python # 兩個數值變數的關係 sns.scatterplot(x='customer_age', y='order_amount', hue='membership_level', data=df) plt.title('Order Amount vs Customer Age') plt.show() # 計算 Pearson 相關係數 corr = df[['customer_age', 'order_amount', 'discount']].corr(method='pearson') print(corr) ### 4.3.4 熱力圖(Heatmap) python sns.heatmap(corr, annot=True, cmap='coolwarm', fmt='.2f') plt.title('Correlation Matrix') plt.show() ### 4.3.5 pairplot python sns.pairplot(df[['customer_age', 'order_amount', 'discount', 'product_price']]) plt.show() ## 4.4 高級 EDA:互動式儀表板 | 工具 | 優點 | 示例 | |------|------|------| | Plotly Express | 交互式圖表、簡潔語法 | `px.scatter()`、`px.histogram()` | | Dash | 將 Python 轉成 Web 應用 | 用於企業內部 BI | | Streamlit | 快速構建可分享的儀表板 | 只需數行程式碼即能上線 | python import streamlit as st import plotly.express as px st.title('E-commerce Sales Dashboard') if st.checkbox('Show Order Amount Histogram'): fig = px.histogram(df, x='order_amount', nbins=40) st.plotly_chart(fig) ## 4.5 EDA 在資料管道中的位置 - **自動化**:使用 `pandas_profiling` 或 `sweetviz` 產生完整報告,整合到 CI/CD。 - **版本控制**:將 EDA 腳本與資料樣本存入 Git,確保可追蹤。 - **重現性**:把 EDA 步驟寫成 Jupyter Notebook 或 Python 函式庫,方便團隊共享。 ## 4.6 常見陷阱與注意事項 1. **過度解讀隨機波動**:單一圖表可能誤導,請確認統計顯著性。 2. **資料遺失誤判**:缺失值可能有意義(如「未購買」),請先理解業務背景。 3. **過度依賴相關係**:相關不等於因果,特別是在多變量環境下。 4. **視覺化誤導**:確保軸比例一致、避免扭曲顏色。 5. **樣本偏差**:若採樣方式不當,EDA 結果會產生偏差,進而影響模型。 ## 4.7 小結 - EDA 是「資料決策的藝術」中的關鍵「前景畫」——它將複雜、雜亂的資料轉化為可理解的圖像與數值。 - 透過結合統計描述、靜態/互動視覺化,以及關係探索,我們能在模型構建前抓住資料中的「線索」。 - EDA 的洞察不僅為模型提供特徵,也為業務決策者提供即時、可操作的商業見解。 > **下一章**:在「特徵工程與維度縮減」中,我們將學習如何將這些發現轉化為機器學習模型可利用的特徵。