摘要:數(shù)據(jù)集分布可視化當(dāng)處理一個(gè)數(shù)據(jù)集的時(shí)候,我們經(jīng)常會(huì)想要先看看特征變量是如何分布的。直方圖在橫坐標(biāo)的數(shù)據(jù)值范圍內(nèi)均等分的形成一定數(shù)量的數(shù)據(jù)段,并在每個(gè)數(shù)據(jù)段內(nèi)用矩形條顯示軸觀察數(shù)量的方式,完成了對(duì)的數(shù)據(jù)分布的可視化展示。
作者:xiaoyu
微信公眾號(hào):Python數(shù)據(jù)科學(xué)
知乎:python數(shù)據(jù)分析師
seaborn的學(xué)習(xí)內(nèi)容主要包含以下幾個(gè)部分:
風(fēng)格管理
繪圖風(fēng)格設(shè)置
顏色風(fēng)格設(shè)置
繪圖方法
數(shù)據(jù)集的分布可視化
分類數(shù)據(jù)可視化
線性關(guān)系可視化
結(jié)構(gòu)網(wǎng)格
數(shù)據(jù)識(shí)別網(wǎng)格繪圖
本次將主要介紹數(shù)據(jù)集的分布可視化的使用。
數(shù)據(jù)集分布可視化當(dāng)處理一個(gè)數(shù)據(jù)集的時(shí)候,我們經(jīng)常會(huì)想要先看看特征變量是如何分布的。這會(huì)讓我們對(duì)數(shù)據(jù)特征有個(gè)很好的初始認(rèn)識(shí),同時(shí)也會(huì)影響后續(xù)數(shù)據(jù)分析以及特征工程的方法。本篇將會(huì)介紹如何使用 seaborn 的一些工具來檢測(cè)單變量和雙變量分布情況。
首先還是先導(dǎo)入需要的模塊和數(shù)據(jù)集。
%matplotlib inline import numpy as np import pandas as pd from scipy import stats, integrate import matplotlib.pyplot as plt import seaborn as sns sns.set(color_codes=True) np.random.seed(sum(map(ord, "distributions")))
注意:這里的數(shù)據(jù)集是隨機(jī)產(chǎn)生的分布數(shù)據(jù),由 numpy 生成,數(shù)據(jù)類型是ndarray。當(dāng)然,pandas 的 Series 數(shù)據(jù)類型也是可以使用的,比如我們經(jīng)常需要從 DataFrame 表中提取某一特征(某一列)來查看分布情況。繪制單變量分布
在 seaborn 中,快速觀察單變量分布的最方便的方法就是使用 distplot() 函數(shù)。默認(rèn)會(huì)使用柱狀圖(histogram)來繪制,并提供一個(gè)適配的核密度估計(jì)(KDE)。
x = np.random.normal(size=100) sns.distplot(x);直方圖(histograms
直方圖是比較常見的,并且在 matplotlib 中已經(jīng)存在了 hist 函數(shù)。直方圖在橫坐標(biāo)的數(shù)據(jù)值范圍內(nèi)均等分的形成一定數(shù)量的數(shù)據(jù)段(bins),并在每個(gè)數(shù)據(jù)段內(nèi)用矩形條(bars)顯示y軸觀察數(shù)量的方式,完成了對(duì)的數(shù)據(jù)分布的可視化展示。
為了說明這個(gè),我們可以移除 kde plot,然后添加 rug plot(在每個(gè)觀察點(diǎn)上的垂直小標(biāo)簽)。當(dāng)然,你也可以使用 rug plot 自帶的 rugplot() 函數(shù),但是也同樣可以在 distplot 中實(shí)現(xiàn):
sns.distplot(x, kde=False, rug=True);
當(dāng)繪制直方圖時(shí),你最需要確定的參數(shù)是矩形條的數(shù)目以及如何放置它們。distplot()使用了一個(gè)簡(jiǎn)單的規(guī)則推測(cè)出默認(rèn)情況下最合適的數(shù)量,但是或多或少的對(duì) bins 數(shù)量進(jìn)行一些嘗試也許能找出數(shù)據(jù)的其它特征:
sns.distplot(x, bins=20, kde=False, rug=True);核密度估計(jì)(Kernel density estimation)
核密度估計(jì)可能不被大家所熟悉,但它對(duì)于繪制分布的形狀是一個(gè)非常有用的工具。就像直方圖那樣,KDE plots 會(huì)在一個(gè)軸上通過高度沿著其它軸將觀察的密度編碼。
sns.distplot(x, hist=False, rug=True);
繪制 KDE 比繪制直方圖需要更多的計(jì)算。它的計(jì)算過程是這樣的,每個(gè)觀察點(diǎn)首先都被以這個(gè)點(diǎn)為中心的正態(tài)分布曲線所替代。
x = np.random.normal(0, 1, size=30) bandwidth = 1.06 * x.std() * x.size ** (-1 / 5.) support = np.linspace(-4, 4, 200) kernels = [] for x_i in x: kernel = stats.norm(x_i, bandwidth).pdf(support) kernels.append(kernel) plt.plot(support, kernel, color="r") sns.rugplot(x, color=".2", linewidth=3);
然后,這些替代的曲線進(jìn)行加和,并計(jì)算出在每個(gè)點(diǎn)的密度值。最終生成的曲線被歸一化,以使得曲線下面包圍的面積是1。
density = np.sum(kernels, axis=0) density /= integrate.trapz(density, support) plt.plot(support, density);
我們可以看到,如果我們使用 kdeplot() 函數(shù),我們可以得到相同的曲線。這個(gè)函數(shù)實(shí)際上也被 distplot() 所使用,但是如果你就只想要密度估計(jì),那么 kdeplot() 會(huì)提供一個(gè)直接的接口更簡(jiǎn)單的操作其它選項(xiàng)。
sns.kdeplot(x, shade=True);
KDE 的帶寬參數(shù)(bw)控制著密度估計(jì)曲線的寬窄形狀,有點(diǎn)類似直方圖中的 bins 參數(shù)的作用。它對(duì)應(yīng)著我們上面繪制的 KDE 的寬度。默認(rèn)情況下,函數(shù)會(huì)按照一個(gè)通用的參考規(guī)則來估算出一個(gè)合適的值,但是嘗試更大或者更小也可能會(huì)有幫助:
sns.kdeplot(x) sns.kdeplot(x, bw=.2, label="bw: 0.2") sns.kdeplot(x, bw=2, label="bw: 2") plt.legend();
如上所述,高斯KDE過程的意味著估計(jì)延續(xù)了數(shù)據(jù)集中最大和最小的值。 可以通過cut參數(shù)來控制繪制曲線的極值值的距離; 然而,這只影響曲線的繪制方式,而不是曲線如何擬合:
sns.kdeplot(x, shade=True, cut=0) sns.rugplot(x);擬合參數(shù)分布
你也可以使用distplot()將參數(shù)分布擬合到數(shù)據(jù)集,并可視化地評(píng)估其與觀察數(shù)據(jù)的對(duì)應(yīng)程度:
x = np.random.gamma(6, size=200) sns.distplot(x, kde=False, fit=stats.gamma);繪制雙變量分布
對(duì)于雙變量分布的可視化也是非常有用的。在 seaborn 中最簡(jiǎn)單的方法就是使用 joinplot() 函數(shù),它能夠創(chuàng)建一個(gè)多面板圖形來展示兩個(gè)變量之間的聯(lián)合關(guān)系,以及每個(gè)軸上單變量的分布情況。
mean, cov = [0, 1], [(1, .5), (.5, 1)] data = np.random.multivariate_normal(mean, cov, 200) df = pd.DataFrame(data, columns=["x", "y"])Scatterplots
雙變量分布最熟悉的可視化方法無疑是散點(diǎn)圖了,在散點(diǎn)圖中每個(gè)觀察結(jié)果以x軸和y軸值所對(duì)應(yīng)的點(diǎn)展示。你可以用 matplotlib 的 plt.scatter 函數(shù)來繪制一個(gè)散點(diǎn)圖,它也是jointplot()函數(shù)顯示的默認(rèn)方式。
sns.jointplot(x="x", y="y", data=df)Hexbin plots
直方圖 histogram 的雙變量類似圖被稱為 “hexbin” 圖,因?yàn)樗故玖寺湓诹切蜗鋬?nèi)的觀測(cè)量。這種繪圖對(duì)于相對(duì)大的數(shù)據(jù)集效果最好。它可以通過 matplotlib 的 plt.hexbin 函數(shù)使用,也可以作為 jointplot 的一種類型參數(shù)使用。它使用白色背景的時(shí)候視覺效果最好。
x, y = np.random.multivariate_normal(mean, cov, 1000).T with sns.axes_style("white"): sns.jointplot(x=x, y=y, kind="hex", color="k");Kernel density estimation
還使用上面描述的核密度估計(jì)過程來可視化雙變量分布。在 seaborn 中,這種繪圖以等高線圖展示,并且可以作為 jointplot()的一種類型參數(shù)使用。
sns.jointplot(x="x", y="y", data=df, kind="kde");
你也可以用 kdeplot 函數(shù)來繪制一個(gè)二維的核密度圖形。這可以將這種繪圖繪制到一個(gè)特定的(可能已經(jīng)存在的)matplotlib軸上,而jointplot()函數(shù)只能管理自己:
f, ax = plt.subplots(figsize=(6, 6)) sns.kdeplot(df.x, df.y, ax=ax) sns.rugplot(df.x, color="g", ax=ax) sns.rugplot(df.y, vertical=True, ax=ax);
如果你希望讓雙變量密度看起來更連續(xù),您可以簡(jiǎn)單地增加 n_levels 參數(shù)增加輪廓級(jí)數(shù):
f, ax = plt.subplots(figsize=(6, 6)) cmap = sns.cubehelix_palette(as_cmap=True, dark=0, light=1, reverse=True) sns.kdeplot(df.x, df.y, cmap=cmap, n_levels=60, shade=True);
jointplot()函數(shù)使用JointGrid來管理圖形。為了獲得更多的靈活性,您可能需要直接使用JointGrid繪制圖形。jointplot()在繪制后返回JointGrid對(duì)象,你可以用它來添加更多層或調(diào)整可視化的其他方面:
g = sns.jointplot(x="x", y="y", data=df, kind="kde", color="m") g.plot_joint(plt.scatter, c="w", s=30, linewidth=1, marker="+") g.ax_joint.collections[0].set_alpha(0) g.set_axis_labels("$X$", "$Y$");可視化數(shù)據(jù)集成對(duì)關(guān)系
為了繪制數(shù)據(jù)集中多個(gè)成對(duì)的雙變量,你可以使用 pairplot() 函數(shù)。這創(chuàng)建了一個(gè)軸矩陣,并展示了在一個(gè) DataFrame 中每對(duì)列的關(guān)系。默認(rèn)情況下,它也繪制每個(gè)變量在對(duì)角軸上的單變量。
iris = sns.load_dataset("iris") sns.pairplot(iris);
就像 joinplot() 和 JoinGrid 之間的關(guān)系,pairplot() 函數(shù)建立在 PairGrid 對(duì)象之上,直接使用可以更靈活。
g = sns.PairGrid(iris) g.map_diag(sns.kdeplot) g.map_offdiag(sns.kdeplot, cmap="Blues_d", n_levels=6); /Users/mwaskom/anaconda/lib/python2.7/site-packages/matplotlib/axes/_axes.py:545: UserWarning: No labelled objects found. Use label="..." kwarg on individual plots. warnings.warn("No labelled objects found. "
參考:http://seaborn.pydata.org/tut...
關(guān)注微信公眾號(hào)Python數(shù)據(jù)科學(xué),獲取 120G 人工智能 學(xué)習(xí)資料。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/41768.html
摘要:分類數(shù)據(jù)散點(diǎn)圖在分類數(shù)據(jù)的基礎(chǔ)上展示定量數(shù)據(jù)的最簡(jiǎn)單函數(shù)就是。此外,小提琴內(nèi)還顯示了箱體四分位數(shù)和四分位距。該函數(shù)會(huì)用高度估計(jì)值對(duì)數(shù)據(jù)進(jìn)行描述,而不是顯示一個(gè)完整的條形,它只繪制點(diǎn)估計(jì)和置信區(qū)間。 作者:xiaoyu微信公眾號(hào):Python數(shù)據(jù)科學(xué)知乎:python數(shù)據(jù)分析師 Seaborn學(xué)習(xí)大綱 seaborn的學(xué)習(xí)內(nèi)容主要包含以下幾個(gè)部分: 風(fēng)格管理 繪圖風(fēng)格設(shè)置 顏色風(fēng)...
摘要:使用分類調(diào)色板另外一種對(duì)分類數(shù)據(jù)比較友好的調(diào)色板來自工具。它們是以在調(diào)色板中的主導(dǎo)顏色或顏色命名的。連續(xù)調(diào)色板調(diào)色板系統(tǒng)在亮度和色變變化上具有線性上升或下降的特點(diǎn)。離散色板調(diào)色板中的第三類被稱為離散。 作者:xiaoyu微信公眾號(hào):Python數(shù)據(jù)科學(xué)知乎:python數(shù)據(jù)分析師 Seaborn學(xué)習(xí)大綱 seaborn的學(xué)習(xí)內(nèi)容主要包含以下幾個(gè)部分: 風(fēng)格管理 繪圖風(fēng)格設(shè)置 顏...
摘要:數(shù)據(jù)分析的發(fā)展方向一般有商業(yè)方向,行業(yè)分析業(yè)務(wù)方向,和機(jī)器學(xué)習(xí)數(shù)據(jù)挖掘方向。機(jī)器學(xué)習(xí)的書籍推薦統(tǒng)計(jì)學(xué)習(xí)方法,機(jī)器學(xué)習(xí),機(jī)器學(xué)習(xí)實(shí)戰(zhàn)三本書。 作者:xiaoyu 微信公眾號(hào):Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 上一篇主要分享了博主親身轉(zhuǎn)行數(shù)據(jù)分析的經(jīng)歷: 【從零學(xué)起到成功轉(zhuǎn)行數(shù)據(jù)分析,我是怎么做的?】 本篇繼上一篇將分享轉(zhuǎn)行數(shù)據(jù)分析的一些經(jīng)驗(yàn)和學(xué)習(xí)方法,看完這篇你將會(huì)解...
摘要:簡(jiǎn)介同一樣,也是進(jìn)行數(shù)據(jù)可視化分析的重要第三方包。的五種繪圖風(fēng)格有五種的風(fēng)格,它們分別是。 作者:xiaoyu微信公眾號(hào):Python數(shù)據(jù)科學(xué)知乎:python數(shù)據(jù)分析師 最近在做幾個(gè)項(xiàng)目的數(shù)據(jù)分析,每次用到seaborn進(jìn)行可視化繪圖的時(shí)候總是忘記具體操作。雖然seaborn的官方網(wǎng)站已經(jīng)詳細(xì)的介紹了使用方法,但是畢竟是英文,而且查找不是很方便。因此博主想從零開始將seaborn學(xué)...
閱讀 666·2021-11-15 11:37
閱讀 4105·2021-09-09 09:34
閱讀 3559·2019-08-30 15:52
閱讀 2602·2019-08-29 14:03
閱讀 2842·2019-08-26 13:36
閱讀 1587·2019-08-26 12:16
閱讀 1592·2019-08-26 11:45
閱讀 3488·2019-08-23 18:41