摘要:分類數(shù)據(jù)散點圖在分類數(shù)據(jù)的基礎(chǔ)上展示定量數(shù)據(jù)的最簡單函數(shù)就是。此外,小提琴內(nèi)還顯示了箱體四分位數(shù)和四分位距。該函數(shù)會用高度估計值對數(shù)據(jù)進(jìn)行描述,而不是顯示一個完整的條形,它只繪制點估計和置信區(qū)間。
作者:xiaoyu
微信公眾號:Python數(shù)據(jù)科學(xué)
知乎:python數(shù)據(jù)分析師
seaborn的學(xué)習(xí)內(nèi)容主要包含以下幾個部分:
風(fēng)格管理
繪圖風(fēng)格設(shè)置
顏色風(fēng)格設(shè)置
繪圖方法
數(shù)據(jù)集的分布可視化
分類數(shù)據(jù)可視化
線性關(guān)系可視化
結(jié)構(gòu)網(wǎng)格
數(shù)據(jù)識別網(wǎng)格繪圖
本次將主要介紹 分類數(shù)據(jù)可視化的使用。
分類數(shù)據(jù)可視化數(shù)據(jù)集中的數(shù)據(jù)類型有很多種,除了連續(xù)的特征變量之外,最常見的就是類目型的數(shù)據(jù)類型了,常見的比如人的性別,學(xué)歷,愛好等。這些數(shù)據(jù)類型都不能用連續(xù)的變量來表示,而是用分類的數(shù)據(jù)來表示。
seaborn針對分類型的數(shù)據(jù)有專門的可視化函數(shù),這些函數(shù)可大致分為三種:
分類數(shù)據(jù)散點圖: swarmplot(), stripplot()
分類數(shù)據(jù)的分布圖: boxplot(), violinplot()
分類數(shù)據(jù)的統(tǒng)計估算圖 : barplot(), pointplot()
這三類函數(shù)可有特點,可以從各個方面展示分類數(shù)據(jù)的可視化效果,下面我們一一介紹。
首先的首先還是先導(dǎo)入需要的模塊和數(shù)據(jù)集。
%matplotlib inline import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns sns.set(style="whitegrid", color_codes=True) np.random.seed(sum(map(ord, "categorical"))) titanic = sns.load_dataset("titanic") tips = sns.load_dataset("tips") iris = sns.load_dataset("iris")分類數(shù)據(jù)散點圖
在分類數(shù)據(jù)的基礎(chǔ)上展示定量數(shù)據(jù)的最簡單函數(shù)就是 stripplot()。
sns.stripplot(x="day", y="total_bill", data=tips);
這看上去類似散點圖,但不同的是,橫坐標(biāo)是分類的數(shù)據(jù),只不過一些數(shù)據(jù)點上會互相重疊,不便于觀察。所以一個簡單的解決辦法是加入jitter參數(shù),調(diào)整橫坐標(biāo)位置。
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True);
當(dāng)然,還有一個不同的方法就是使用 swarmplot() 函數(shù),這個函數(shù)的好處就是所有的點都不會重疊,這樣可以很清晰的觀察到數(shù)據(jù)的分布。
sns.swarmplot(x="day", y="total_bill", data=tips);
在這基礎(chǔ)上,也可以通過 hue 參數(shù)加入另一個嵌套的分類變量,而且嵌套的分類變量可以以不同的顏色區(qū)別,十分方便。
sns.swarmplot(x="day", y="total_bill", hue="sex", data=tips);
通常情況下,seaborn 還會嘗試推斷出分類變量的順序。如果你的數(shù)據(jù)是 pandas 的分類數(shù)據(jù)類型,那么就是使用默認(rèn)的分類數(shù)據(jù)順序,如果是其他的數(shù)據(jù)類型,字符串類型的類別將按照它們在DataFrame中顯示的順序進(jìn)行繪制,但是數(shù)組類別將被排序:
sns.swarmplot(x="size", y="total_bill", data=tips);
有時候?qū)⒎诸愖兞糠旁诖怪陛S上是非常有用的(當(dāng)類別名稱相對較長或有很多類別時,這一點特別有用)。 可以使用 orient 關(guān)鍵字強(qiáng)制定向,但通??梢曰Qx和y的變量的數(shù)據(jù)類型來完成:
sns.swarmplot(x="total_bill", y="day", hue="time", data=tips);分類數(shù)據(jù)分布圖
雖然分類的散點圖很有用,但有時候想要快速查看各分類下的數(shù)據(jù)分布就不是很直觀了。為此,第二種函數(shù)解決了這個問題。
箱型圖
通過箱型圖可以很直觀的觀察到數(shù)據(jù)的四分位分布(1/4分位,中位數(shù),3/4分位,以及四分位距),這種可視化對于在機(jī)器學(xué)習(xí)的預(yù)處理階段(尤其是發(fā)現(xiàn)數(shù)據(jù)異常離散值)十分有效。
sns.boxplot(x="day", y="total_bill", hue="time", data=tips);
對于箱型圖來說,使用 hue 參數(shù)的假設(shè)是這個變量嵌套在x或者y軸內(nèi)。所以默認(rèn)的情況下,hue 變量的不同類型值會保持偏置狀態(tài)(兩類或幾類數(shù)據(jù)共同在x軸數(shù)據(jù)類型的一個類中),就像上面那個圖所示。但是如果 hue 所使用的變量不是嵌套的,那么你可以使用 dodge 參數(shù)來禁止這個默認(rèn)的偏置狀態(tài)。
tips["weekend"] = tips["day"].isin(["Sat", "Sun"]) sns.boxplot(x="day", y="total_bill", hue="weekend", data=tips, dodge=False);
提琴圖
另一種不同的方法是 violinplot() 函數(shù),它結(jié)合了箱體圖和分布教程中描述的核心密度估計過程:
sns.violinplot(x="total_bill", y="day", hue="time", data=tips);
這種方法使用核密度估計來更好地描述值的分布。此外,小提琴內(nèi)還顯示了箱體四分位數(shù)和四分位距。由于小提琴使用KDE,還有一些其他可以調(diào)整的參數(shù),相對于簡單的boxplot增加了一些復(fù)雜性:
sns.violinplot(x="total_bill", y="day", hue="time", data=tips, bw=.1, scale="count", scale_hue=False);
當(dāng) hue 的嵌套類型只有兩類的時候,也可以使用split 參數(shù)將小提琴分割:
sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True);
在提琴圖內(nèi),也可以使用 inner 參數(shù)以橫線的形式來展示每個觀察點的分布,來代替箱型的整體分布:
sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True, inner="stick", palette="Set3");
還有一點比較好的是,可以將 swarmplot(),violinplot(),或 boxplot() 混合使用,這樣可以結(jié)合多種繪圖的特點展示更完美的效果。
sns.violinplot(x="day", y="total_bill", data=tips, inner=None) sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5);分類數(shù)據(jù)統(tǒng)計估計圖
有時候,我們不想展示分類數(shù)據(jù)下的分布,而是想展示每一類的集中趨勢。seaborn 有兩個主要的方法來展示這個,并且這些函數(shù)api與上面函數(shù)的用法是一樣的。
條形圖
我們最熟悉的方式就是使用一個條形圖。 在Seaborn中barplot()函數(shù)會在整個數(shù)據(jù)集上顯示估計,默認(rèn)情況下使用均值進(jìn)行估計。 當(dāng)在每個類別中有多個類別時(使用了 hue),它可以使用引導(dǎo)來計算估計的置信區(qū)間,并使用誤差條來表示置信區(qū)間:
sns.barplot(x="sex", y="survived", hue="class", data=titanic);
條形圖的特殊情況是當(dāng)您想要顯示每個類別的數(shù)量,而不是計算統(tǒng)計量。這有點類似于一個分類而不是定量變量的直方圖。在Seaborn中,使用countplot()函數(shù)很輕易的完成:
sns.countplot(x="deck", data=titanic, palette="Greens_d");
如果將要計數(shù)的變量移動到y(tǒng)軸上,那么條形就會橫過來顯示:
sns.countplot(y="deck", hue="class", data=titanic, palette="Greens_d");
點圖
pointplot()函數(shù)提供了估計可視化的另一種風(fēng)格。該函數(shù)會用高度估計值對數(shù)據(jù)進(jìn)行描述,而不是顯示一個完整的條形,它只繪制點估計和置信區(qū)間。另外,點圖連接相同hue類別的點,比如male中的藍(lán)色會連接female中的藍(lán)色。這使得很容易看出主要關(guān)系如何隨著第二個變量的變化而變化,因為你的眼睛可以很好地辨別斜率的差異:
sns.pointplot(x="sex", y="survived", hue="class", data=titanic);
為了使能夠更好的顯示,可以使用不同的標(biāo)記和線條樣式來展示不同hue類別的層次:
sns.pointplot(x="class", y="survived", hue="sex", data=titanic, palette={"male": "g", "female": "m"}, markers=["^", "o"], linestyles=["-", "--"]);繪制“寬格式”數(shù)據(jù)
雖然使用“長格式”或“整潔”數(shù)據(jù)是優(yōu)選的,但是這些函數(shù)也可以應(yīng)用于各種格式的“寬格式”數(shù)據(jù),包括pandas DataFrame或二維numpy數(shù)組陣列。這些對象應(yīng)該直接傳遞給數(shù)據(jù)參數(shù):
sns.boxplot(data=iris, orient="h");
此外,這些函數(shù)也接受Pandas或numpy對象的向量,而不僅僅是DataFrame中的變量:
sns.violinplot(x=iris.species, y=iris.sepal_length);
為了控制由上述函數(shù)制作的圖形的大小和形狀,你必須使用matplotlib命令自己設(shè)置圖形。 當(dāng)然,這也意味著這些圖塊可以和其他種類的圖塊一起在一個多面板的繪制中共存:
f, ax = plt.subplots(figsize=(7, 3)) sns.countplot(y="deck", data=titanic, color="c");繪制多層面板分類圖
正如我們上面提到的,有兩種方法可以在Seaborn中繪制分類圖。與回歸圖中的二元性相似,您可以使用上面介紹的函數(shù),也可以使用更高級別的函數(shù)factorplot(),將這些函數(shù)與FacetGrid()相結(jié)合,通過這個圖形的更大的結(jié)構(gòu)來增加展示其他類別的能力。 默認(rèn)情況下,factorplot()產(chǎn)生一個pairplot():
sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips);
但是,kind參數(shù)可以讓你選擇以上討論的任何種類的圖:
sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips, kind="bar");
使用factorplot()的主要優(yōu)點是可以很容易使用"facet"繪制多面圖,展示更多其他分類變量:
sns.factorplot(x="day", y="total_bill", hue="smoker", col="time", data=tips, kind="swarm");
任何一種圖形都可以畫出來。由于FacetGrid的工作原理,要更改圖形的大小和形狀,需要指定適用于每個圖的size和aspect參數(shù):
sns.factorplot(x="time", y="total_bill", hue="smoker", col="day", data=tips, kind="box", size=4, aspect=.5);
你也可以直接使用boxplot()和FacetGrid來制作這個圖。但是,必須特別注意確保每個圖的分類變量的順序需要被強(qiáng)制,或者是使用具有Categorical數(shù)據(jù)類型的數(shù)據(jù)或通過命令和hue_order。
sns.factorplot(x="time", y="total_bill", hue="smoker",hue_order=["No","Yes"] ,col="day", data=tips, kind="box", size=4, aspect=.5, palette="Set3");
由于廣義API函數(shù)的存在,分類數(shù)據(jù)也可以很容易應(yīng)用于其他更復(fù)雜的上下文。 例如,它們可以輕松地與PairGrid結(jié)合,以顯示多個不同變量之間的分類關(guān)系:
g = sns.PairGrid(tips, x_vars=["smoker", "time", "sex"], y_vars=["total_bill", "tip"], aspect=.75, size=3.5) g.map(sns.violinplot, palette="pastel");
參考:http://seaborn.pydata.org/tut...
關(guān)注微信公眾號Python數(shù)據(jù)科學(xué),獲取 120G 人工智能 學(xué)習(xí)資料。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41862.html
摘要:使用分類調(diào)色板另外一種對分類數(shù)據(jù)比較友好的調(diào)色板來自工具。它們是以在調(diào)色板中的主導(dǎo)顏色或顏色命名的。連續(xù)調(diào)色板調(diào)色板系統(tǒng)在亮度和色變變化上具有線性上升或下降的特點。離散色板調(diào)色板中的第三類被稱為離散。 作者:xiaoyu微信公眾號:Python數(shù)據(jù)科學(xué)知乎:python數(shù)據(jù)分析師 Seaborn學(xué)習(xí)大綱 seaborn的學(xué)習(xí)內(nèi)容主要包含以下幾個部分: 風(fēng)格管理 繪圖風(fēng)格設(shè)置 顏...
摘要:數(shù)據(jù)集分布可視化當(dāng)處理一個數(shù)據(jù)集的時候,我們經(jīng)常會想要先看看特征變量是如何分布的。直方圖在橫坐標(biāo)的數(shù)據(jù)值范圍內(nèi)均等分的形成一定數(shù)量的數(shù)據(jù)段,并在每個數(shù)據(jù)段內(nèi)用矩形條顯示軸觀察數(shù)量的方式,完成了對的數(shù)據(jù)分布的可視化展示。 作者:xiaoyu微信公眾號:Python數(shù)據(jù)科學(xué)知乎:python數(shù)據(jù)分析師 Seaborn學(xué)習(xí)大綱 seaborn的學(xué)習(xí)內(nèi)容主要包含以下幾個部分: 風(fēng)格管理 ...
摘要:簡介同一樣,也是進(jìn)行數(shù)據(jù)可視化分析的重要第三方包。的五種繪圖風(fēng)格有五種的風(fēng)格,它們分別是。 作者:xiaoyu微信公眾號:Python數(shù)據(jù)科學(xué)知乎:python數(shù)據(jù)分析師 最近在做幾個項目的數(shù)據(jù)分析,每次用到seaborn進(jìn)行可視化繪圖的時候總是忘記具體操作。雖然seaborn的官方網(wǎng)站已經(jīng)詳細(xì)的介紹了使用方法,但是畢竟是英文,而且查找不是很方便。因此博主想從零開始將seaborn學(xué)...
摘要:數(shù)據(jù)分析的發(fā)展方向一般有商業(yè)方向,行業(yè)分析業(yè)務(wù)方向,和機(jī)器學(xué)習(xí)數(shù)據(jù)挖掘方向。機(jī)器學(xué)習(xí)的書籍推薦統(tǒng)計學(xué)習(xí)方法,機(jī)器學(xué)習(xí),機(jī)器學(xué)習(xí)實戰(zhàn)三本書。 作者:xiaoyu 微信公眾號:Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 上一篇主要分享了博主親身轉(zhuǎn)行數(shù)據(jù)分析的經(jīng)歷: 【從零學(xué)起到成功轉(zhuǎn)行數(shù)據(jù)分析,我是怎么做的?】 本篇繼上一篇將分享轉(zhuǎn)行數(shù)據(jù)分析的一些經(jīng)驗和學(xué)習(xí)方法,看完這篇你將會解...
閱讀 1015·2021-11-04 16:08
閱讀 3001·2021-09-13 10:37
閱讀 522·2019-08-30 15:56
閱讀 2015·2019-08-30 15:55
閱讀 2258·2019-08-30 15:53
閱讀 2104·2019-08-30 13:13
閱讀 2944·2019-08-30 12:51
閱讀 1560·2019-08-29 16:06