日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python可视化:Seaborn(二)

發布時間:2025/3/20 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python可视化:Seaborn(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文由 保一雄@科賽網 數據分析師 原創。


Seaborn是一個很棒的可視化庫,尤其是當數據維度很大時,它可以讓我們用最少的代碼去繪制一些描述性統計的圖,便于找尋各維度變量之間的特征。

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


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

文中所有完整源代碼均可通過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.filterwarnings("ignore")?import pandas as pd?import numpy as np?import matplotlib.pyplot as plt %matplotlib inline?import seaborn as sns


Stripplot

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

我們將紙鳶花數據集中不同種類花的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),僅沿著類別坐標軸的方向去隨機微調整點的位置,顯示出分布情況。


Swarmplot

另一個解決Stripplot中點重疊的辦法就是繪制Swarmplot,它的本質就是用通過算法,在類別坐標軸的方向上去‘延展’繪制這些原本重合的點。 我們將紙鳶花數據集中不同種類花的Petal Length和Petal width做Swarmplot可視化。

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做箱形圖可視化。

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相當于結合了箱形圖與核密度圖,更好地展現出數據的量化形態。

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在線數據分析協作平臺,為數據工作者的學習與工作帶來全新的體驗。


總結

以上是生活随笔為你收集整理的Python可视化:Seaborn(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。