
來源:數據STUDIO
作者:云朵君
導讀: Seaborn就是讓困難的東西更加簡單。它是針對統計繪圖的,一般來說,能滿足數據分析90%的繪圖需求。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,同時它能高度兼容numpy與pandas數據結構以及scipy與statsmodels等統計模式。
本文主要介紹回歸模型圖lmplot、線性回歸圖regplot,這兩個函數的核心功能很相似,都會繪制數據散點圖,并且擬合關于變量x,y之間的回歸曲線,同時顯示回歸的95%置信區間。
另一個是線性回歸殘差圖residplot,該函數繪制觀察點與回歸曲線上的預測點之間的殘差圖。
所有圖形將使用股市數據--中國平安sh.601318歷史k線數據。
使用模塊及數據預處理
import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns import baostock as bs
bs.login()
result = bs.query_history_k_data('sh.601318',
fields = 'date,open,high, low,close,volume',
start_date = '2020-01-01',
end_date = '2021-05-01',
frequency='d')
dataset = result.get_data().set_index('date').applymap(lambda x: float(x))
bs.logout()
dataset['Open_Close'] = (dataset['open'] - dataset['close'])/dataset['open']
dataset['High_Low'] = (dataset['high'] - dataset['low'])/dataset['low']
dataset['Increase_Decrease'] = np.where(dataset['volume'].shift(-1) > dataset['volume'],1,0)
dataset['Buy_Sell_on_Open'] = np.where(dataset['open'].shift(-1) > dataset['open'],1,0)
dataset['Buy_Sell'] = np.where(dataset['close'].shift(-1) > dataset['close'],1,0)
dataset['Returns'] = dataset['close'].pct_change()
dataset = dataset.dropna()
dataset['Up_Down'] = np.where(dataset['Returns'].shift(-1) > dataset['Returns'],'Up','Down')
dataset = dataset.dropna()
dataset.head()
lmplot是一種集合基礎繪圖與基于數據建立回歸模型的繪圖方法。通過lmplot我們可以直觀地總覽數據的內在關系。顯示每個數據集的線性回歸結果,xy變量,利用'hue'、'col'、'row'參數來控制繪圖變量??梢园阉醋鞣诸惱L圖依據。
同時可以使用模型參數來調節需要擬合的模型:order、logistic、lowess、robust、logx。
1、線性回歸
lmplot繪制散點圖及線性回歸擬合線非常簡單,只需要指定自變量和因變量即可,lmplot會自動完成線性回歸擬合?;貧w模型的置信區間用回歸線周圍的半透明帶繪制。
lmplot 支持引入第三維度進行對比,例如我們設置 hue="species"。
sns.lmplot(x="open",
y="close",
hue="Up_Down",
data=dataset)
2、局部加權線性回歸
局部加權回歸散點平滑法(locally weighted scatterplot smoothing,LOWESS),是一種非參數回歸擬合的方式,其主要思想是選取一定比例的局部數據,擬合多項式回歸曲線,以便觀察到數據的局部規律和趨勢。通過設置參數lowess=True 。
局部加權線性回歸是機器學習里的一種經典的方法,彌補了普通線性回歸模型欠擬合或者過擬合的問題。其原理是給待預測點附近的每個點都賦予一定的權重,然后基于最小均方誤差進行普通的線性回歸。局部加權中的權重,是根據要預測的點與數據集中的點的距離來為數據集中的點賦權值。當某點離要預測的點越遠,其權重越小,否則越大。
lowess bool, 可選
如果為True,使用統計模型來估計非參數低成本模型(局部加權線性回歸)。這種方法具有最少的假設,盡管它是計算密集型的,因此目前根本不計算置信區間。
sns.lmplot(x="open",
y="close",
hue="Up_Down",
lowess=True,
data=dataset)
3、對數線性回歸模型
通過設置參數logx 完成線性回歸轉換對數線性回歸,其實質上是完成了輸入空間x到輸出空間y的非線性映射。
對數據做一些變換的目的是它能夠讓它符合我們所做的假設,使我們能夠在已有理論上對其分析。對數變換(log transformation)是特殊的一種數據變換方式,它可以將一類我們理論上未解決的模型問題轉化為已經解決的問題。
logx : bool, 可選
如果為True,則估計y ~ log(x)形式的線性回歸,在輸入空間中繪制散點圖和回歸模型。注意x必須是正的。
sns.lmplot(x="open",
y="close",
hue="Up_Down",
data=dataset,
logx=True)
4、穩健線性回歸
在有異常值的情況下,它可以使用不同的損失函數來減小相對較大的殘差,擬合一個健壯的回歸模型,傳入robust=True。
穩健回歸是將穩健估計方法用于回歸模型,以擬合大部分數據存在的結構,同時可識別出潛在可能的離群點、強影響點或與模型假設相偏離的結構。
穩健回歸是統計學穩健估計中的一種方法,其主要思路是將對異常值十分敏感的經典最小二乘回歸中的目標函數進行修改。經典最小二乘回歸以使誤差平方和達到最小為其目標函數。因為方差為一不穩健統計量,故最小二乘回歸是一種不穩健的方法。
不同的目標函數定義了不同的穩健回歸方法。常見的穩健回歸方法有:最小中位平方法、M估計法等。
hue, col, row : strings
定義數據子集的變量,并在不同的圖像子集中繪制height : scalar, 可選
定義子圖的高度col_wrap : int, 可選
設置每行子圖數量n_boot int, 可選
用于估計的重采樣次數ci。默認值試圖平衡時間和穩定性。ci int in [ 0,100 ]或None, 可選
回歸估計的置信區間的大小。這將使用回歸線周圍的半透明帶繪制。置信區間是使用bootstrap估算的;robust bool, 可選
如果為True,則用于statsmodels估計穩健的回歸。這將消除異常值的權重。并且由于使用引導程序計算回歸線周圍的置信區間,您可能希望將其關閉獲得更快的迭代速度(使用參數ci=None)或減少引導重新采樣的數量(n_boot)。
sns.lmplot(x="open",
y="volume",
data=dataset,
hue="Increase_Decrease",
col="Increase_Decrease",
# col|hue控制子圖不同的變量species col_wrap=2,
height=4,
robust=True)
5、多項式回歸
在存在高階關系的情況下,可以擬合多項式回歸模型來擬合數據集中的簡單類型的非線性趨勢。通過傳入參數order大于1,此時使用numpy.Polyfit估計多項式回歸的方法。
多項式回歸是回歸分析的一種形式,其中自變量 x 和因變量 y 之間的關系被建模為關于 x 的 次多項式。多項式回歸擬合x的值與 y 的相應條件均值之間的非線性關系,表示為 ,被用于描述非線性現象。
雖然多項式回歸是擬合數據的非線性模型,但作為統計估計問題,它是線性的。在某種意義上,回歸函數 在從數據估計到的未知參數中是線性的。因此,多項式回歸被認為是多元線性回歸的特例。
order : int, 可選
多項式回歸,設定指數
sns.lmplot(x="close",
y="volume",
data=dataset,
hue="Increase_Decrease",
col="Up_Down", # col|hue控制子圖不同的變量species col_wrap=2, # col_wrap控制每行子圖數量 height=4, # height控制子圖高度 order=3 # 多項式最高次冪 )
6、邏輯回歸
Logistic回歸是一種廣義線性回歸,logistic回歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更為常用,也更加容易解釋,多類可以使用softmax方法進行處理。
實際中最為常用的就是二分類的logistic回歸。
{x,y}_jitter floats, 可選
在x或y變量中加入這個大小的均勻隨機噪聲。對回歸擬合后的數據副本添加噪聲,只影響散點圖的外觀。這在繪制取離散值的變量時很有用。logistic bool, 可選
如果為True,則假定y是一個二元變量,并使用統計模型來估計logistic回歸模型。并且由于使用引導程序計算回歸線周圍的置信區間,您可能希望將其關閉獲得更快的迭代速度(使用參數ci=None)或減少引導重新采樣的數量(n_boot)。
# 制作具有性別色彩的自定義調色板 pal = dict(Up= "#6495ED", Down= "#F08080") # 買賣隨開盤價與漲跌變化 g = sns.lmplot(x= "open", y= "Buy_Sell", col= "Up_Down", hue= "Up_Down",
data=dataset,
palette=pal,
y_jitter= .02, # 回歸噪聲 logistic= True)# 邏輯回歸模型
Lmplot()與regplot()與兩個函數之間的主要區別是regplot()接受變量的類型可以是numpy數組、pandas序列(Series)?;蛘咧苯訉?span style="font-weight:700;">data傳入pandas DataFrame對象數據。而lmplot()的data參數是必須的,且變量必須為字符串。
1、線性回歸
繪制連續型數據并擬合線性回歸模型。
fit_reg bool,可選
如果為True,則估計并繪制與x 和y變量相關的回歸模型。ci int in [ 0,100 ]或None,可選
回歸估計的置信區間的大小。這將使用回歸線周圍的半透明帶繪制。置信區間是使用自舉估算的;對于大型數據集,建議將此參數設置為"None",以避免該計算。scatter bool,可選
如果為True,則繪制一個散點圖,其中包含基礎觀察值(或x_estimator值)。
# 繪制線性回歸擬合曲線 f, ax = plt.subplots(figsize=(8,6))
sns.regplot(x="Returns",
y="volume",
data=dataset,
fit_reg=True,
ci = 95,
scatter=True,
ax=ax)
除了可以接受連續型數據,也可接受離散型數據。將連續變量離散化,并在每個獨立的數據分組中對觀察結果進行折疊,以繪制中心趨勢的估計以及置信區間。
x_estimator callable映射向量->標量,可選
將此函數應用于的每個唯一值,x并繪制得出的估計值。當x是離散變量時,這很有用。如果x_ci給出,該估計將被引導,并得出一個置信區間。x_bins int或vector,可選
將x變量分為離散的bin,然后估計中心趨勢和置信區間。這種裝箱僅影響散點圖的繪制方式;回歸仍然適合原始數據。該參數可以解釋為均勻大?。ú槐匾g隔)的垃圾箱數或垃圾箱中心的位置。使用此參數時,表示默認 x_estimator為numpy.mean。x_ci “ ci”,“ sd”,[ 0,100 ]中的int或None,可選
繪制離散值的集中趨勢時使用的置信區間的大小x。如果為"ci",則遵循ci參數的值 。如果為"sd",則跳過引導程序,并在每個箱中顯示觀測值的標準偏差。
f, ax = plt.subplots(1,2,figsize=(15,6))
sns.regplot(x="Returns",
y="volume",
data=dataset,
x_bins=10,
x_ci="ci",
ax=ax[0])
# 帶有離散x變量的圖,顯示了唯一值的方差和置信區間:
sns.regplot(x="Returns",
y="volume",
data=dataset,
x_bins=10,
x_ci='sd',
ax=ax[1])
2、多項式回歸
order : int, 可選
多項式回歸,設定指數
sns.regplot(x="open",
y="close",
data=dataset.loc[dataset.Up_Down == "Up"],
scatter_kws={"s": 80},
order=5, ci=None)
3、邏輯回歸
{x,y}_jitter floats, 可選
將相同大小的均勻隨機噪聲添加到x或y 變量中。擬合回歸后,噪聲會添加到數據副本中,并且只會影響散點圖的外觀。在繪制采用離散值的變量時,這可能會有所幫助。n_boot int, 可選
用于估計ci的bootstrap重樣本數。默認值試圖平衡時間和穩定性。
sns.regplot(x= "volume",
y= "Increase_Decrease",
data=dataset,
logistic=True,
n_boot=500,
y_jitter=.03,)
4、對數線性回歸
logx bool, 可選
如果為True,則估計y ~ log(x)形式的線性回歸,但在輸入空間中繪制散點圖和回歸模型。注意x必須是正的,這個才能成立。
sns.regplot(x="open",
y="volume",
data=dataset.loc[dataset.Up_Down == "Up"],
x_estimator=np.mean,
logx=True)
5、穩健線性回歸
robust 布爾值,可選
擬合穩健的線性回歸。
sns.regplot(x="open",
y="Returns",
data=dataset.loc[dataset.Up_Down == "Up"],
scatter_kws={"s": 80},
robust=True, ci=None)
residplot()用于檢查簡單的回歸模型是否擬合數據集。它擬合并移除一個簡單的線性回歸,然后繪制每個觀察值的殘差值。通過觀察數據的殘差分布是否具有結構性,若有則這意味著我們當前選擇的模型不是很適合。
1、線性回歸的殘差
此函數將對x進行y回歸(可能作為穩健或多項式回歸),然后繪制殘差的散點圖??梢赃x擇將最低平滑度擬合到殘差圖,這可以幫助確定殘差是否存在結構
lowess 布爾值,可選
在殘留散點圖上安裝最低平滑度的平滑器。
# 擬合線性模型后繪制殘差,lowess平滑 x=dataset.open
y=dataset.Returns
sns.residplot(x=x, y=y,
lowess=True,
color="g")
2、穩健回歸殘差圖
robust bool,可選
計算殘差時,擬合穩健的線性回歸。
sns.residplot(x="open",
y="Returns",
data=dataset.loc[dataset.Up_Down == "Up"],
robust=True,
lowess=True)
3、多項式回歸殘差圖
order int,可選
計算殘差時要擬合的多項式的階數。
sns.residplot(x="open",
y="close",
data=dataset.loc[dataset.Up_Down == "Up"],
order=3,
lowess=True)
1、jointplot
jointplot()函數在其他更大、更復雜的圖形背景中使用regplot()。jointplot()可以通過kind="reg"來調用regplot()繪制線性關系。
sns.jointplot("open",
"Returns",
data=dataset,
kind='reg') # 設置kind="reg"為添加線性回歸擬合 #(使用regplot())和單變量KDE曲線
jointplot()可以通過kind="resid"來調用residplot()繪制具有單變量邊際分布。
sns.jointplot(x="open",
y="close",
data=dataset,
kind="resid")
2、pairplot
給pairplot()傳入kind="reg"參數則會融合regplot()與PairGrid來展示變量間的線性關系。注意這里和lmplot()的區別,lmplot()繪制的行(或列)是將一個變量的多個水平(分類、取值)展開,而在這里,PairGrid則是繪制了不同變量之間的線性關系。
sns.pairplot(dataset,
x_vars=["open", "close"],
y_vars=["Returns"],
height=5,
aspect=.8,
kind="reg");
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25