跳到主要內容

DS 103 · 模組 1

正確地看:視覺化選擇與圖表判讀

從圖表要回答的問題出發,選擇能誠實回答它的圖表類型、尺度與視覺編碼。

開始第一節
已完成 0 / 5
同步我的進度加入梯次後,進度可跨裝置保存,講師也能看到

資訊

加入後,你已完成的模組編號會連同「學員代碼」傳送給講師,講師可以看到你的進度。請使用講師提供的代碼,不要輸入姓名、公司機密或其他個資。進度資料與該梯次的其他資料一起保存。

學習目標

  • 從分析問題與受眾出發;每張圖只保留一個主要訊息
  • 將問題類型配對適當圖表,避免妨礙比較的圖型
  • 正確使用尺度;理解零基準、對數尺度、排序與分母效應
  • 節制使用視覺編碼、直接標示、避免只靠顏色傳意,並提供可近用文字
  • 以同一資料製作比較、趨勢、分布三種圖並互相檢視

圖表的工作

30 分鐘

圖表的工作:回答問題,不是裝飾

學習目標:從分析問題與受眾出發;每張圖只保留一個主要訊息。

同事請你「把這季的數字視覺化」。如果你打開試算表,隨便挑一個看起來好看的圖表類型,你已經走錯方向了:圖表不是裝飾,而是針對特定受眾回答特定問題的答案。在選擇圖表類型之前,你需要先知道這張圖要回答什麼問題,以及底下那一句話應該寫什麼。

先想裝飾

挑一個看起來吸引人的圖表類型,把所有能拿到的指標都放進去,套用色彩繽紛的樣式,然後希望讀者自己找到重點。

先想問題

問題
寫下這張圖必須回答的唯一分析問題(比較、趨勢、分布、關係或組成)。
受眾
確認誰會看這張圖,以及他們接下來要做什麼決策或追問什麼問題。
訊息
寫下這張圖應該讓讀者能說出口的那一句話。
從模糊的要求到明確的圖表任務書
模糊的要求明確的圖表任務書
「把這季的數字視覺化」問題:五條產品線中哪一條這一季成長最快?受眾:要決定下一季投資方向的部門主管。
「把 ESG 資料畫出來」問題:我們的用水強度指標在過去兩年如何變化?受眾:要檢視目標達成進度的永續委員會。
本課程的資料集(先載入,畫圖前先問問題)
import pandas as pd

# clean:涵蓋多個實體與期間的指標表(ESG/校務/營運)
df = pd.read_csv("DS103_Indicators_Clean.csv")
df.shape
df.head()

# 在畫任何圖之前:這張圖必須回答的「唯一」問題是什麼?
question = "最新一期中,哪些實體的碳排放強度最高?"

注意

資料安全提醒:本課程所有練習都使用課程提供的合成檔案。除非獲得授權,切勿將機密的機構或公司資料、客戶資料或個人資料貼入 AI 工具或練習環境。

資訊

Human, AI, Human:人負責定義問題、受眾與圖表要傳達的一個主要訊息;AI 可以協助繪製圖表;人負責在圖表上線前檢查它是否真的回答了設定的問題。
  • 問題用一句話寫下來,而且只能是比較、趨勢、分布、關係或組成之一
  • 受眾要具體到一個角色或一組決策者,而不是「大家」
  • 訊息要能讓讀者在五秒內說出口,不需要額外解釋
  • 任務書要在畫圖之前就寫好,而不是畫完圖之後才回頭補寫
案例:把「畫一下業務團隊的數字」變成任務書

業務主管原本只說「畫一下業務團隊的數字」。追問之後,真正的問題是「過去四個季度,哪個區域的新客戶轉換率下降最多?」,受眾是要決定下一季訓練資源分配的區域總監。有了這句任務書,正確的圖表類型(依區域分色、直接標示的趨勢折線圖)幾乎立刻浮現,不需要再試七八種圖表類型。

強訊息

  • 一句話講完,不需要搭配口頭解釋
  • 點名具體的實體、期間或數值
  • 明確指出要比較、追蹤或凸顯的對象

弱訊息

  • 只重複軸或圖例上已經寫出來的變數名稱
  • 需要額外口頭說明才聽得懂重點
  • 同時嘗試回答兩個以上不同的問題
