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