① 依序閱讀:每節先讀說明;遇到互動元件時,先預測結果,再操作驗證。 ② 對照程式範例:程式碼卡下方的「來源」標了課程練習筆記本(lab);需要實作時,再打開原始筆記本對照。 ③ 檢查理解:答錯時先看回饋,再回到相關說明;標為延伸的內容可留待第二輪。 ④ 最後翻關鍵詞彙卡自測術語,並用 重點速查與來源查閱。
教科書:An Introduction to Statistical Learning with Applications in Python(ISLP)。章節旁的來源標記可點到本頁書目。
統計課教你算平均、標準差、相關係數。這些數字很有用,但它們會漏掉形狀。 四組資料可以有幾乎一樣的平均、標準差、相關係數與迴歸線,畫出來卻完全不同。 Anscombe 在 1973 年提出的經典四重奏就展示了這種情況,下面可以逐筆驗算。
(244, 7) total_bill tip sex smoker day time size 0 16.99 1.01 Female No Sun Dinner 2 1 10.34 1.66 Male No Sun Dinner 3 2 21.01 3.50 Male No Sun Dinner 3 3 23.68 3.31 Male No Sun Dinner 2 4 24.59 3.61 Female No Sun Dinner 4
244 筆餐廳帳單。total_bill 與 tip 是數值,day、sex、smoker 是類別——這兩種型別要配不同的圖。
Ch01-lab-zh.ipynb
兩份資料的相關係數都是 0.82。可以推論什麼?
使用 matplotlib 時,先分清設定屬於哪一層: Figure 是整張畫布(大小、存檔、標題), Axes 是裡面的一個座標系(畫點、設軸範圍、加圖例)。 一張 Figure 可以有很多個 Axes。
ax= 指定位置。Figure-level 函式建立並管理自己的圖,通常回傳 Grid 管理物件,Grid 負責管理 Figure。請查函式文件確認層級,名稱結尾無法判定。
這一格畫的是圖。(產生的是圖,沒有文字輸出可對照。)
來源:Ch02-statlearn-lab-zh.ipynb
這一格畫的是圖。(產生的是圖,沒有文字輸出可對照。)
來源:Ch02-statlearn-lab-zh.ipynb
subplots(nrows=2, ncols=3) 回傳的 axes 是一個 (2, 3) 的 NumPy 陣列。點格子看它的索引——就是 P3 講的二維索引。
nrows=1 時 axes 會退化成一維,axes[0, 1] 就會報錯。要一致就寫 subplots(1, 3, squeeze=False)。
這一格畫的是圖。(產生的是圖,沒有文字輸出可對照。)
來源:Ch02-statlearn-lab-zh.ipynb
導論講義把常用函式分成關係、分布、類別三個家族; 這是在分「你想看什麼」。每個家族又有不同控制層級:上層的 Figure-level 入口替你管理整張圖, 下層的 Axes-level 函式畫到一個座標系。家族與層級是兩個不同的面向。
Axes-level
kind 可選 "hist"、"kde"、"ecdf"。
小刻度用 rug=True 加上,不是 kind="rug"。
以 relplot、displot、catplot 為例,
kind 決定每個子圖的畫法,row/col 則依變數分面,
把各組排成不同列/欄。三者回傳 FacetGrid;沒指定分面時,也可以只畫一個子圖。
Figure-level 不等於「一定有多個子圖」。
下面是語法示意,沿用本頁開頭載入的 tips;先執行 imports 與資料載入。
第一種交給 Seaborn 依吸菸與否分面,第二種把圖放到自己指定的 ax;不另列實跑輸出。
講義還列了下面三類。它們分別提供多視角組圖、迴歸與殘差圖,以及矩陣圖;可依用途與控制層級查找。
| 用途 | Axes-level | Figure-level/回傳的管理物件 |
|---|---|---|
| 多個視角:同時看關係與各欄分布 | 由管理物件安排多個座標系 | jointplot → JointGrid;pairplot → PairGrid |
| 迴歸與殘差:看趨勢及偏離趨勢的情形 | regplot、residplot | lmplot → FacetGrid |
| 矩陣:用顏色看各格數值,需要時依分群排列 | heatmap | clustermap → ClusterGrid |
jointplot 以一對變數為主,加上兩側的分布;pairplot 組合多對變數,
兩者各自管理多個 Axes。clustermap 則連同分群樹與熱圖一起管理。
若你已建立自己的 subplots,應選可接收 ax= 的 Axes-level 函式。
分類依據:導論講義與 Seaborn 官方函式總覽。 函式名稱都可點回官方 API 文件。
你想比較吸菸與不吸菸兩組的帳單金額分布,各組分開成一張直方圖。哪個寫法符合這個目標?
你已用 displot 畫好直方圖,想再以小刻度標出各筆觀測的位置。應如何指定?
完成軸標籤與版面後,對 Figure 呼叫 savefig。
副檔名指定 PNG、PDF 或 JPEG;dpi 對點陣圖決定每英吋像素數。PDF 中的向量圖元仍可縮放,dpi 主要影響其中點陣化的內容。
沿用前面的 fig。命令將在目前工作目錄寫入檔案;同名檔案會被覆寫。
來源:Ch02-statlearn-lab-zh.ipynb
此格沿用 Ch02 建立的二維 axes 陣列;修改第二張子圖後另存,前一份檔案不會自動更新。
來源:Ch02-statlearn-lab-zh.ipynb
你用 sns.relplot(...) 畫完圖,接著寫 ax.set_xlim([0, 10]),卻沒有任何效果。最可能的原因是?
看一個變數的分布有兩種標準做法:直方圖與密度圖。兩者都有一個你必須自己決定的參數—— 直方圖是 bins(切幾格),密度圖是頻寬(平滑多少)。調整這個參數, 同一份資料可能看起來有兩個峰或只有一個。
lab 的註解就提醒了 bins 這個參數。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
hue 分色、multiple='stack' 疊起來。分色看得出各組的形狀,堆疊看得出總量——兩種問題。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
kdeplot 把每個點換成一個小鐘形再加起來,所以它一定是平滑的。平滑程度來自繪圖設定,讀圖時也要留意這項選擇。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
同一份資料,bins=5 看起來是一個峰,bins=30 看起來是兩個峰。你該怎麼辦?
兩個變數的關係圖幾乎都是散佈圖的變形。seaborn 幫你做的事是
用顏色、大小、分面在同一張圖中呈現第三、第四個變數——
hue、size、col 這三個參數值得記起來。
hue= 用顏色、size= 用點的大小、col= 拆成好幾張小圖。超過兩個額外變數時,可分成好幾張圖,方便比較。
hue 與 style 同時用同一個變數,是為了在黑白列印時也分得出來。這個習慣值得學。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
sizes=(15, 200) 明確指定最小與最大的點徑。不指定的話預設範圍很窄,看不出差別。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
pairplot 適合一次查看多個變數的關係:所有數值欄兩兩配對,一眼看完。欄多的時候會很慢,先挑幾欄再畫。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
lineplot 對同一個 x 有多筆資料時,會自動畫平均與 95% 信賴區間。這個區間是 bootstrap 算出來的,第 5 章會講它怎麼來的。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
你想看「小費金額與帳單金額的關係,並區分吸菸與否」。最直接的寫法是?
類別變數的圖最容易被誤讀,因為它們看起來都像長條,但講的事情差很多: countplot 講「有幾筆」、barplot 講「平均是多少」、boxplot 講「分布長怎樣」。 選圖前先確認你要比較筆數、平均還是分布。
盒子是四分位距、線是中位數、鬚是 1.5 倍 IQR 內的極值,外面的點是離群值。在本節比較的基本類別圖中,只有盒鬚圖直接標出這些候選離群值。(產生的是圖,沒有文字輸出可對照。)
來源:Ch01-lab-zh.ipynb
barplot 的長條高度是平均,上面那條細線是 bootstrap 信賴區間,不是標準差。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
countplot 只數筆數,跟 value_counts() 是同一件事的圖版。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
把長條換成一個點加誤差線。要比較好幾組的平均時,點比長條清楚——長條的面積會搶掉注意力。(產生的是圖,沒有文字輸出可對照。)
來源:Ch01-lab-zh.ipynb
| 圖 | 高度/位置代表什麼 | 適合回答 |
|---|---|---|
countplot | 筆數 | 哪一類最多?有沒有哪一類樣本太少? |
barplot | 平均(+信賴區間) | 各組的平均差多少?差得有多確定? |
boxplot | 中位數與四分位距 | 分布形狀?有沒有離群值? |
pointplot | 平均(+誤差線) | 多組平均之間的比較與趨勢 |
比較兩組平均時,要看兩組差值的不確定性。各組自己的信賴區間即使重疊, 差值的區間仍可能不含 0;是否能下結論還取決於樣本數、抽樣方式與模型條件。 可回S4 的信賴區間確認區間在估哪一個量。
一張 barplot 顯示週四的小費比週五高。你還需要知道什麼才能下結論?
最後一種圖:把擬合好的模型畫在資料上面。 把模型與觀測放在一起,可以檢查模型如何描述資料,以及哪些地方有差距。
regplot 直接擬合一條最小平方直線並畫出 95% 信賴區間。這個區間是對迴歸線的不確定性,不是預測區間——第 3 章會分清楚這兩者。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
lmplot 加 hue 會每一組各擬合一條線。兩條線的斜率若不同,提示可以加入交互作用再檢查;樣本變異也可能造成斜率差,仍需估計不確定性。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
tips.corr(numeric_only=True) 先算矩陣,heatmap 只負責上色。共線性的初步檢查常從這裡開始。(產生的是圖,沒有文字輸出可對照。)
Ch01-lab-zh.ipynb
regplot 幫我擬合了線,是不是就等於做了迴歸分析?regplot 的用途是「先看看有沒有線性關係」。weight 與 displacement)。真的要放進同一個迴歸模型的話,第 3 章的共線性與第 6 章的收縮方法就是在處理這件事。lmplot 加了 hue='smoker' 之後,兩組的迴歸線斜率明顯不同。這在暗示什麼?
若每一組 (x,y) 座標都有一個函數值,資料可排成網格。
contour(x, y, f) 的 f 必須有 len(y) 列、len(x) 欄,每個元素對應一個座標配對。
np.multiply.outer 對所有 y 與 x 配對計算乘積,因此 f 的列對應 y、欄對應 x。
來源:Ch02-statlearn-lab-zh.ipynb
這些儲存格只保存圖形,不另造文字輸出。
來源:Ch02-statlearn-lab-zh.ipynb
levels 控制等高線層級的選擇;更多線不會增加原始網格資料。
imshow(f) 用顏色畫出陣列元素,預設座標是欄/列索引,原點在上方;因此不能直接把其座標當成前面的 x、y。
若要對上物理座標,須交代 extent 與 origin 的設定。
統計學習章用同一函數說明「指定形狀」與「從資料估計」的差異。
回顧本頁觀念與原 Lab 的程式,確認各個操作的意義與使用條件。
你要呈現「三個地區(origin)的 mpg 分布,並讓讀者看得出有沒有離群值」。該畫什麼?
把 bins 從 10 調到 60 之後,直方圖出現很多小峰。最合理的解讀是?
一張長條圖把 y 軸截在兩組平均附近,讓小差異看起來大幅放大。這張圖錯在哪?
你想把四張 seaborn 圖排成 2×2 放進同一張 Figure。下列哪一個函式做不到?
需要核對完整公式、比較表或實作時,再展開下方速查。
選圖速查表。先問「x 與 y 各是什麼型別」,再問「我要回答什麼」。需要依家族與控制層級找函式,可回到 Seaborn 函式地圖。
| x 的型別 | y 的型別 | 圖 | seaborn |
|---|---|---|---|
| 數值 | 數值 | 散佈圖 | scatterplot / relplot |
| 數值 | 數值(有序、每個 x 多筆) | 折線圖+信賴區間 | lineplot |
| 數值 | 數值(要看模型) | 散佈圖+迴歸線 | regplot / lmplot |
| 數值 | — | 直方圖/密度圖 | histplot / kdeplot |
| 類別 | 數值 | 盒鬚圖/長條圖/點估計圖 | catplot(kind=…) |
| 類別 | — | 計數圖 | countplot |
| 類別 | 類別 | 計數的交叉表+熱圖 | heatmap |
| 多個數值欄 | — | 成對關係圖/相關熱圖 | pairplot / heatmap |
| figure-level(自己開 Figure) | axes-level(可以傳 ax=) |
|---|---|
relplot | scatterplot、lineplot |
catplot | boxplot、barplot、countplot、pointplot |
displot | histplot、kdeplot、ecdfplot;刻度用 rugplot |
lmplot(迴歸) | regplot、residplot |
clustermap(分群熱圖) | heatmap |
jointplot、pairplot(多軸組圖) | 組合多種單軸畫法;見上方函式地圖 |
| 參數 | 做什麼 | 什麼時候用 |
|---|---|---|
hue= | 用顏色分第三個變數 | 組數 ≤ 5、要疊在同一張圖比較 |
style= | 用標記形狀分 | 要黑白列印時搭配 hue 一起用 |
size= | 用點的大小分 | 第三個變數是數值且範圍大 |
col= / row= | 拆成好幾張小圖 | 組數多、疊起來會糊 |
詞彙卡整理本頁引用的課程 lab中常用的統計或機器學習專有名詞,正面附英文名稱。 先看正面的術語,試著說出定義,再翻面核對。可以洗牌複習,也可以搭配本章例子練習解釋。