聊天視窗

數據驅動決策:現代分析師的實戰手冊 - 第 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 儀表板 --- > **結語**:數據探索與可視化不僅是技術作業,更是一場資料故事的敘事過程。透過本章學習的工具與流程,您將能將複雜資料轉化為易於理解、可直接支援決策的洞察。