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

本教程對seaborn官方教程的理解性翻譯,在原教程的基礎上有適當的刪減,調整。僅供參考交流

可視化數據集的分布.png

. 可視化數據集的分布

  • 單元分布
  • 雙元分布
  • 可視化數據集中的pairwise relationship

1. 單元分布 sns.distplot()

  • 直方圖(hist)+內核密度函數(kde)

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

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

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

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

圖片.png

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

圖片.png
  • 核密度估計

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

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

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

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

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

圖片.png

參數bw(binwidth)同直方圖的bin一樣,控制了估算與數據間的緊密程度。與我們之前提到的內核寬度一致,默認情況下,函數會直接猜一個數據,但嘗試更大或更小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參數,可以控制曲線繪制多遠的極限值。然而這僅僅只是影響曲線如何繪制,并不會影響曲線本身

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

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

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

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

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

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

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

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

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

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

通過調節參數kind={scatter,hex,reg,resid,kde}可繪制不同種類的圖。

  • Hexbin圖

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

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

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
  • 核密度估計

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

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

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

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

sns也提供kedplot()函數來讓你直接繪制二維核密度圖。這樣你就可以繪制這類圖到一個特定的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)

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

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對象,你可以用他來添加更多的圖層或調整其他可視化。

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.可視化成對關系sns.pairplot()

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

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

高級圖像管理對象PairGrid

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

g=sns.Pairgrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdig(snsn.kdeplot,cmap="Blues_d",n_levels=6)
圖片.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375

推薦閱讀更多精彩內容

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