
來源:數(shù)據(jù)STUDIO
作者:云朵君
導(dǎo)讀: Seaborn就是讓困難的東西更加簡單。它是針對統(tǒng)計繪圖的,一般來說,能滿足數(shù)據(jù)分析90%的繪圖需求。Seaborn其實是在matplotlib的基礎(chǔ)上進行了更高級的API封裝,從而使得作圖更加容易,同時它能高度兼容numpy與pandas數(shù)據(jù)結(jié)構(gòu)以及scipy與statsmodels等統(tǒng)計模式。
本文主要介紹回歸模型圖lmplot、線性回歸圖regplot,這兩個函數(shù)的核心功能很相似,都會繪制數(shù)據(jù)散點圖,并且擬合關(guān)于變量x,y之間的回歸曲線,同時顯示回歸的95%置信區(qū)間。
另一個是線性回歸殘差圖residplot,該函數(shù)繪制觀察點與回歸曲線上的預(yù)測點之間的殘差圖。
所有圖形將使用股市數(shù)據(jù)--中國平安sh.601318歷史k線數(shù)據(jù)。
使用模塊及數(shù)據(jù)預(yù)處理
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是一種集合基礎(chǔ)繪圖與基于數(shù)據(jù)建立回歸模型的繪圖方法。通過lmplot我們可以直觀地總覽數(shù)據(jù)的內(nèi)在關(guān)系。顯示每個數(shù)據(jù)集的線性回歸結(jié)果,xy變量,利用'hue'、'col'、'row'參數(shù)來控制繪圖變量??梢园阉醋鞣诸惱L圖依據(jù)。
同時可以使用模型參數(shù)來調(diào)節(jié)需要擬合的模型:order、logistic、lowess、robust、logx。
1、線性回歸
lmplot繪制散點圖及線性回歸擬合線非常簡單,只需要指定自變量和因變量即可,lmplot會自動完成線性回歸擬合?;貧w模型的置信區(qū)間用回歸線周圍的半透明帶繪制。
lmplot 支持引入第三維度進行對比,例如我們設(shè)置 hue="species"。
sns.lmplot(x="open",
y="close",
hue="Up_Down",
data=dataset)
2、局部加權(quán)線性回歸
局部加權(quán)回歸散點平滑法(locally weighted scatterplot smoothing,LOWESS),是一種非參數(shù)回歸擬合的方式,其主要思想是選取一定比例的局部數(shù)據(jù),擬合多項式回歸曲線,以便觀察到數(shù)據(jù)的局部規(guī)律和趨勢。通過設(shè)置參數(shù)lowess=True 。
局部加權(quán)線性回歸是機器學(xué)習(xí)里的一種經(jīng)典的方法,彌補了普通線性回歸模型欠擬合或者過擬合的問題。其原理是給待預(yù)測點附近的每個點都賦予一定的權(quán)重,然后基于最小均方誤差進行普通的線性回歸。局部加權(quán)中的權(quán)重,是根據(jù)要預(yù)測的點與數(shù)據(jù)集中的點的距離來為數(shù)據(jù)集中的點賦權(quán)值。當(dāng)某點離要預(yù)測的點越遠,其權(quán)重越小,否則越大。
局部加權(quán)線性回歸的優(yōu)勢就在于處理非線性關(guān)系的異方差問題。
lowess bool, 可選
如果為True,使用統(tǒng)計模型來估計非參數(shù)低成本模型(局部加權(quán)線性回歸)。這種方法具有最少的假設(shè),盡管它是計算密集型的,因此目前根本不計算置信區(qū)間。
sns.lmplot(x="open",
y="close",
hue="Up_Down",
lowess=True,
data=dataset)
3、對數(shù)線性回歸模型
通過設(shè)置參數(shù)logx 完成線性回歸轉(zhuǎn)換對數(shù)線性回歸,其實質(zhì)上是完成了輸入空間x到輸出空間y的非線性映射。
對數(shù)據(jù)做一些變換的目的是它能夠讓它符合我們所做的假設(shè),使我們能夠在已有理論上對其分析。對數(shù)變換(log transformation)是特殊的一種數(shù)據(jù)變換方式,它可以將一類我們理論上未解決的模型問題轉(zhuǎn)化為已經(jīng)解決的問題。
logx : bool, 可選
如果為True,則估計y ~ log(x)形式的線性回歸,在輸入空間中繪制散點圖和回歸模型。注意x必須是正的。
sns.lmplot(x="open",
y="close",
hue="Up_Down",
data=dataset,
logx=True)
4、穩(wěn)健線性回歸
在有異常值的情況下,它可以使用不同的損失函數(shù)來減小相對較大的殘差,擬合一個健壯的回歸模型,傳入robust=True。
穩(wěn)健回歸是將穩(wěn)健估計方法用于回歸模型,以擬合大部分?jǐn)?shù)據(jù)存在的結(jié)構(gòu),同時可識別出潛在可能的離群點、強影響點或與模型假設(shè)相偏離的結(jié)構(gòu)。
穩(wěn)健回歸是統(tǒng)計學(xué)穩(wěn)健估計中的一種方法,其主要思路是將對異常值十分敏感的經(jīng)典最小二乘回歸中的目標(biāo)函數(shù)進行修改。經(jīng)典最小二乘回歸以使誤差平方和達到最小為其目標(biāo)函數(shù)。因為方差為一不穩(wěn)健統(tǒng)計量,故最小二乘回歸是一種不穩(wěn)健的方法。
不同的目標(biāo)函數(shù)定義了不同的穩(wěn)健回歸方法。常見的穩(wěn)健回歸方法有:最小中位平方法、M估計法等。
hue, col, row : strings
定義數(shù)據(jù)子集的變量,并在不同的圖像子集中繪制height : scalar, 可選
定義子圖的高度col_wrap : int, 可選
設(shè)置每行子圖數(shù)量n_boot int, 可選
用于估計的重采樣次數(shù)ci。默認(rèn)值試圖平衡時間和穩(wěn)定性。ci int in [ 0,100 ]或None, 可選
回歸估計的置信區(qū)間的大小。這將使用回歸線周圍的半透明帶繪制。置信區(qū)間是使用bootstrap估算的;robust bool, 可選
如果為True,則用于statsmodels估計穩(wěn)健的回歸。這將消除異常值的權(quán)重。并且由于使用引導(dǎo)程序計算回歸線周圍的置信區(qū)間,您可能希望將其關(guān)閉獲得更快的迭代速度(使用參數(shù)ci=None)或減少引導(dǎo)重新采樣的數(shù)量(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、多項式回歸
在存在高階關(guān)系的情況下,可以擬合多項式回歸模型來擬合數(shù)據(jù)集中的簡單類型的非線性趨勢。通過傳入?yún)?shù)order大于1,此時使用numpy.Polyfit估計多項式回歸的方法。
多項式回歸是回歸分析的一種形式,其中自變量 x 和因變量 y 之間的關(guān)系被建模為關(guān)于 x 的 次多項式。多項式回歸擬合x的值與 y 的相應(yīng)條件均值之間的非線性關(guān)系,表示為 ,被用于描述非線性現(xiàn)象。
雖然多項式回歸是擬合數(shù)據(jù)的非線性模型,但作為統(tǒng)計估計問題,它是線性的。在某種意義上,回歸函數(shù) 在從數(shù)據(jù)估計到的未知參數(shù)中是線性的。因此,多項式回歸被認(rèn)為是多元線性回歸的特例。
order : int, 可選
多項式回歸,設(shè)定指數(shù)
sns.lmplot(x="close",
y="volume",
data=dataset,
hue="Increase_Decrease",
col="Up_Down", # col|hue控制子圖不同的變量species col_wrap=2, # col_wrap控制每行子圖數(shù)量 height=4, # height控制子圖高度 order=3 # 多項式最高次冪 )
6、邏輯回歸
Logistic回歸是一種廣義線性回歸,logistic回歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更為常用,也更加容易解釋,多類可以使用softmax方法進行處理。
實際中最為常用的就是二分類的logistic回歸。
{x,y}_jitter floats, 可選
在x或y變量中加入這個大小的均勻隨機噪聲。對回歸擬合后的數(shù)據(jù)副本添加噪聲,只影響散點圖的外觀。這在繪制取離散值的變量時很有用。logistic bool, 可選
如果為True,則假定y是一個二元變量,并使用統(tǒng)計模型來估計logistic回歸模型。并且由于使用引導(dǎo)程序計算回歸線周圍的置信區(qū)間,您可能希望將其關(guān)閉獲得更快的迭代速度(使用參數(shù)ci=None)或減少引導(dǎo)重新采樣的數(shù)量(n_boot)。
# 制作具有性別色彩的自定義調(diào)色板 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()與兩個函數(shù)之間的主要區(qū)別是regplot()接受變量的類型可以是numpy數(shù)組、pandas序列(Series)?;蛘咧苯訉?span style="font-weight:700;">data傳入pandas DataFrame對象數(shù)據(jù)。而lmplot()的data參數(shù)是必須的,且變量必須為字符串。
1、線性回歸
繪制連續(xù)型數(shù)據(jù)并擬合線性回歸模型。
fit_reg bool,可選
如果為True,則估計并繪制與x 和y變量相關(guān)的回歸模型。ci int in [ 0,100 ]或None,可選
回歸估計的置信區(qū)間的大小。這將使用回歸線周圍的半透明帶繪制。置信區(qū)間是使用自舉估算的;對于大型數(shù)據(jù)集,建議將此參數(shù)設(shè)置為"None",以避免該計算。scatter bool,可選
如果為True,則繪制一個散點圖,其中包含基礎(chǔ)觀察值(或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ù)型數(shù)據(jù),也可接受離散型數(shù)據(jù)。將連續(xù)變量離散化,并在每個獨立的數(shù)據(jù)分組中對觀察結(jié)果進行折疊,以繪制中心趨勢的估計以及置信區(qū)間。
x_estimator callable映射向量->標(biāo)量,可選
將此函數(shù)應(yīng)用于的每個唯一值,x并繪制得出的估計值。當(dāng)x是離散變量時,這很有用。如果x_ci給出,該估計將被引導(dǎo),并得出一個置信區(qū)間。x_bins int或vector,可選
將x變量分為離散的bin,然后估計中心趨勢和置信區(qū)間。這種裝箱僅影響散點圖的繪制方式;回歸仍然適合原始數(shù)據(jù)。該參數(shù)可以解釋為均勻大?。ú槐匾g隔)的垃圾箱數(shù)或垃圾箱中心的位置。使用此參數(shù)時,表示默認(rèn) x_estimator為numpy.mean。x_ci “ ci”,“ sd”,[ 0,100 ]中的int或None,可選
繪制離散值的集中趨勢時使用的置信區(qū)間的大小x。如果為"ci",則遵循ci參數(shù)的值 。如果為"sd",則跳過引導(dǎo)程序,并在每個箱中顯示觀測值的標(biāo)準(zhǔn)偏差。
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變量的圖,顯示了唯一值的方差和置信區(qū)間:
sns.regplot(x="Returns",
y="volume",
data=dataset,
x_bins=10,
x_ci='sd',
ax=ax[1])
2、多項式回歸
order : int, 可選
多項式回歸,設(shè)定指數(shù)
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 變量中。擬合回歸后,噪聲會添加到數(shù)據(jù)副本中,并且只會影響散點圖的外觀。在繪制采用離散值的變量時,這可能會有所幫助。n_boot int, 可選
用于估計ci的bootstrap重樣本數(shù)。默認(rèn)值試圖平衡時間和穩(wěn)定性。
sns.regplot(x= "volume",
y= "Increase_Decrease",
data=dataset,
logistic=True,
n_boot=500,
y_jitter=.03,)
4、對數(shù)線性回歸
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、穩(wěn)健線性回歸
robust 布爾值,可選
擬合穩(wěn)健的線性回歸。
sns.regplot(x="open",
y="Returns",
data=dataset.loc[dataset.Up_Down == "Up"],
scatter_kws={"s": 80},
robust=True, ci=None)
residplot()用于檢查簡單的回歸模型是否擬合數(shù)據(jù)集。它擬合并移除一個簡單的線性回歸,然后繪制每個觀察值的殘差值。通過觀察數(shù)據(jù)的殘差分布是否具有結(jié)構(gòu)性,若有則這意味著我們當(dāng)前選擇的模型不是很適合。
1、線性回歸的殘差
此函數(shù)將對x進行y回歸(可能作為穩(wěn)健或多項式回歸),然后繪制殘差的散點圖??梢赃x擇將最低平滑度擬合到殘差圖,這可以幫助確定殘差是否存在結(jié)構(gòu)
lowess 布爾值,可選
在殘留散點圖上安裝最低平滑度的平滑器。
# 擬合線性模型后繪制殘差,lowess平滑 x=dataset.open
y=dataset.Returns
sns.residplot(x=x, y=y,
lowess=True,
color="g")
2、穩(wěn)健回歸殘差圖
robust bool,可選
計算殘差時,擬合穩(wěn)健的線性回歸。
sns.residplot(x="open",
y="Returns",
data=dataset.loc[dataset.Up_Down == "Up"],
robust=True,
lowess=True)
3、多項式回歸殘差圖
order int,可選
計算殘差時要擬合的多項式的階數(shù)。
sns.residplot(x="open",
y="close",
data=dataset.loc[dataset.Up_Down == "Up"],
order=3,
lowess=True)
1、jointplot
jointplot()函數(shù)在其他更大、更復(fù)雜的圖形背景中使用regplot()。jointplot()可以通過kind="reg"來調(diào)用regplot()繪制線性關(guān)系。
sns.jointplot("open",
"Returns",
data=dataset,
kind='reg') # 設(shè)置kind="reg"為添加線性回歸擬合 #(使用regplot())和單變量KDE曲線
jointplot()可以通過kind="resid"來調(diào)用residplot()繪制具有單變量邊際分布。
sns.jointplot(x="open",
y="close",
data=dataset,
kind="resid")
2、pairplot
給pairplot()傳入kind="reg"參數(shù)則會融合regplot()與PairGrid來展示變量間的線性關(guān)系。注意這里和lmplot()的區(qū)別,lmplot()繪制的行(或列)是將一個變量的多個水平(分類、取值)展開,而在這里,PairGrid則是繪制了不同變量之間的線性關(guān)系。
sns.pairplot(dataset,
x_vars=["open", "close"],
y_vars=["Returns"],
height=5,
aspect=.8,
kind="reg");
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03