Python可視化:Seaborn(二)

本文由 保一雄@科賽網 數據分析師 原創。


Seaborn是一個很棒的可視化庫,尤爲是當數據維度很大時,它可讓咱們用最少的代碼去繪製一些描述性統計的圖,便於找尋各維度變量之間的特徵。算法

繼上篇Python可視化:Seaborn(一),分享過用Seaborn作Distribution Visualization,本篇咱們將分享用Seaborn作Categorial Visualization,包括其中涉及的Stripplot & Swarmplot,Boxplot & Violinplot,Barplot & Pointplot,以及抽象化的Factorplot。app


咱們此處結合科賽網上公開的Iris鳶尾花數據集進行演示說明。ide

文中全部完整源代碼都可經過 K-Lab在線數據分析協做工具 復現。它 涵蓋了Python、R等主流語言,完成了包括Seaborn、Pandas、Numpy等90%以上數據分析&挖掘相關庫的部署,幫助數據人才專一數據分析自己,提升效率。
Iris鳶尾花數據集:是經常使用的分類實驗數據集,由Fisher, 1936收集整理。是一類多重變量分析的數據集。共包含150個數據集,分爲3類,每類50個數據,每一個數據包含4個屬性。可經過花萼長度(sepal_length),花萼寬度(sepal_width),花瓣長度(petal_length),花瓣寬度(petal_width)4個屬性預測鳶尾花卉屬於(Setosa,Versicolour,Virginica)三個種類中的哪一類。


導入庫工具

import warnings warnings.filter
warnings("ignore") 
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt %matplotlib inline 
import seaborn as sns


Stripplot

Stripplot的本質就是把數據集中具備Quantitative屬性的變量按照類別去作散點圖(Scatterplot)。
post

咱們將紙鳶花數據集中不一樣種類花的Sepal Length作Stripplot可視化。學習

plt.figure(1,figsize=(12,6)) 
 plt.subplot(1,2,1) 
sns.stripplot(x='species',y='sepal_length',data=iris) #stripplot 
plt.title('Striplot of sepal length of Iris species')with sns.axes_style("whitegrid"): # 這個是臨時設置樣式的命令,若是不寫,則按默認格式'darkgrid'進行繪製 
 plt.subplot(1,2,2) 
 plt.title('Striplot of sepal length of Iris species') sns.stripplot(x='species',y='sepal_length',data=iris,jitter=True) # jitterplot 
 plt.show()


上邊左側的圖片即是在默認風格下用Stripplot繪製的散點圖。在不少狀況下,Stripplot中的點會重疊,使得咱們不容易看出點的分佈狀況。一個簡單的解決辦法就是用在Stripplot的基礎上繪製抖動圖(jitterplot),僅沿着類別座標軸的方向去隨機微調整點的位置,顯示出分佈狀況。spa


Swarmplot

另外一個解決Stripplot中點重疊的辦法就是繪製Swarmplot,它的本質就是用經過算法,在類別座標軸的方向上去‘延展’繪製這些本來重合的點。 咱們將紙鳶花數據集中不一樣種類花的Petal Length和Petal width作Swarmplot可視化。
3d

plt.figure(1,figsize=(12,6)) 
plt.subplot(1,2,1) 
sns.swarmplot(x='species',y='petal_length',data=iris) 
with sns.axes_style("ticks"): # 此次使用了ticks風格 
plt.subplot(1,2,2) 
 sns.swarmplot(x='species',y='petal_width',data=iris) 
 plt.show()



Boxplot

箱形圖,主要包含六個數據節點,將一組數據從大到小排列,分別計算出上邊緣,上四分位數Q3,中位數,下四分位數Q1,下邊緣,還有異常值。 下面將紙鳶花數據集中的四個變量sepal_length, sepal_width, petal_length和petal_width作箱形圖可視化。
cdn

var = ['sepal_length','sepal_width','petal_length','petal_width'] 
axes_style = ['ticks','white','whitegrid', 'dark'] 
fig = plt.figure(1,figsize=(12,12))for i in range(4): with sns.axes_style(axes_style[i]): # 將除了默認的darkgrid以外的樣式都展示一遍 
 plt.subplot(2,2,i+1) sns.boxplot(x='species',y=var[i],data=iris) 
 plt.show()