自我檢測

主管請你「把銷售檔案裡的所有東西都做成圖表」。你應該先做什麼?

主管請你「把銷售檔案裡的所有東西都做成圖表」。你應該先做什麼?

重點: 圖表存在的理由是回答一個特定受眾的特定問題,而不是展示更多資料。

圖表類型家族

40 分鐘

比較、趨勢、分布、關係與組成

學習目標:將問題類型配對適當圖表,避免妨礙比較的圖型。

大多數分析問題都可以歸到少數幾種類型,每一種類型都有一種能誠實回答它的圖表,也都有幾種容易悄悄扭曲它的圖表。先辨識問題屬於哪一種類型,圖表的選擇幾乎就會自動出現。

五種問題類型與能誠實回答它們的圖表
類型問題的樣子能誠實回答的圖表常見的扭曲圖型
比較各類別在單一指標上如何比較?長條圖(排序、共同基準線)切片過多的圓餅圖;扭曲高度的 3D 長條圖
趨勢指標如何隨時間變化?折線圖時間間隔不一致的長條圖
分布數值在母體中如何分散?直方圖或箱型圖只看單一平均值而掩蓋分散程度
關係兩個連續變數之間如何相關?散佈圖只顯示趨勢線而不顯示背後的資料點
組成各部分如何組成整體?堆疊長條圖(類別少)或 100% 堆疊長條圖切片超過約五片的圓餅圖
同一份資料、兩種圖表類型、兩個不同的問題
import matplotlib.pyplot as plt

latest = df[df["period"] == df["period"].max()]
comparison = latest[latest["metric"] == "emissions_intensity"].sort_values("value", ascending=False)

# 比較型問題:長條圖,排序,共同基準線
plt.bar(comparison["entity_id"], comparison["value"])

trend = df[(df["entity_id"] == "E01") & (df["metric"] == "emissions_intensity")].sort_values("period")
# 趨勢型問題:同一指標、單一實體、多個期間的折線圖
plt.plot(trend["period"], trend["value"])

注意

超過約五個類別的圓餅圖,會逼讀者去比較很小的角度,而人類本來就不擅長準確判斷角度大小。如果真正的問題是排序比較,排序過的長條圖幾乎總是能傳達得更清楚。
  • 在打開任何繪圖工具之前,先說出問題屬於哪一種類型:比較、趨勢、分布、關係或組成
  • 有共同基準線的排序長條圖,是類別比較最安全的預設選擇
  • 折線圖只保留給沿連續序列(通常是時間)變化的數值
  • 不要把組成型圖表(圓餅圖、堆疊長條圖)硬套在比較型問題上,這會掩蓋讀者真正需要的排序
案例:忽略問題類型導致誤導

分析師想呈現五個服務據點在「準時交付率」上的差異,卻選擇了一個色彩繽紛的圓餅圖,理由是「看起來比較有活力」。因為圓餅圖的切片角度很接近,讀者完全看不出哪個據點真正落後。換成排序過的長條圖後,落後的據點立刻清楚可見,而且不需要更改任何一個數字。

  1. 命名問題類型
    先說出這是比較、趨勢、分布、關係還是組成問題,不要跳過這一步。
  2. 檢查類別數量
    比較或組成型問題中,類別數量超過五到七個時,長條圖通常比圓餅圖或圖例更清楚。
  3. 選擇對應圖表並檢查扭曲風險
    對照表格選出對應圖表類型,並檢查是否落入常見的扭曲圖型。
自我檢測

你需要比較六條產品線在最新一季的總排放量。哪一種圖表類型最適合這個問題?

你需要比較六條產品線在最新一季的總排放量。哪一種圖表類型最適合這個問題?

重點: 先辨識問題屬於比較、趨勢、分布、關係或組成中的哪一種,幾乎就能自動決定正確的圖表類型。

座標、尺度與基準線

35 分鐘

座標、尺度、排序與基準線

學習目標:正確使用尺度;理解零基準、對數尺度、排序與分母效應。

就算選對了圖表類型,尺度用得不對還是會誤導讀者。最常見的情況是長條圖不從零開始、用線性尺度呈現橫跨好幾個數量級的數值、排序方式沒有說明理由,以及在沒有分母的情況下直接比較原始計數。

