在分析資料時,回歸線可以幫助我們了解資料的趨勢。本文章中,我們將介紹如何用 Seaborn 和 Plotly Express 來繪製回歸線。
Table of Contents
範例的資料集
在本文章的範例中,我們使用了兩個資料集,分別是 tips 和 anscombe。我們先來看看如何讀取它們。
Seaborn 和 Plotly Express 都有內建 tip 資料集。讀取方式分別如下。
import seaborn as sns tips = sns.load_dataset('tips') tips.head()
import plotly.express as px tips = px.data.tips() tips.head()
total_bill | tip | sex | smoker | day | time | size |
---|---|---|---|---|---|---|
16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
Seaborn 也內建了 anscombe 資料集。讀取方式如下。
import seaborn as sns anscombe = sns.load_dataset("anscombe") anscombe.head()
dataset | x | y |
---|---|---|
I | 10.0 | 8.04 |
I | 8.0 | 6.95 |
I | 13.0 | 7.58 |
I | 9.0 | 8.81 |
I | 11.0 | 8.33 |
Searbon
regplot()
Seaborn 提供 regplot() 來繪製回歸線。以下是它的宣告。其餘的參數請參照官網。
seaborn.regplot(data=None, x=None, y=None, order=1, logistic=False, lowess=False, robust=False, logx=False, color=None, marker='o')
- data:資料。
- x:x 軸的資料。
- y:y 軸的資料。
- color:顏色。
- marker:點的符號。
- order:大於 1 時,就會使用多項式(polynomial)回歸。
- logistic:使用 statsmodels 套件的 logistic 回歸。
- robust:使用 statsmodels 套件的 robust 回歸。
- lowess:使用 statsmodels 套件的 LOWESS (locally weighted scatterplot smoothing)。
線性回歸(Linear Regression)
regplot() 預設是使用線性回歸。
ax = sns.regplot(data=tips, x='total_bill', y='tip') ax.set_title('Linear Regression')
是不是很簡單呢?regplot() 會先繪製出一個散佈圖(scatter plot),然後在上面再畫上線性回歸線和 95% 的信賴區間(confidence interval)。
下面的範例顯示如何改變顏色和散佈圖上點的符號。
ax = sns.regplot(data=tips, x='total_bill', y='tip', color='g', marker='+') ax.set_title('Linear Regression')
Logistic 回歸
tips['big_tip'] = (tips['tip'] / tips['total_bill']) > .2 ax = sns.regplot(data=tips, x='total_bill', y='big_tip', logistic=True) ax.set_title('Logistic Regression')
Robust 回歸
ax = sns.regplot(data=anscombe[anscombe['dataset']=='III'], x='x', y='y', robust=True) ax.set_title('Robust Regression')
LOWESS (Locally Weighted Scatterplot Smoothing)
ax = sns.regplot(data=tips, x='total_bill', y='tip', lowess=True) ax.set_title('Lowess Model')
多項式回歸(Polynomial Regression)
下面的範例中,我們 2 次多項式回歸。
ax = sns.regplot(data=anscombe[anscombe['dataset']=='II'], x='x', y='y', order=2) ax.set_title('Polynomial Regression with degree 2')
jointplot() with kind=’reg’
jointplot() 除了繪製一個主要的圖表之外,還可以在圖表的上方和右方分別繪製 x 軸與 y 軸資料的圖表。當參數 kind 設定為 reg 時,它就會用 regplot() 主要的圖表。以下是它的宣告,其餘的參數請參照官網。
seaborn.jointplot(x=None, y=None, data=None, kind='scatter', hue=None)
- data:資料。
- x:x 軸的資料。
- y:y 軸的資料。
- kind:圖表類型,可以為 ‘scatter’, ‘kde’, ‘hex’, ‘reg’, 或 ‘resid’。
- hue:分群的資料。
下面的範例使用 jointplot() 來繪製線性回歸線。
ax = sns.jointplot(data=tips, x='total_bill', y='tip', kind='reg')
pairplot() with kind=’reg’
pairplot() 對一個資料集在同一張圖上繪製多個圖表。這讓我們可以比較一個資料集的不同欄位的資料。當參數 kind 設定為 reg 時,它就會用 regplot() 來繪製圖表。以下是它的宣告,其餘的參數請參照官網。
seaborn.pairplot(data, hue=None, x_vars=None, y_vars=None, kind='scatter')
- data:資料。
- x_vars:每個圖表的 x 軸的資料。型態為 array。
- y_vars:每個圖表的 y 軸的資料。型態為 array。
- kind:圖表類型,可以為 ‘scatter’, ‘kde’, ‘hex’, 或 ‘reg’。
- hue:分群的資料。
下面的範例使用 pairplot() 來繪製線性回歸線。
ax = sns.pairplot(data=tips, x_vars=['total_bill', 'size'], y_vars=['tip'], kind='reg', hue='smoker', height=5)
Plotly Express
與 Seaborn 一樣會在散佈圖上繪製回歸線,所以 Plotly Express 的 scatter() 函式就可以直接繪製回歸線了。它的宣告如下,其餘的參數請參照官網。
plotly.express.scatter(data_frame=None, x=None, y=None, color=None, facet_row=None, facet_col=None, trendline=None, title=None)
- data_frame:資料。
- x:x 軸的資料。
- y:y 軸的資料。
- trendline:可以是 ‘ols’ 或 ‘lowess’。
- color:分群的資料。
- facet_row:分群的資料,但會繪製在不同的垂直子圖表上。
- facet_col:分群的資料,但會繪製在不同的水平子圖表上。
- title:圖表標題。
OLS 回歸(Ordinary Least Squares Regression)
我們只要設定參數 trendline 為 ols 就可以了。
px.scatter(tips, x='total_bill', y='tip', trendline='ols', title='Ordinary Least Squares Regression')
LOWESS (Locally Weighted Scatterplot Smoothing)
除了 OSL,scatter() 還支援 LOWESS。
px.scatter(tips, x='total_bill', y='tip', trendline='lowess', title='Locally Weighted Scatterplot Smoothing')
多個子圖表
與 Seaborn 的 pairplot() 相似,Plotly Express 的 scatter() 也可以對一個資料集在同一張圖上繪製多個圖表。
以下的範例中,x 軸與 y 軸為 total_bill 和 tip。參數 color 設定為 sex,所以會依據不同的 sex,在圖表上用不同的顏色標出。此外,參數 facet_col 設定為 smoker,它就將 smoker=No 和 smoker=Yes 的資料繪製兩個圖表上。這樣子方便於我們去比較 smoker 的資料。
px.scatter(tips, x='total_bill', y='tip', trendline='ols', color='sex', facet_col='smoker', title='Ordinary Least Squares Regression')
以下的範例則是改用參數 facet_row。
px.scatter(tips, x='total_bill', y='tip', trendline='ols', color='sex', facet_row='smoker', title='Ordinary Least Squares Regression')
結論
回歸線可以顯示資料的趨勢,幫助我們分析資料。Seaborn 和 Plotly Express 提供了相當方便的函式,讓我們可以輕鬆地繪製回歸線。此外,繪製出來的圖表還相當地漂亮。