返回目錄
A
數據科學的邏輯與實踐:從基礎到高階決策 - 第 2 章
第二章 統計基礎與資料探索
發布於 2026-03-06 13:57
# 2. 統計基礎與資料探索
在數據科學的道路上,統計學是不可或缺的導航圖。透過對資料的統計性描述與推論,我們能夠把散亂的數值轉化為有洞察力的訊息。以下將從基本概念開始,逐步引入實務工具與案例,讓讀者在理論與實作之間搭起橋樑。
## 2.1 基本統計概念
| 概念 | 定義 | 公式(若適用) |
|------|------|-----------------
| 觀測值(\(x_i\)} | 個別資料點 | - |
| 樣本平均 \(\bar{x}\) | 資料平均數 | \(\bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i\) |
| 樣本變異數 \(s^2\) | 數據離均值的離散程度 | \(s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2\) |
| 標準差 \(s\) | 變異數平方根 | \(s = \sqrt{s^2}\) |
| 相關係數 \(r\) | 兩變量之線性關聯 | \(r = \frac{\sum(x_i-\bar{x})(y_i-\bar{y})}{(n-1)s_xs_y}\) |
> **小結**:上述指標是任何數據分析的基石,熟練掌握可節省下游建模的時間。
## 2.2 數據分布與描述統計
### 2.2.1 分布類型
- **正態分布**:平均數與標準差決定形狀,\(z\) 分數是核心工具。
- **偏態分布**:長尾、右偏或左偏,須考慮轉換(log、box‑cox)。
- **離散分布**:伯努利、二項、泊松;常用於事件計數。
### 2.2.2 直方圖與箱型圖
- **直方圖**:觀察頻率分布;使用 `matplotlib` 或 `seaborn`。
- **箱型圖**:中位數、四分位數與離群點直觀展示;可用於多組資料比較。
python
import seaborn as sns
import matplotlib.pyplot as plt
sns.histplot(data=df['sales'], kde=True)
plt.title('銷售額分布')
plt.show()
## 2.3 假設檢定
| 檢定 | 何時使用 | 典型例子 |
|------|----------|----------|
| 單樣本 t 檢定 | 比較樣本平均與已知值 | 新產品平均銷售額是否超過市場平均? |
| 兩獨立樣本 t 檢定 | 比較兩組獨立樣本 | 男女性客戶平均購買額差異? |
| 配對樣本 t 檢定 | 同一群體前後比較 | 促銷前後同一客戶購買行為變化? |
| 卡方檢定 | 觀察分類資料分佈 | 促銷策略對不同區域的影響? |
> **實務建議**:先檢查資料正態性與變異數同質性,決定使用哪種檢定。
## 2.4 數據可視化
- **散點圖**:觀察兩變量關係。
- **熱力圖**:相關矩陣視覺化。
- **時間序列圖**:揭示季節性與趨勢。
python
# 相關矩陣熱力圖
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('變量相關性')
plt.show()
## 2.5 實務案例:零售銷售數據探索
### 2.5.1 背景
某零售品牌擁有 12 個月的日銷售資料(包含商品類別、價格、促銷、天氣等欄位)。目標:找出影響銷售額的主要因素,並為下個季度促銷制定建議。
### 2.5.2 步驟
1. **資料載入**:使用 `pandas.read_csv`。
2. **資料清洗**:處理缺失值、重複紀錄。
3. **描述統計**:計算平均、標準差,觀察極值。
4. **可視化**:
- 銷售額直方圖,發現右偏。
- 商品類別箱型圖,確定高價商品離群。
5. **相關性分析**:發現價格與銷售額呈負相關,促銷活動正相關。
6. **假設檢定**:兩獨立樣本 t 檢定驗證促銷前後平均銷售差異顯著。
7. **結果解讀**:建議在高價商品上做折扣促銷,並在季節性高峰期強化促銷。
### 2.5.3 代碼示例(簡化)
python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats
# 1. 載入資料
sales_df = pd.read_csv('sales_data.csv')
# 2. 清洗
sales_df.drop_duplicates(inplace=True)
sales_df['promo'] = sales_df['promo'].fillna(0)
# 3. 描述統計
print(sales_df['amount'].describe())
# 4. 可視化
sns.histplot(sales_df['amount'], kde=True)
plt.title('銷售額分布')
plt.show()
# 5. 相關性
print(sales_df[['amount', 'price', 'promo']].corr())
# 6. 假設檢定
pre = sales_df[sales_df['promo']==0]['amount']
post = sales_df[sales_df['promo']==1]['amount']
print(stats.ttest_ind(pre, post))
> **結語**:透過結合描述統計、可視化與假設檢定,我們不僅能夠描述現況,更能洞悉因果關係,為業務決策提供數據支撐。