Python 回歸線圖(Regression Line Plots)

Photo by Sora Sagano on Unsplash
Photo by Sora Sagano on Unsplash
在分析資料時,回歸線可以幫助我們了解資料的趨勢。本文章中,我們將介紹如何用 Seaborn 和 Plotly Express 來繪製回歸線。

在分析資料時,回歸線可以幫助我們了解資料的趨勢。本文章中,我們將介紹如何用 Seaborn 和 Plotly Express 來繪製回歸線。

完整程式碼可以在 下載。

範例的資料集

在本文章的範例中,我們使用了兩個資料集,分別是 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_billtipsexsmokerdaytimesize
16.991.01FemaleNoSunDinner2
10.341.66MaleNoSunDinner3
21.013.50MaleNoSunDinner3
23.683.31MaleNoSunDinner2
24.593.61FemaleNoSunDinner4

Seaborn 也內建了 anscombe 資料集。讀取方式如下。

import seaborn as sns

anscombe = sns.load_dataset("anscombe")
anscombe.head()
datasetxy
I10.08.04
I8.06.95
I13.07.58
I9.08.81
I11.08.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')
Seaborn regplot()
Seaborn regplot()

是不是很簡單呢?regplot() 會先繪製出一個散佈圖(scatter plot),然後在上面再畫上線性回歸線和 95% 的信賴區間(confidence interval)。

下面的範例顯示如何改變顏色和散佈圖上點的符號。

ax = sns.regplot(data=tips, x='total_bill', y='tip', color='g', marker='+')
ax.set_title('Linear Regression')
Seaborn regplot() set with color and marker
Seaborn regplot() set with color and marker

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')
Seaborn regplot() using Logistic regression
Seaborn regplot() using Logistic regression

Robust 回歸

ax = sns.regplot(data=anscombe[anscombe['dataset']=='III'], x='x', y='y', robust=True)
ax.set_title('Robust Regression')
Seaborn regplot() using Robust regression
Seaborn regplot() using Robust regression

LOWESS (Locally Weighted Scatterplot Smoothing)

ax = sns.regplot(data=tips, x='total_bill', y='tip', lowess=True)
ax.set_title('Lowess Model')
Seaborn regplot() using LOWESS
Seaborn regplot() using LOWESS

多項式回歸(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')
Seaborn regplot() using degree 2 polynomial regression
Seaborn regplot() using degree 2 polynomial regression

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')
Seaborn jointplot()
Seaborn jointplot()

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)
Seaborn pairplot()
Seaborn pairplot()

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')
Plotly Express OLS regression plot
Plotly Express OLS regression plot

LOWESS (Locally Weighted Scatterplot Smoothing)

除了 OSL,scatter() 還支援 LOWESS。

px.scatter(tips, 
           x='total_bill', 
           y='tip', 
           trendline='lowess', 
           title='Locally Weighted Scatterplot Smoothing')
Plotly Express LOWESS regression plot
Plotly Express LOWESS regression plot

多個子圖表

與 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')
Plotly Express regression plot set with facet_col
Plotly Express regression plot set with facet_col

以下的範例則是改用參數 facet_row。

px.scatter(tips,
           x='total_bill',
           y='tip',
           trendline='ols',
           color='sex',
           facet_row='smoker',
           title='Ordinary Least Squares Regression')
Plotly Express regression plot set with facet_row
Plotly Express regression plot set with facet_row

結論

回歸線可以顯示資料的趨勢,幫助我們分析資料。Seaborn 和 Plotly Express 提供了相當方便的函式,讓我們可以輕鬆地繪製回歸線。此外,繪製出來的圖表還相當地漂亮。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You May Also Like