返回目錄
A
數據驅動決策:現代分析師的實戰手冊 - 第 3 章
第3章 數據探索與可視化
發布於 2026-02-22 02:21
# 第3章 數據探索與可視化
在前兩章建立了資料基礎建設與治理之後,本章將聚焦於 **探索性資料分析(EDA)** 與 **可視化** 的實務操作。透過描述性統計、圖形化檢視以及互動式儀表板,我們能快速洞悉資料結構、發現潛在問題,並將結果以直覺易懂的方式呈現給非技術決策者。
> **章節目標**
>
> - 了解描述性統計的核心指標與意義。
> - 掌握常用的 EDA 步驟與工具。
> - 學會使用 Python 與 SQL 進行資料提取、清洗與可視化。
> - 培養以圖形化為主導的數據洞察思維。
---
## 3.1 描述性統計的基礎概念
| 指標 | 定義 | 適用場景 |
|------|------|----------|
| **平均值** (Mean) | • • 所有值之總和除以樣本數 |
| **中位數** (Median) | • • 將資料排序後位於中間的數值 |
| **眾數** (Mode) | • • 最頻繁出現的數值 |
| **標準差** (Std) | • • 資料離均值的平均偏差 |
| **變異係數** (CV) | • • 標準差除以平均值,衡量相對離散度 |
| **四分位距** (IQR) | • • 第三四分位數減去第一四分位數 |
> **提示**:在實務中,**標準差** 與 **IQR** 兩者皆能用於偵測離群值;前者適用於正態分佈,後者則更適合偏態資料。
### Python 範例:Pandas 描述性統計
python
import pandas as pd
# 讀取範例資料
df = pd.read_csv('sample_data.csv')
# 取得數值欄位的描述性統計
desc = df.describe().T
print(desc[['mean', 'std', 'min', '25%', '50%', '75%', 'max']])
### SQL 範例:計算平均值與標準差
sql
SELECT
AVG(sales) AS avg_sales,
STDDEV(sales) AS std_sales
FROM sales_table;
---
## 3.2 探索性資料分析(EDA)流程
EDA 步驟可概括為以下五個階段:
1. **資料收集** – 確認資料來源、格式與結構。
2. **資料清洗** – 處理缺失值、重複資料與格式錯誤。
3. **統計摘要** – 生成描述性統計與分布圖。
4. **關聯性檢測** – 透過相關係數、交叉表與箱型圖了解變數之間關係。
5. **假設驗證** – 用統計檢定(t 檢定、ANOVA)確認觀察到的差異。
> **實務小技巧**:使用 **Jupyter Notebook** 或 **Databricks** 進行可重複的 EDA 工作流程,可大幅提升團隊協作效率。
---
## 3.3 互動式可視化工具選型
| 工具 | 主要特性 | 適用情境 |
|------|-----------|-----------|
| **Matplotlib** | 傳統靜態圖 | 初學者與報表生成 |
| **Seaborn** | 統計圖形 | 深入統計分析 |
| **Plotly** | 互動式圖表 | 需要即時回饋的儀表板 |
| **Bokeh** | Web 儀表板 | 大規模資料交互展示 |
| **Altair** | 宣告式視覺化 | 快速原型設計 |
| **Tableau / Power BI** | 商業 BI 平台 | 業務用戶快速查詢 |
> **選擇建議**:若資料規模在 1M 以上,**Bokeh** 或 **Plotly Dash** 能輕鬆處理;若重在報告產出,**Matplotlib/Seaborn** 足夠。
### Plotly 範例:交互式散佈圖
python
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species',
title='Iris 質量散佈圖', hover_data=['petal_width', 'petal_length'])
fig.show()
### Bokeh 範例:動態折線圖
python
from bokeh.plotting import figure, show, output_file
from bokeh.models import ColumnDataSource
import pandas as pd
df = pd.read_csv('time_series.csv')
source = ColumnDataSource(df)
p = figure(title='日銷售額', x_axis_type='datetime', plot_width=800, plot_height=400)
p.line('date', 'sales', source=source, line_width=2)
output_file('sales.html')
show(p)
---
## 3.4 案例實戰:電商平台客戶行為分析
| 步驟 | 操作 | 工具 | 目標 |
|------|------|------|------|
| 1. 資料提取 | 從 ClickHouse 匯出交易與瀏覽資料 | SQL | 準備原始資料 |
| 2. 數據清洗 | 去除重複、填補缺失、標準化時間戳 | Pandas | 保證資料品質 |
| 3. 描述性統計 | 交易金額分布、平均客單價 | Pandas, Seaborn | 初步洞察 |
| 4. 相關性分析 | 交易金額 vs. 瀏覽時長 | Plotly, Correlation heatmap | 確認關聯 |
| 5. 分群 | K-means 對客戶進行細分 | scikit-learn | 目標客群定位 |
| 6. 交互式儀表板 | 建立 Dash 儀表板供營運人員使用 | Dash | 可視化決策支援 |
> **成果**:發現「瀏覽時長 > 300 秒」的客戶平均客單價提升 15%;透過客群細分,營運團隊能針對高價值客戶設計個性化行銷。
---
## 3.5 常見陷阱與最佳實踐
1. **資料偏差**:忽略缺失值處理會產生偏差,請使用 `missingno` 或 `SimpleImputer` 先視覺化再填補。
2. **過度擬合圖形**:在報告中加入太多自訂樣式會降低可讀性,建議先使用標準風格(`seaborn.set_style('whitegrid')`)。
3. **互動性失衡**:過多的互動元素會導致使用者分心,保留必要的 Hover/Zoom 功能即可。
4. **資料安全**:在公共儀表板部署時務必使用 `bokeh.embed.file_html` 或 `streamlit` 的 `secret` 機制防止資料外洩。
5. **重複工作**:將 EDA 程式包裝成模組(`explorer.py`)並寫入單元測試,保證重複性與可維護性。
---
## 3.6 小練習
1. **描述性統計**:計算 `sample_data.csv` 中 `price`、`rating` 的 10% 到 90% 分位數。
2. **Eda**:使用 Seaborn 繪製 `price` 的 KDE 與箱型圖,並確認是否有離群值。
3. **相關性**:使用 Plotly 產生 `sales` 與 `time_spent` 的散佈圖,並在圖上顯示 Pearson 相關係數。
4. **互動儀表板**:使用 Bokeh 建立一個簡易的「每日瀏覽量」折線圖,並加入滑動條以篩選日期範圍。
> **提交方式**:將 Notebook 或腳本上傳至 GitHub Repo,並在 `README.md` 中撰寫簡短的洞察報告。
---
## 3.6 延伸閱讀
- *Python Data Science Handbook* – Jake VanderPlas(第三章 EDA 章節)
- *Storytelling with Data* – Cole Nussbaumer Knaflic(可視化設計原則)
- *Tableau Public Gallery* – 參考電商、金融、政府開放資料案例
- **開源庫**:
- `missingno` – 缺失值視覺化
- `seaborn` – 統計圖形
- `plotly` – 互動式圖表
- `bokeh` – Web 儀表板
---
> **結語**:數據探索與可視化不僅是技術作業,更是一場資料故事的敘事過程。透過本章學習的工具與流程,您將能將複雜資料轉化為易於理解、可直接支援決策的洞察。