国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
第128天:Seaborn-可視化數(shù)據(jù)集的分布

上一篇我們介紹了介紹 seaborn 中分類數(shù)據(jù)的可視化圖形表示。在處理數(shù)據(jù)過程中,我們通常想做的第一件事就是了解數(shù)據(jù)集中變量的分布情況,本篇將介紹 seaborn 中數(shù)據(jù)集分布情況的可視化圖形表示。

1 前言

在這里我們將簡(jiǎn)要介紹 seaborn 中用于檢查單變量和雙變量分布的一些函數(shù)。

以下各個(gè)小節(jié)示例演示前均首先進(jìn)行以下聲明:

import seaborn as snsimport matplotlib.pyplot as pltfrom scipy import statssns.set(color_codes=True)

2 繪制單變量分布

在 seaborn 中想要快速查看單變量分布的最方便的方法是使用 distplot() 函數(shù),可以靈活繪制單變量觀測(cè)值分布圖。

2.1 示例1

默認(rèn)情況下,distplot() 函數(shù)會(huì)繪制直方圖并擬合內(nèi)核密度估計(jì)(kernel density estimate,簡(jiǎn)稱 KDE)。

x = np.random.normal(size=100)sns.distplot(x)

2.2 示例2

直方圖的繪制首先確定數(shù)據(jù)區(qū)間,然后觀察數(shù)據(jù)落入這些區(qū)間中的數(shù)量來繪制柱形圖以此來表征數(shù)據(jù)的分布情況。我們可以通過 kde=False 刪除密度曲線,然后添加一個(gè) rug=True,它會(huì)在橫軸上為每一個(gè)觀測(cè)值繪制垂直豎線。

x = np.random.normal(size=100)sns.distplot(x, kde=False, rug=True)

# 可以通過 bins 來調(diào)整直方圖中 bin 的數(shù)目,若填 None,則默認(rèn)使用 Freedman-Diaconis 規(guī)則指定柱的數(shù)目x = np.random.normal(size=100)sns.distplot(x, bins=20, kde=False, rug=True) # 嘗試更多或更少的柱數(shù)目可能會(huì)揭示數(shù)據(jù)中的其他特性

2.3 示例3

核密度估計(jì)(KDE)是繪制分布形狀的有力工具,它是在概率論中用來估計(jì)未知的密度函數(shù)。可以通過 hist=False 來禁用直方圖的繪制,然后只繪制核密度估計(jì)。

x = np.random.normal(size=100)sns.distplot(x, hist=False, rug=True)

下面介紹一下如何繪制核密度估計(jì)曲線,這比直方圖繪制更復(fù)雜。首先每個(gè)觀測(cè)值被一個(gè)以該值為中心的正態(tài)(高斯)曲線所取代。

x = np.random.normal(0, 1, size=30) # 初始化一組服從正態(tài)分布的隨機(jī)數(shù)bandwidth = 1.06 * x.std() * x.size ** (-1 / 5.) # 根據(jù)經(jīng)驗(yàn)公式計(jì)算 KDE 的帶寬support = np.linspace(-4, 4, 200)
kernels = []for x_i in x:
kernel = stats.norm(x_i, bandwidth).pdf(support) # 獲取每一個(gè)觀測(cè)值的核密度估計(jì) kernels.append(kernel) plt.plot(support, kernel, color="r") # 為每一個(gè)觀測(cè)值繪制核密度估計(jì)曲線
sns.rugplot(x, color=".2", linewidth=3)

接下來,對(duì)這些曲線進(jìn)行求和,計(jì)算支持網(wǎng)格(support grid)中每個(gè)點(diǎn)的密度值。然后對(duì)得到的曲線進(jìn)行歸一化,使曲線下的面積等于1。

from scipy.integrate import trapzdensity = np.sum(kernels, axis=0)density /= trapz(density, support)plt.plot(support, density)

我們可以看到,如果在 seaborn 中使用 kdeplot() 函數(shù), 我們可以得到相同的曲線。這個(gè)函數(shù)也被 distplot() 所使用, 但是當(dāng)我們只想要核密度估計(jì)時(shí),它提供了一個(gè)更直接的接口,可以更容易地訪問其他選項(xiàng)。

sns.kdeplot(x, shade=True)

KDE 的帶寬參數(shù)控制估計(jì)與數(shù)據(jù)的擬合程度,就像直方圖中的 bin 大小一樣。它對(duì)應(yīng)于我們?cè)谏厦胬L制的內(nèi)核的寬度。默認(rèn)行為嘗試使用常用參考規(guī)則猜測(cè)一個(gè)好的值,但嘗試更大或更小的值可能會(huì)有所幫助。

sns.kdeplot(x)sns.kdeplot(x, bw=.2, label="bw: 0.2")sns.kdeplot(x, bw=2, label="bw: 2")plt.legend()

正如我們?cè)谏厦嫠吹降?,高?KDE 過程的本質(zhì)意味著估計(jì)超出了數(shù)據(jù)集中最大和最小的值,有可能控制超過極值多遠(yuǎn)的曲線是由 cut 參數(shù)控制的,然而這只影響曲線的繪制方式,而不影響曲線的擬合方式。

sns.kdeplot(x, shade=True, cut=0)sns.rugplot(x)

2.4 示例4