Violinplot

Violinplot至關於結合了箱形圖與核密度圖,更好地展示出數據的量化形態。
blog

context= ['notebook','paper','talk','poster'] 
axes_style = ['ticks','white','whitegrid', 'dark'] 
 plt.figure(1,figsize=(12,12))for i in range(4): with sns.axes_style(axes_style[i]):#設置axes_style 
 sns.set_context(context[i]) # 設置context style,默認爲notebook,除此以外還有paper,talk,poster 
 plt.subplot(2,2,i+1) 
 plt.title(str(var[i])+ ' in Iris species') 
 sns.violinplot(x='species',y=var[i],data=iris) 
 plt.show()


Violinplot用Kernel Density Estimate去更好地描述了quantitative變量的分佈。


與此同時,也能夠組合Swarmplot和Boxplot或Violinplot去描述Quantitative變量。用鳶尾花數據集展現以下:

context= ['notebook','paper','talk','poster'] 
axes_style = ['ticks','white','whitegrid', 'dark'] 
 plt.figure(1,figsize=(12,12))for i in range(4): with 
sns.axes_style(axes_style[i]):#設置axes_style sns.set_context(context[i])#設置context 
plt.subplot(2,2,i+1) 
 plt.title(str(var[i])+ ' in Iris species') 
 sns.swarmplot(x='species', y=var[i], data=iris, color="w", alpha=.5) 
sns.violinplot(x='species', y=var[i], data=iris, inner=None) if i%2 ==0 \ else sns.boxplot(x='species', y=var[i], data=iris) # 分別用swarmplot+violinplot 和swarmplot + boxplot 
 plt.show()


Barplot

Barplot主要是展示在分類中的Quantitative變量的平均值狀況,而且用了Boostrapping算法計算了估計值的置信區間和Error bar.用鳶尾花數據集。

plt.figure(1,figsize=(12,12))for i in range(4): with sns.axes_style(axes_style[i]):#設置axes_style 
 sns.set_context(context[i]) # 設置context style,默認爲notebook,除此以外還有paper,talk,poster plt.subplot(2,2,i+1) 
 plt.title(str(var[i])+ ' in Iris species') sns.barplot(x='species',y=var[i],data=iris) 
plt.show()


Countplot

若是想知道在每一個類別下面有多少個觀察值,用Countplot就能夠,至關因而作一個Observation Counts,用鳶尾花數據集展現以下:

plt.figure(figsize=(5,5)) sns.countplot(y="species", data=iris) # 設置y='species',將countplot水平放置 
plt.title('Iris species count') 
plt.show()


Pointplot

Pointplot至關因而對Barplot作了一個橫向延伸,一方面,用Point Estimate和Confidence Level去展現Barplot的內容;另外一方面,當每個主類別下面有更細分的Sub-Category的時候,Pointplot能夠便於觀察不一樣Sub-Category在各主類別之間的聯繫。展現以下:

plt.figure(1,figsize=(12,12))for i in range(4): with sns.axes_style(axes_style[i]):#設置axes_style 
 sns.set_context(context[i]) # 設置context style,默認爲notebook,除此以外還有paper,talk,poster plt.subplot(2,2,i+1) 
 plt.title(str(var[i])+ ' in Iris species') sns.pointplot(x='species',y=var[i],data=iris) 
plt.show()


Factorplot

Factorplot能夠說是Seaborn作Category Visualization的精髓,前面講的這些Plot均可以說是Factorplot的具體展現。咱們能夠用PariGrid去實現對多個類別的數值特徵用同一種Plot作可視化。

sns.set(style="ticks") g = sns.PairGrid(iris, x_vars = ['sepal_length','sepal_width','petal_length','petal_width'], y_vars = 'species', aspect=0.75,size=4) # 設置間距和圖片大小 g.map(sns.violinplot,palette='pastel') 
plt.show()


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


科賽網(kesci.com)是聚合數據人才和行業問題的在線社區,重點打造的K-Lab在線數據分析協做平臺,爲數據工做者的學習與工做帶來全新的體驗。

相關文章
相關標籤/搜索