Seaborn教程(2)可視化數(shù)據(jù)集的分布

本教程對seaborn官方教程的理解性翻譯,在原教程的基礎(chǔ)上有適當(dāng)?shù)膭h減,調(diào)整。僅供參考交流

可視化數(shù)據(jù)集的分布.png

. 可視化數(shù)據(jù)集的分布

  • 單元分布
  • 雙元分布
  • 可視化數(shù)據(jù)集中的pairwise relationship

1. 單元分布 sns.distplot()

  • 直方圖(hist)+內(nèi)核密度函數(shù)(kde)

在seaborn中最簡便查看單元分布的函數(shù)是distplot().該函數(shù)默認(rèn)繪制直方圖并擬合內(nèi)核密度估計(jì)。通過調(diào)整參數(shù)可以分別繪制直方圖,擬合內(nèi)核密度圖,地毯圖等。

x = np.random.normal(size=100)
sns.distplot(x);
單元分布
  • 直方圖

sns.distplot(x,kde=False) / plt.hist()

當(dāng)繪制直方圖時(shí),你需要調(diào)整的參數(shù)是bin的數(shù)目(組數(shù))。displot()會默認(rèn)給出一個它認(rèn)為比較好的組數(shù),但是嘗試不同的組數(shù)可能會揭示出數(shù)據(jù)不同的特征。
sns.displot(x,bins=20,kde=False,rug=True)

圖片.png

當(dāng)繪制直方圖時(shí),最重要的參數(shù)是bin以及vertical,以確定直方圖的組數(shù)和放置位置
sns.distplot(x, bins=20, kde=False, rug=True);

圖片.png
  • 核密度估計(jì)

sns.distplot(x,hist=False) / sns.kdeplot(x)

核密度估計(jì)圖使用的較少,但其是繪制出數(shù)據(jù)分布的有用工具,與直方圖類似,KDE圖以一個軸的高度為準(zhǔn),沿著另外的軸線編碼觀測密度。

sns.displot(x,hist=False,rug=True)
圖片.png

繪制KDE圖比繪制直方圖要復(fù)雜得多,每個觀測值首先要以該值為中心的正(高斯)曲線代替。然后各個點(diǎn)在加起來,計(jì)算支持網(wǎng)格點(diǎn)中每個點(diǎn)的密度值,然后將得到的曲線歸一化,使其面積小于,即得到核密度估計(jì)圖

在seaborng中也有一個函數(shù)kdeplot(),使用這個函數(shù),我們可以得到同樣的曲線,這個函數(shù)在distplot()中也被調(diào)用,但是他提供了更多更方便的借口,來進(jìn)行可視化調(diào)整。
sns.kdeplot(x,shae=Ture)

圖片.png

參數(shù)bw(binwidth)同直方圖的bin一樣,控制了估算與數(shù)據(jù)間的緊密程度。與我們之前提到的內(nèi)核寬度一致,默認(rèn)情況下,函數(shù)會直接猜一個數(shù)據(jù),但嘗試更大或更小bw情況的,或許會更有幫助。

sns.kdeplot(x)
sns.kdeplot(x, bw=.2, label="bw: 0.2")
sns.kdeplot(x, bw=2, label="bw: 2")
plt.legend();
圖片.png

使用cut參數(shù),可以控制曲線繪制多遠(yuǎn)的極限值。然而這僅僅只是影響曲線如何繪制,并不會影響曲線本身

sns.kedplot(x,shade=True,cut=0)
sns.rugplot(x)
圖片.png
  • 擬合參數(shù)分布

sns.distplot(x,kde=False,fit=stats,gamma)

你也可以通過使用distplot()來擬合出一個數(shù)據(jù)集的參數(shù)分布,直觀上來評估其余觀測數(shù)據(jù)是否關(guān)系密切。

x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma);
圖片.png

2. 二元變量分布 sns.jointplot()

seaborn也能用來可視化二元變量的分布,最簡單的方法是使用jointplot(),這個函數(shù)能夠產(chǎn)生一個多面板的圖像,在圖像上包括兩個變量之間的關(guān)系,在單獨(dú)的坐標(biāo)中還繪制出了各個變量的分布。