可以使用 distplot() 函數(shù)將參數(shù)分布擬合到數(shù)據(jù)集上,并直觀地評(píng)估其與觀測(cè)數(shù)據(jù)的對(duì)應(yīng)程度,這就是擬合參數(shù)分布。

x = np.random.gamma(6, size=200)sns.distplot(x, kde=False, fit=stats.gamma)

3 繪制二元分布

對(duì)于可視化兩個(gè)變量的二元分布也很有用。在 seaborn 中,最簡(jiǎn)單的方法就是使用jointplot()函數(shù),它創(chuàng)建了一個(gè)多面板圖形,顯示了兩個(gè)變量之間的二元(或聯(lián)合)關(guān)系,以及每個(gè)變量在單獨(dú)軸上的一元(或邊際)分布。

接下來以下面的數(shù)據(jù)集為例展示例子:

mean, cov = [0, 1], [(1, .5), (.5, 1)]data = np.random.multivariate_normal(mean, cov, 200)df = pd.DataFrame(data, columns=["x", "y"])

3.1 示例1-散點(diǎn)圖

可視化二元分布最常見的方法是散點(diǎn)圖,其中每個(gè)觀察點(diǎn)都以 x 和 y 值表示。這類似于二維 rugplot。您可以使用 matplotlib 的plt.scatter 函數(shù)繪制散點(diǎn)圖, 它也是 jointplot() 函數(shù)顯示的默認(rèn)類型的圖。

sns.jointplot(x="x", y="y", data=df)

3.2 示例2-六邊形“桶”(Hexbin)圖

類似于單變量的直方圖,用于描繪二元變量關(guān)系的圖稱為 “hexbin” 圖,因?yàn)樗@示了落入六邊形“桶”內(nèi)的觀察計(jì)數(shù)。此圖對(duì)于相對(duì)較大的數(shù)據(jù)集最有效。它可以通過調(diào)用 matplotlib 中的 plt.hexbin 函數(shù)獲得并且在 jointplot() 作為一種樣式。當(dāng)使用白色作為背景色時(shí)效果最佳。

x, y = np.random.multivariate_normal(mean, cov, 1000).Twith sns.axes_style("white"): sns.jointplot(x=x, y=y, kind="hex", color="k")

3.3 示例3-核密度估計(jì)

也可以使用上面描述的核密度估計(jì)過程來可視化二元分布。在 seaborn 中,這種圖用等高線圖表示, 在 jointplot() 中被當(dāng)作一種樣式。

sns.jointplot(x="x", y="y", data=df, kind="kde")

還可以使用 kdeplot() 函數(shù)繪制二維核密度圖。這允許您在一個(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)單地增加輪廓層的數(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$")

4 可視化數(shù)據(jù)集中的成對(duì)關(guān)系

要在數(shù)據(jù)集中繪制多個(gè)成對(duì)的雙變量分布,我們可以使用 pairplot() 函數(shù)。這將創(chuàng)建一個(gè)軸矩陣并顯示 DataFrame 中每對(duì)列的關(guān)系,默認(rèn)情況下,它還繪制對(duì)角軸上每個(gè)變量的單變量分布。

iris = sns.load_dataset("iris")sns.pairplot(iris)

與 jointplot() 和 JointGrid 之間的關(guān)系非常類似, pairplot() 函數(shù)構(gòu)建在 PairGrid 對(duì)象之上, 可以直接使用它來獲得更大的靈活性。

g = sns.PairGrid(iris)g.map_diag(sns.kdeplot)g.map_offdiag(sns.kdeplot, n_levels=6)

總結(jié)

本節(jié)給大家介紹了 seaborn 中關(guān)于可視化數(shù)據(jù)集分布的一些方法,主要包含了三個(gè)方面的內(nèi)容,分別是繪制繪制單變量分布、繪制二元分布以及可視化數(shù)據(jù)集中的成對(duì)關(guān)系。

參考資料

[1] https://seaborn.pydata.org/tutorial/distributions.html

[2] https://github.com/apachecn/seaborn-doc-zh/blob/master/docs/5.md

示例代碼:https://github.com/JustDoPython/python-100-day

系列文章

第127天:Seaborn-可視化分類數(shù)據(jù)

第126天:Seaborn-可視化統(tǒng)計(jì)關(guān)系

第125天:Flask 項(xiàng)目結(jié)構(gòu)

第124天:Web 開發(fā) Django 模板

第123天:Web 開發(fā) Django 管理工具

第122天:Flask 單元測(cè)試

第121天:機(jī)器學(xué)習(xí)之決策樹
從 0 學(xué)習(xí) Python 0 - 120 大合集總結(jié)

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
seaborn數(shù)據(jù)總體分布的可視化策略
Python Seaborn綜合指南,成為數(shù)據(jù)可視化專家
Py之seaborn:數(shù)據(jù)可視化seaborn庫(kù)(二)的組合圖可視化之密度圖/核密度圖分布可視化、箱型圖/散點(diǎn)圖、小提琴圖/散點(diǎn)圖組合可視化的簡(jiǎn)介、使用方法之最強(qiáng)攻略(建議收藏)
Python數(shù)據(jù)分析 | seaborn工具與數(shù)據(jù)可視化
Python實(shí)踐:seaborn的散點(diǎn)圖矩陣(Pairs Plots)可視化數(shù)據(jù)
可視化 | 讓矩陣在散點(diǎn)圖中動(dòng)起來
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服