誠實的尺度選擇

  • 長條圖的數值軸從 0 開始
  • 數值橫跨多個數量級時,使用並標示對數尺度
  • 類別依所比較的數值排序,而不是預設按字母順序
  • 比較不同規模的實體時,改用比率而非原始計數

有風險的尺度選擇

  • 長條圖 y 軸從非零值開始,誇大微小差異
  • 線性尺度把較小的數值壓縮到幾乎看不見
  • 沒有說明理由、恰好有利於某個結論的排序方式
  • 在規模差異很大的實體之間直接比較原始計數,沒有分母
檢查基準線與比率,不只是圖表類型
# 長條圖的 y 軸必須包含 0,否則視覺差異會被誇大
plt.bar(comparison["entity_id"], comparison["value"])
plt.ylim(bottom=0)

# 比較不同規模的實體:若有分母可用,使用比率而非原始計數
per_unit = comparison.assign(rate=comparison["value"] / comparison["denominator"])
分母如何改變結論
原始比較比率比較為什麼重要
實體 A 的總事件數比實體 B 多實體 A 每千名員工的事件數比實體 B 少實體 A 是規模大得多的組織;只看原始計數只反映規模,不反映表現

注意

截斷的 y 軸是圖表最常見、也最有說服力的誤導方式之一,而且完全不需要更動任何一個數字。在相信視覺上的差異有多大之前,一定要先檢查軸從哪裡開始。
案例:線性尺度掩蓋了小據點的變化

一張比較各據點用電量的長條圖裡,最大據點的用電量是最小據點的 40 倍。用線性尺度時,較小的據點幾乎貼在軸線上,看不出年度變化。改用標示清楚的對數尺度後,所有據點的相對變化都能被看見,但一定要在圖上註明「對數尺度」,否則讀者會誤判差距的實際大小。

  • 長條圖的數值軸是否從 0 開始?
  • 數值是否橫跨多個數量級,需要對數尺度並加以標示?
  • 類別排序是否有明確理由,而不是恰好有利於某個結論?
  • 比較不同規模的實體時,是否已經換算成比率?
自我檢測

一張長條圖的 y 軸從 80 畫到 100 而不是 0 到 100,兩根數值為 90 與 96 的長條看起來高度差了將近一倍。對這張圖最正確的描述是?

一張長條圖的 y 軸從 80 畫到 100 而不是 0 到 100,兩根數值為 90 與 96 的長條看起來高度差了將近一倍。對這張圖最正確的描述是?

重點: 就算圖表類型選對了,軸的基準線、尺度、排序方式或缺少分母,仍然可能誤導讀者。

顏色、標籤與可近用性

35 分鐘

顏色、標籤與可近用性

學習目標:節制使用視覺編碼、直接標示、避免只靠顏色傳意,並提供可近用文字。

顏色是傳達精確意義最弱的管道之一:大約每十二位男性中就有一位有某種程度的色覺缺陷,圖表在列印或匯出時經常完全失去顏色資訊,而圖例又逼讀者在圖表與圖例之間來回對照。節制而重複的編碼方式可以一次解決這三個問題。

編碼選擇與其可近用性風險
做法風險較可近用的替代方案
只用紅/綠標示通過/未通過部分色覺缺陷使用者及灰階列印時難以分辨在顏色之外加上圖案、形狀或直接文字標籤
用較遠處的圖例對應顏色與類別逼讀者不斷來回移動視線,容易看錯直接在線條或長條末端標示每個系列的名稱
圖表標題只重複軸上的變數名稱浪費了讀者最常真正閱讀的那一行文字標題直接說出圖表的主要發現或問題
用直接標示取代較遠的圖例
for _, row in trend.tail(1).iterrows():
    plt.annotate(row["entity_id"], (row["period"], row["value"]))

plt.title("實體 E01:碳排放強度自 2023 年以來下降 18%")  # 陳述發現,而不只是軸的變數名稱

注意

一張圖表只是因為用了「色盲友善」的配色,就「看起來」可近用,其實不夠:如果轉成灰階列印或黑白影印後意義完全消失,它仍然失敗。要用灰階預覽測試,而不只是用配色檢查工具。
  • 絕不讓顏色成為傳達意義的唯一管道;一定搭配標籤、形狀或圖案
  • 優先在圖表上直接標示,而不是讓讀者自己去解讀圖例
  • 標題要陳述發現或問題,而不只是重複軸上已經看得到的變數名稱
  • 為圖表的主要重點提供一到兩句文字摘要,供螢幕報讀器使用者使用
