返回目錄
A
數據決策的藝術:從資料蒐集到洞察生成 - 第 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 的洞察不僅為模型提供特徵,也為業務決策者提供即時、可操作的商業見解。
> **下一章**:在「特徵工程與維度縮減」中,我們將學習如何將這些發現轉化為機器學習模型可利用的特徵。