mean,cov=[0,1],[(1,.5),(.5,1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
  • 散點(diǎn)圖

sns.jointplot(x='x',y='y',data=df)

可視化二元分布最常見的方式是繪制散點(diǎn)圖。散點(diǎn)圖通過散點(diǎn)位置來代表x,y值。這和地毯圖繪制在二維上類似。你可以通過matlibplot中的plt.scatter繪制散點(diǎn)圖,當(dāng)然你也可以直接使用sns.jointplot來繪制。

sns.jointplot(x="x", y="y", data=df);
sns.jointplot.png

通過調(diào)節(jié)參數(shù)kind={scatter,hex,reg,resid,kde}可繪制不同種類的圖。

  • Hexbin圖

sns.jointplot(x=x,y=y,data=df,kind='hex')

一個直方圖的二維模擬被稱為“Hexbin”圖,因?yàn)檫@類圖通過六角箱顏色的深淺來表示落于六角箱類觀測值的數(shù)目。因此這類圖比較適用于觀察較大的數(shù)據(jù)集。該圖可以使用plt.hexbin繪制,當(dāng)然也可以調(diào)參使用jointplot()繪制,當(dāng)使用時(shí)最好設(shè)置為白色背景,圖像效果最佳。

x,y=np.random.mutivariate_normal(mean,cov,1000).T
with sns.axes_style("white")
        sns.jointplot(x=x,y=y,kind="hex",color='k')
Hexinplot.png
  • 核密度估計(jì)

sns.jointplot(x='x',y='y',data=df,kind='kde')

sns.kdeplot(df.x,df.y)

也可以通核密度函數(shù)來表現(xiàn)二元分布的分布,在seaborn,這樣的圖通過等高線圖來表現(xiàn)二元分布的。

sns.jointplot(x="x", y="y", data=df, kind="kde");
kedplot.png

sns也提供kedplot()函數(shù)來讓你直接繪制二維核密度圖。這樣你就可以繪制這類圖到一個特定的matplotlib軸上。

f,ax=plt.subplots(figsize(6,6))
sns.kedplot(df.x,df.y,ax=ax)
sns.rugplot9(df.x,color='g',ax=ax)
sns.rugplot(df.y,veritical=True,ax=ax)
kedplot+rugplot.png
  • sns.kedplot(df.x,df.y,n_level=60,shade=True)

如果你希望你的二維變量密度更連續(xù),你可以通過增加等高線數(shù)量來完成

f,ax=subplots(figsize=(6,6))
cmp=sns.cubehelix_palette(as_cmap=True,dark=0,light=1,reverse=True)
sns.kedplot(df.x,df.y,cmap=map,n_level=60,shade=True)
kdeplot.png
  • JointGrid 高級圖像管理對象

jointplot()使用JointGrid來管理圖形。如果你想更靈活的繪圖可以通過使用JointGrid。jointplot()在繪圖后將返回jointplot對象,你可以用他來添加更多的圖層或調(diào)整其他可視化。

g=sns.joinplot(x='x',y='y',data=df,kind='kde',color='m')
g.plot_joint(plt.scatter,c='w',s=30,linewidth=1,marker='+')
g.ax_joint.collection[0].set_alpha(0)
g.set_axis_label("$X$","$Y$")
jointgrid.png

3.可視化成對關(guān)系sns.pairplot()

為了繪制一個數(shù)據(jù)集中多個成對的二元分布,你可以使用pairplot()功能,該功能將創(chuàng)建矩陣,來展現(xiàn)兩兩變量間的關(guān)系。默認(rèn)情況,各單變量分布將繪制在對角線上。

iris=sns.load_dataset("iris")
sns.paiplot(iris)
pairplot.png

高級圖像管理對象PairGrid

和jointplot()與JointGrid的關(guān)系一樣,可以使用PairGrid對pairplot進(jìn)行更多個性化設(shè)計(jì)。

g=sns.Pairgrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdig(snsn.kdeplot,cmap="Blues_d",n_levels=6)
圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第三章 分布數(shù)據(jù)集的可視化 在處理一組數(shù)據(jù)時(shí),通常首先要做的是了解變量是如何分布的。這一章將簡要介紹seborn中...
    未禾鹽閱讀 5,580評論 1 5
  • 設(shè)置繪圖可以在jupyter notebook顯示 可以使用下面三種方法繪圖 直接使用DataFrame繪圖,比如...
    _我和你一樣閱讀 1,398評論 0 1
  • 在湯海峰湯總(QQ/微信:49701762)群里,這個叫李夢悅的分享很不錯,我記錄下來分享給大家: 我叫李夢悅,很...
    安梓閱讀 424評論 0 1
  • 繁星怒放的夏夜 在前頭搔首弄姿 在放聲肆掠的言語 在眼前空游思度 …撩撥吧,我想 ,撩撥吧……我不必和你分享我的幻...
    黑超假面人閱讀 215評論 0 0
  • 有沒有這樣一個周末。 不要他的陪伴,也不約姐姐妹妹聊天喝茶,因?yàn)榱膩砹娜?,?nèi)容還不是彼此的他。就這樣一個周末,能不...
    Ceciliare閱讀 212評論 0 0

友情鏈接更多精彩內(nèi)容