案例:灰階列印後消失的圖表

一張用紅、橘、黃三種顏色區分風險等級的圖表,在彩色螢幕上看起來很清楚。委員會要求列印黑白紙本在會議中傳閱,三種顏色印出來後幾乎變成同一種深淺的灰色,風險等級的區別完全消失。補上形狀(圓形、三角形、方形)與直接文字標籤後,黑白紙本也能正確傳達風險等級。

  1. 轉灰階預覽
    把圖表轉成灰階或列印黑白測試版,確認每個類別仍可分辨。
  2. 移除圖例,只看直接標示
    暫時隱藏圖例,確認讀者仍能靠直接標示理解每個系列。
  3. 只唸出標題與摘要
    只唸出圖表標題與一句文字摘要,確認螢幕報讀器使用者仍能抓到重點。
自我檢測

一個 dashboard 只用紅色與綠色圓點標示哪些據點通過或未通過安全檢查。最正確的評估是?

一個 dashboard 只用紅色與綠色圓點標示哪些據點通過或未通過安全檢查。最正確的評估是?

重點: 節制而重複的編碼:直接標示、形狀與有資訊量的標題:能讓圖表變得可近用,而不只是色彩繽紛。

Guided Lab

45 分鐘

Guided Lab:從表格到三張證據圖

學習目標:在教師引導下,以同一資料製作比較、趨勢、分布三種圖並互相檢視。

資訊

實作問題:用同一份指標資料,比較圖、趨勢圖與分布圖各自能揭露什麼,又各自無法單獨呈現什麼?
  1. 載入並檢視
    載入乾淨版指標資料,檢查其筆數、實體、期間與指標。
  2. 製作比較圖
    挑選一個指標與最新一期,製作排序過、有零基準的長條圖比較所有實體。
  3. 製作趨勢圖
    挑選一個實體與指標,製作橫跨所有可用期間的折線圖。
  4. 製作分布圖
    挑選一個指標,橫跨所有實體與期間,製作其數值的直方圖。
  5. 為每張圖寫一句 evidence statement
    為每張圖寫一句不超出這張圖本身所能支持範圍的聲稱。
  6. 檢視每張圖的限制
    為每張圖指出一個它自己無法回答的真實問題。
  7. 檢查分母效應
    確認是否有任何比較應該改用比率而非原始數值。
evidence statement 句型範例(請填入你自己的輸出結果)
圖表類型可以支持的敘述單獨無法支持的敘述
比較(長條圖)「在最新一期中,實體〔X〕的〔指標〕最高。」為什麼實體 X 最高,或這個差異是否隨時間仍具意義
趨勢(折線圖)「實體〔X〕的〔指標〕在〔期間〕到〔期間〕之間下降/上升了〔數值〕。」這個趨勢是否會持續,或是什麼原因造成這個變化
分布(直方圖)「大多數實體落在〔範圍〕之間;少數幾個遠高於/低於這個範圍。」如果沒有同時檢查比較圖,無法指出究竟是哪一個實體是離群值

注意

這三張圖單獨都無法支持關於某個數值為何偏高、偏低或正在變化的因果聲稱。請讓每一句 evidence statement 都只停留在那張圖實際呈現的範圍內。

完成

如果 AI 協助撰寫繪圖程式碼,請自己逐項檢查:該從零開始的軸是否真的從零開始、排序方式是否有意義、evidence statement 是否只停留在圖表實際呈現的範圍內。AI 可以加快草擬速度;驗證與結論仍是人的責任。
  • 只做一種圖表類型就停下來,沒有用另外兩種類型互相檢查同一個結論
  • 替每張圖寫的 evidence statement 比圖表實際能支持的範圍更大
  • 忘了檢查是否有分母效應,直接比較不同規模實體的原始數值

重點: 比較、趨勢與分布三種圖從同一份資料回答不同的問題;可信的分析會同時使用不只一種,並清楚說明每一種能與不能支持什麼。

接下來做什麼?