python组合数据分类_Python 数据可视化:分类特征统计图
上一課已經(jīng)體驗到了 Seaborn 相對 Matplotlib 的優(yōu)勢,本課將要介紹的是 Seaborn 對分類數(shù)據(jù)的統(tǒng)計,也是它的長項。
針對分類數(shù)據(jù)的統(tǒng)計圖,可以使用 sns.catplot 繪制,其完整參數(shù)如下:
seaborn.catplot(x=None, y=None, hue=None, data=None, row=None, col=None, col_wrap=None, estimator=, ci=95, n_boot=1000, units=None, order=None, hue_order=None, row_order=None, col_order=None, kind='strip', height=5, aspect=1, orient=None, color=None, palette=None, legend=True, legend_out=True, sharex=True, sharey=True, margin_titles=False, facet_kws=None, **kwargs)
本課使用演繹的方式來學習,首先理解這個函數(shù)的基本使用方法,重點是常用參數(shù)的含義。
x,y,hue:參數(shù) data 所設(shè)置的數(shù)據(jù)集中的特征,其中 hue 是嵌入到坐標系中的分類特征,x, y 分別是數(shù)據(jù)集中作為橫縱軸的特征。
data:一個 DataFrame 對象,即數(shù)據(jù)集。
row,col:如果要繪制分區(qū)坐標系,用這兩個參數(shù)分別設(shè)置了“坐標矩陣”的行列。例如,指定 col 的值為某一個分類特征,就會按照該分類特征數(shù)據(jù)屬性,劃分不同坐標系分區(qū)。
order,hue_order:字符串組成的列表,指定分類特征顯示的順序。
kind:這個參數(shù)很重要,默認值是 'strip',其他取值還可以是:“point”、“bar”、“swarm”、“box”、“violin”or“boxen”,每個值都對應(yīng)著一種專門的分類統(tǒng)計圖,并且也對應(yīng)著專有的函數(shù),這是本課要重點闡述的。
palette:設(shè)置色彩方案。
其他的參數(shù),根據(jù)名稱也能基本理解。
下面就依據(jù) kind 參數(shù)的不同取值,分門別類地介紹各種不同類型的分類統(tǒng)計圖。
2.2.1 分類特征的散點圖
kind = 'strip',默認值,等同函數(shù) sns.stripplot。
kind = 'swarm',等同函數(shù) sns.swarmplot。
讀入數(shù)據(jù)集:
import seaborn as sns
sns.set(style="whitegrid")
exercise = sns.load_dataset("exercise")
exercise.sample(5)
avatar
然后用這個數(shù)據(jù)集制圖,看看效果:
%matplotlib inline
sns.catplot(x="time", y="pulse", hue="kind", data=exercise) #①
輸出結(jié)果:
enter image description here
毫無疑問,這里繪制的是散點圖。但是,該散點圖的橫坐標是分類特征 time 中的三個值,并且用 hue='kind' 又將分類特征插入到圖像中,即用不同顏色的的點代表又一個分類特征 kind 的值,最終得到這些類別組合下每個記錄中的 pulse 特征值,并以上述圖示表示出來。也可以理解為,x='time', hue='kind' 引入了圖中的兩個特征維度。
語句 ① 中,就沒有特別聲明參數(shù) kind 的值,此時是使用默認值 'strip'。
與 ① 等效的還有另外一個對應(yīng)函數(shù) sns.stripplot。
sns.stripplot(x="time", y="pulse", hue="kind", data=exercise) #②
輸出結(jié)果:
enter image description here
② 與 ① 的效果一樣。
不過,在 sns.catplot 中的兩個參數(shù) row、col,在類似 sns.stripplot 這樣的專有函數(shù)中是沒有的。因此,下面的圖,只有用 sns.catplot 才能簡潔直觀。
sns.catplot(x='time', y='pulse', hue='kind', col='diet', data=exercise, kind='strip') #③
輸出結(jié)果:
enter image description here
不過,如果換一個叫角度來說,類似 sns.stripplot 這樣的專有函數(shù),表達簡單,參數(shù)與 sns.catplot 相比,有所精簡,使用起來更方便。
seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=True, dodge=False, orient=None, color=None, palette=None, size=5, edgecolor='gray', linewidth=0, ax=None, **kwargs)
仔細比較,sns.catplot 和 sns.stripplot 兩者還是稍有區(qū)別的,雖然在一般情況下兩者是通用的。
因此,不要追求某一個是萬能的,各有各的用途,存在即合理。
不過,下面的聲明請注意:如果沒有非常的必要,比如繪制分區(qū)圖,在本課中后續(xù)都演示如何使用專有名稱的函數(shù)。
sns.stripplot
前面已經(jīng)初步解釋了這個函數(shù),為了格式完整,這里再重復(fù)一下,即 sns.catplot 中參數(shù) kind='strip'。
如果非要將此函數(shù)翻譯為漢語,可以稱之為“條狀散點圖”。以分類特征為一坐標軸,在另外一個坐標軸上,根據(jù)分類特征,將該分類特征數(shù)據(jù)所在記錄中的連續(xù)值沿坐標軸描點。
從語句 ② 的結(jié)果圖中可以看到,這些點雖然縱軸的數(shù)值有相同的,但是沒有將它們重疊。因此,我們看到的好像是“一束”散點,實際上,所有點的橫坐標都應(yīng)該是相應(yīng)特征分類數(shù)據(jù),也不要把分類特征的值理解為一個范圍,分散開僅僅是為了圖示的視覺需要。
ax = sns.stripplot(x="time", y="pulse", data=exercise, jitter=0) #④
輸出結(jié)果:
enter image description here
④ 相對 ② 的圖示,在于此時同一縱軸值的都重合了——本來它們的橫軸值都是一樣的。實現(xiàn)此效果的參數(shù)是 jitter=0,它可以表示點的“振動”,如果默認或者 jitter=True,意味著允許描點在某個范圍振動——語句 ② 的效果;還可設(shè)置為某個 0 到 1 的浮點,表示許可振動的幅度。請對比下面的操作。
ax = sns.stripplot(x="time", y="pulse", data=exercise, jitter=0.05)
輸出結(jié)果:
enter image description here
語句 ② 中使用 hue='kind' 參數(shù)向圖中提供了另外一個分類特征,但是,如果感覺圖有點亂,還可以這樣做:
ax = sns.stripplot(x="time", y="pulse", data=exercise, hue='kind',
dodge=True, palette='Set2') #⑤
輸出結(jié)果:
enter image description here
dodge=True 的作用就在于將 hue='kind' 所引入的特征數(shù)據(jù)分開,相對 ② 的效果有很大差異。
并且,在 ⑤ 中還使用了 paletter='Set2' 設(shè)置了色彩方案。
sns.stripplot 函數(shù)中的其他有關(guān)參數(shù),請讀者使用幫助文檔了解。
sns.swarmplot
此函數(shù)即 sns.catplot 的參數(shù) kind='swarm'。
tips = sns.load_dataset("tips")
sns.swarmplot(x="day", y="total_bill", data=tips)
# 下面的語句,與之等效
# sns.catplot(x="day", y="total_bill", kind='swarm', data=tips)
輸出結(jié)果:
enter image description here
再繪制一張簡單的圖,一遍研究這種圖示的本質(zhì)。
sns.swarmplot(x=tips["total_bill"])
輸出結(jié)果:
enter image description here
此圖只使用了一個特征的數(shù)據(jù),簡化表象,才能探究 sns.swarmplot 的本質(zhì)。它同樣是將該特征中的數(shù)據(jù),依據(jù)其他特征的連續(xù)值在圖中描點,并且所有點在默認情況下不彼此重疊——這方面與 sns.stripplot 一樣。但是,與之不同的是,這些點不是隨機分布的,它們經(jīng)過調(diào)整之后,均勻?qū)ΨQ分布在分類特征數(shù)值所在直線的兩側(cè),這樣能很好地表示數(shù)據(jù)的分布特點。但是,這種方式不適合“大數(shù)據(jù)”。
seaborn.swarmplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, dodge=False, orient=None, color=None, palette=None, size=5, edgecolor='gray', linewidth=0, ax=None, **kwargs)
sns.swarmplot 的參數(shù)似乎也沒有什么太特殊的。下面使用幾個,熟悉一番基本操作。
在分類維度上還可以再引入一個維度,用不同顏色的點表示另外一種類別,即使用 hue 參數(shù)來實現(xiàn)。
sns.swarmplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set2")
輸出結(jié)果:
enter image description here
這里用 hue = 'smoker' 參數(shù)又引入了一個分類特征,在圖中用不同顏色來區(qū)分。
如果覺得會 smoker 特征的值都混在一起有點亂,還可以使用下面方式把他們分開——老調(diào)重彈。
sns.swarmplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set2", dodge=True)
輸出結(jié)果:
enter image description here
生成此效果的參數(shù)就是 dodge=True,它的作用就是當 hue 參數(shù)設(shè)置了特征之后,將 hue 的特征數(shù)據(jù)進行分類。
2.2.2 分類特征的分布圖
sns.catplot 函數(shù)的參數(shù) kind 可以有三個值,都是用于繪制分類的分布圖:
kind = 'box',等同函數(shù) sns.boxplot
kind = 'violin',等同函數(shù) sns.violinplot
kind = 'boxen',等同函數(shù) sns.boxenplot
下面依次對這三個專有函數(shù)進行闡述。
sns.boxplot
總結(jié)
以上是生活随笔為你收集整理的python组合数据分类_Python 数据可视化:分类特征统计图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐几个更新比我勤快的优质产品号
- 下一篇: python 清屏_Python学前准备