返回目錄
A
洞悉未來:資料科學決策師的實務指南 - 第 3 章
第三章 探索性資料分析
發布於 2026-03-01 14:06
# 第三章 探索性資料分析
探索性資料分析(Exploratory Data Analysis, EDA)是資料科學流程中最直覺、最具洞察力的一環。對於非技術背景的決策者而言,EDA 讓複雜的數字變得可視、可解讀,並為後續模型建立奠定堅實的基礎。
## 1. 數據可視化基礎
| 視覺化類型 | 何時使用 | 典型工具 |
|-------------|-----------|-----------|
| 折線圖(Line chart) | 時序變化 | Tableau、Power BI、Plotly、matplotlib |
| 長條圖(Bar chart) | 分類比較 | Tableau、Power BI、seaborn |
| 直方圖(Histogram) | 分布形態 | R ggplot2、Python seaborn |
| 箱形圖(Boxplot) | 異常值與分散 | R ggplot2、Python seaborn |
| 散點圖(Scatter plot) | 兩變數關聯 | R ggplot2、Python matplotlib |
| 熱力圖(Heatmap) | 數據矩陣關聯 | Python seaborn、Tableau |
> **實務提示**:先使用簡單的長條圖或折線圖快速了解全局,再進一步採用箱形圖或熱力圖探討細節。
### 1.1 常見可視化實作範例(Python)
python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 讀取樣本資料
sales = pd.read_csv('sales_demo.csv')
# 1. 折線圖:月度營收
sns.lineplot(x='month', y='revenue', data=sales)
plt.title('月度營收趨勢')
plt.xlabel('月份')
plt.ylabel('營收(元)')
plt.show()
# 2. 長條圖:不同區域銷售額
sns.barplot(x='region', y='revenue', data=sales, palette='viridis')
plt.title('區域銷售比較')
plt.xlabel('區域')
plt.ylabel('營收(元)')
plt.show()
# 3. 箱形圖:產品類別價格分布
sns.boxplot(x='category', y='price', data=sales, palette='Set3')
plt.title('產品類別價格分布')
plt.xlabel('產品類別')
plt.ylabel('價格(元)')
plt.show()
> **提示**:在 Power BI 或 Tableau 中,可利用「拖拉式介面」即時切換圖表類型,快速探索多維資料。
## 2. 描述性統計與分布分析
| 統計量 | 定義 | 計算公式 | 典型應用 |
|---------|------|-----------|-----------|
| 平均數(Mean) | 數值中心 |
\( \bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i \) | 量化平均績效 |
| 中位數(Median) | 排序中間值 | 依序排列取中值 | 抗離群值的集中趨勢 |
| 眾數(Mode) | 出現頻率最高 | 無公式 | 產品受歡迎程度 |
| 標準差(Std Dev) | 數值離散度 |
\( s = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2} \) | 風險評估 |
| 四分位數(Q1,Q2,Q3) | 分布分位點 | 依序分位 | 生成箱形圖 |
| 變異數(Variance) | 離散度平方 |
\( s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2 \) | 風險分析 |
### 2.1 描述性統計實作(Python)
python
# 使用 pandas 直接計算
print(sales['revenue'].describe()) # 包含 mean, std, min, 25%, 50%, 75%, max
> **注意**:當資料中存在極端值時,平均數可能被扭曲,此時建議同時參考中位數與箱形圖。
## 3. 變數關聯與假設檢定
### 3.1 變數關聯
| 相關係數 | 何時使用 | 主要特點 |
|-----------|-----------|-----------|
| Pearson 相關係數 | 連續變數 | 線性關聯,需正態分布 |
| Spearman 等級相關 | 連續/順序變數 | 非參數,衡量單調關係 |
| Kendall Tau | 連續/順序變數 | 更穩健於少量資料 |
| 卡方檢定 | 分類變數 | 測試兩個分類變數之獨立性 |
#### 3.1.1 Pearson 相關範例
python
corr = sales[['revenue', 'price']].corr(method='pearson')
print('Pearson 相關係數:\n', corr)
> **實務提示**:在 Tableau 或 Power BI 內,可使用「相關係數」欄位直接顯示兩變數之關聯強度。
### 3.2 假設檢定
| 測試 | 目的 | 主要假設 | 典型應用 |
|------|------|-----------|-----------|
| t‑檢定 | 比較兩組均值 | 同質變異數,正態分布 | 產品 A vs B 的銷售額 |
| 單樣本 t‑檢定 | 比較樣本均值與已知值 | 同質變異數,正態分布 | 測試營收是否達標 |
| 兩樣本 t‑檢定 | 比較兩組均值 | 同質變異數,正態分布 | 直營店 vs 代理店營收 |
| 卡方檢定 | 兩分類變數獨立性 | 大樣本 | 客戶性別與購買類別 |
#### 3.2.1 t‑檢定範例(Python)
python
import scipy.stats as stats
# 兩組樣本:直營店與代理店月營收
store1 = sales[sales['store_type']=='直營']['revenue']
store2 = sales[sales['store_type']=='代理']['revenue']
t_stat, p_value = stats.ttest_ind(store1, store2, equal_var=False)
print('t‑統計量:', t_stat)
print('p‑值:', p_value)
> **解讀**:若 p‑值 < 0.05,則拒絕「兩組均值相等」的虛無假設,表明兩種店型之營收存在顯著差異。
## 4. EDA 的最佳實踐流程
1. **資料概覽**:使用 `head()`, `info()`, `describe()` 先快速檢視資料結構與統計量。
2. **缺失值與異常值檢查**:採用直方圖、箱形圖或 `isnull()` 確認缺失模式。
3. **數據型別轉換**:將類別型資料轉成 `category`,數值型資料確保正確型別。
4. **可視化探索**:依據資料型別選擇合適圖表,並多角度檢視。
5. **關聯性分析**:計算相關係數矩陣或卡方檢定,發現潛在關聯。
6. **假設檢定**:針對商業問題設立假設,進行統計檢驗。
7. **結果彙整**:以報表或儀表板呈現,強調商業洞察。
| 步驟 | 主要工具 | 目標 |
|------|----------|------|
| 1 | Pandas, R `summary()` | 快速獲得資料結構與基礎統計 |
| 2 | Matplotlib, seaborn | 直觀檢查缺失與異常 |
| 3 | Pandas `astype()` | 確保資料型別正確 |
| 4 | Tableau, Power BI | 視覺化洞察 |
| 5 | NumPy, SciPy | 計算相關係數 |
| 6 | Statsmodels, R `t.test()` | 進行假設檢定 |
| 7 | Power BI 報表, Excel | 對外傳達結果 |
> **結語**:探索性資料分析不只是技術操作,更是一種商業直覺。透過清晰的視覺化、嚴謹的統計與實務案例的結合,決策者能在不斷變動的市場環境中,快速抓住關鍵洞察,為後續的模型建構與策略決策奠定堅實的基礎。