Python可視化:Seaborn(一)


進行數據分析&挖掘時,描述性統計必不可少。好比,咱們須要看下各個quantitative變量的分佈狀況,良好的分佈可視化效果能爲以後進一步作數據建模打下基礎。app

其中,Seaborn即是個功能強大的庫,能夠用它作出很棒的數據可視化效果。咱們此處結合科賽網上公開的鏈家二手房數據集,對如何使用Seaborn作Distribution Visualization進行說明。工具

說明: 文中全部代碼部分都可經過K-Lab在線 數據分析協做工具 復現。能夠登陸科賽網,嘗試用不一樣的數據集利用Seaborn進行可視化練習。


對於quantitative變量作分佈可視化,主要有兩點:ui

  • 探尋變量自身的分佈規律,也就是univariate distributions可視化;spa

  • 探尋兩個變量之間是否有分佈關係,也就是bivariate distributions可視化。3d

Seaborn也是按這個workflow給出了plot function。cdn

univariate distributions visualization:

  • distplot --- 繪製某單一變量的分佈狀況blog

  • kdeplot --- fit某變量(單一變量或兩個變量之間)分佈的核密度估計(kernel density estimate)ip

  • rugplot --- 在座標軸上按戳的樣式(sticks)依次繪製數據點序列ci

bivariate distributions visualization:

  • jointplot --- 繪製某兩個變量之間的分佈關係get


讀取數據

 import pandas as pd sh = pd.read_csv('sh.csv',encoding='gbk')


爲了不中文解碼出現bug,將表頭進行替換:


導入繪圖的包

import warnings warnings.filterwarnings("ignore") import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline


單一變量可視化初探

在這個數據集中,quantitative的變量主要有房屋的面積Area,每平米單價Price,以及房屋總價Tprice。

先來看看上海每一個行政區房屋總價Tprice的分佈狀況,咱們用distplot繪製須要注意的是,在默認狀況下,distplot會直接給出變量核密度估計的fit曲線。

dist = sh.Dist.unique() plt.figure(1,figsize=(16,30))with sns.axes_style("ticks"):

for i in range(17): temp = sh[sh.Dist == dist[i]] plt.subplot(6,3,i+1) plt.title(dist[i]) sns.distplot(temp.Tprice) plt.xlabel(' ') plt.show()


固然,咱們也能夠關閉核密度估計fit曲線,直接去看直方圖分佈(histograms)。Seaborn在distplot function的API中給出了kde和rug這兩個參數,分別對應kernel density和rugplot(也就是在座標軸上繪製出datapoint所在的位置)。


咱們單獨取出徐彙區(Xuhui)的數據,對kde和rug這兩個參數進行設置,作出的直方圖以下。

temp = sh[sh.Dist == 'Xuhui'] plt.figure(1,figsize=(6,6)) plt.title('Xuhui') sns.distplot(temp.Tprice,kde=False,bins=20,rug=True) plt.xlabel(' ') plt.show()


在Seaborn中,咱們也能夠直接調用kdeplot和rugplot作圖


如今咱們去研究一下徐彙區數據中,房屋面積變量Area的分佈狀況。

from scipy import stats, integrate plt.figure(1,figsize=(12,6))with sns.axes_style("ticks"): plt.subplot(1,2,1) sns.kdeplot(temp.Area,shade=True) sns.rugplot(temp.Area) plt.title('Xuhui --- Area Distribution') plt.subplot(1,2,2) plt.title('Xuhui - Area Distribution fits with gamma distribution') sns.distplot(temp.Area, kde=False, fit=stats.gamma) plt.show()


左:kdeplot function和rugplot function分別調用後的疊加,體現Seaborn作圖靈活性
右:在distplot function設置了fit參數,讓數據的分佈與gamma分佈進行擬合


兩個變量(pairs)可視化

在作了單個quantitative變量分佈的可視化研究後,咱們來看看某兩個變量組之間是否存在分佈關係。

Seaborn在這裏提供了jointplot function使用。 下面咱們來對整個數據集的房屋面積(Area)和房價(Tprice)這兩個變量進行可視化分析。


繪製散點圖Scatterplot

sns.jointplot(x='Area',y='Tprice',data=sh) plt.show()


咱們發現房價小於1000W而且面積小於200平方米的數據點很集中。設置一個filter,將這部分數據單獨拿出來作研究,從新繪製散點圖。

test = sh[(sh.Tprice<1000)&(sh.Area<200)]with sns.axes_style("white"): sns.jointplot(x='Area',y='Tprice',data=test) plt.show()


當數據量很大的時候,能夠進一步利用hexbin plot去作可視化,顯示數據集中分佈的區域,以下圖所示。

with sns.axes_style("white"): sns.jointplot(x='Tprice',y='Area',data=test,kind='hex') plt.show()


固然,咱們也能夠用kernel density estimation去作可視化,看分佈狀況。

with sns.axes_style("white"): sns.jointplot(x='Area',y='Tprice',data=test,kind='kde') plt.show()


小結

seaborn的巧妙之處就是利用最短的代碼去可視化儘量多的內容,並且API十分靈活,只有你想不到,沒有你作不到。

另外,這篇小短文對數據集自己的探索與解釋不是不少,若但願更深層次的探索數據集,能夠直接登陸科賽網,點擊「數據集」查看。


本文由 保一雄@科賽網 數據分析師 原創。
相關文章
相關標籤/搜索