Python可視化神器Seaborn入門系列(一)——kdeplot和distplot
作者:why Python愛好者社區--專欄作者
個人公眾號:iPythonistas專註python爬蟲,數據可視化,數據分析,python前端技術公眾號:Python愛好者社區
Seaborn是基於matplotlib的Python可視化庫。 它提供了一個高級界面來繪製有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精緻。但應強調的是,應該把Seaborn視為matplotlib的補充,而不是替代物。
Seaborn的安裝
>>>pip install seaborn
安裝完Seaborn包後,我們就開始進入接下來的學習啦,首先我們介紹kdeplot的畫法。
註:所有代碼均是在IPython notebook中實現
kdeplot(核密度估計圖)
核密度估計(kernel density estimation)是在概率論中用來估計未知的密度函數,屬於非參數檢驗方法之一。通過核密度估計圖可以比較直觀的看出數據樣本本身的分布特徵。具體用法如下:
seaborn.kdeplot(data,data2=None,shade=False,vertical=False,kernel=gau,bw=scott,
gridsize=100,cut=3,clip=None,legend=True,cumulative=False,shade_lowest=True,cbar=False, cbar_ax=None, cbar_kws=None, ax=None, **kwargs)
我們通過一些具體的例子來學習一些參數的用法:
首先導入相應的庫
%matplotlib inline #IPython notebook中的魔法方法,這樣每次運行後可以直接得到圖像,不再需要使用plt.show()import numpy as np #導入numpy包,用於生成數組import seaborn as sns #習慣上簡寫成snssns.set() #切換到seaborn的默認運行配置
繪製簡單的一維kde圖像
x=np.random.randn(100) #隨機生成100個符合正態分布的數sns.kdeplot(x)
cut:參數表示繪製的時候,切除帶寬往數軸極限數值的多少(默認為3)
sns.kdeplot(x,cut=0)
cumulative :是否繪製累積分布
sns.kdeplot(x,cumulative=True)
shade:若為True,則在kde曲線下面的區域中進行陰影處理,color控制曲線及陰影的顏色
sns.kdeplot(x,shade=True,color="g")
vertical:表示以X軸進行繪製還是以Y軸進行繪製
sns.kdeplot(x,vertical=True)
二元kde圖像
y=np.random.randn(100)sns.kdeplot(x,y,shade=True)
cbar:參數若為True,則會添加一個顏色棒(顏色幫在二元kde圖像中才有)
sns.kdeplot(x,y,shade=True,cbar=True)
接下來,我們接著學習功能更為強大的distplot
distplot
displot()集合了matplotlib的hist()與核函數估計kdeplot的功能,增加了rugplot分布觀測條顯示與利用scipy庫fit擬合參數分布的新穎用途。具體用法如下:
seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)
先介紹一下直方圖(Histograms):
直方圖又稱質量分布圖,它是表示資料變化情況的一種主要工具。用直方圖可以解析出資料的規則性,比較直觀地看出產品質量特性的分布狀態,對於資料分布狀況一目了然,便於判斷其總體質量分布情況。直方圖表示通過沿數據範圍形成分箱,然後繪製條以顯示落入每個分箱的觀測次數的數據分布。
接下來還是通過具體的例子來體驗一下distplot的用法:
sns.distplot(x,color="g")
通過hist和kde參數調節是否顯示直方圖及核密度估計(默認hist,kde均為True)
import matplotlib.pyplot as pltfig,axes=plt.subplots(1,3) #創建一個一行三列的畫布sns.distplot(x,ax=axes[0]) #左圖sns.distplot(x,hist=False,ax=axes[1]) #中圖sns.distplot(x,kde=False,ax=axes[2]) #右圖
bins:int或list,控制直方圖的劃分
fig,axes=plt.subplots(1,2) sns.distplot(x,kde=False,bins=20,ax=axes[0]) #左圖:分成20個區間sns.distplot(x,kde=False,bins=[x for x in range(4)],ax=axes[1]) #右圖:以0,1,2,3為分割點,形成區間[0,1],[1,2],[2,3],區間外的值不計入。
rag:控制是否生成觀測數值的小細條
fig,axes=plt.subplots(1,2)sns.distplot(x,rug=True,ax=axes[0]) #左圖sns.distplot(x,ax=axes[1]) #右圖
fit:控制擬合的參數分布圖形,能夠直觀地評估它與觀察數據的對應關係(黑色線條為確定的分布)
from scipy.stats import *sns.distplot(x,hist=False,fit=norm) #擬合標準正態分布
hist_kws, kde_kws, rug_kws, fit_kws參數接收字典類型,可以自行定義更多高級的樣式
sns.distplot(x,kde_kws={"label":"KDE"},vertical=True,color="y")
norm_hist:若為True, 則直方圖高度顯示密度而非計數(含有kde圖像中默認為True)
fig,axes=plt.subplots(1,2)sns.distplot(x,norm_hist=True,kde=False,ax=axes[0]) #左圖sns.distplot(x,kde=False,ax=axes[1]) #右圖
還有其他參數就不在此一一介紹了,有興趣繼續深入學習的同學可以查看Seaborn的官方文檔。以上內容是我結合官方文檔和自己的一點理解寫成的,有什麼錯誤大家可以指出來並提提意見,共同交流、進步,也希望我寫的這些能夠給閱讀完本文的你或多或少帶來一點幫助!
推薦閱讀:
※BOSS直聘行業信息爬取與分析(二)
※像製作人一樣思考——電影數據分析
※關於大數據你應該了解的五件事兒
※Dynamo教程 Mesh提取三角面及著色