數(shù)據(jù)科學 IPython 筆記本 8.8 直方圖骇笔,分箱和密度

8.8 直方圖长已,分箱和密度

原文:Histograms, Binnings, and Density

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

本節(jié)是《Python 數(shù)據(jù)科學手冊》(Python Data Science Handbook)的摘錄。

簡單的直方圖可能是理解數(shù)據(jù)集的第一步灶轰。之前,我們預(yù)覽了 Matplotlib 直方圖函數(shù)(參見“比較,掩碼和布爾邏輯”)扔役,一旦執(zhí)行了常規(guī)的導(dǎo)入,它在一行中創(chuàng)建一個基本直方圖:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')

data = np.random.randn(1000)

plt.hist(data);
png

hist()函數(shù)有很多調(diào)整計算和顯示的選項警医;這是一個更加自定義的直方圖的例子:

plt.hist(data, bins=30, normed=True, alpha=0.5,
         histtype='stepfilled', color='steelblue',
         edgecolor='none');
png

plt.hist的文檔字符串提供了其他可用自定義選項的更多信息亿胸。我發(fā)現(xiàn)histtype='stepfilled'和一些透明度alpha的組合,在比較幾種分布的直方圖時非常有用:

x1 = np.random.normal(0, 0.8, 1000)
x2 = np.random.normal(-2, 1, 1000)
x3 = np.random.normal(3, 2, 1000)

kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)

plt.hist(x1, **kwargs)
plt.hist(x2, **kwargs)
plt.hist(x3, **kwargs);
png

如果你想簡單地計算直方圖(也就是說预皇,計算給定桶中的點數(shù))而不顯示它侈玄,那么np.histogram()函數(shù)是可用的:

counts, bin_edges = np.histogram(data, bins=5)
print(counts)

# [ 12 190 468 301  29]

二維直方圖和分箱

就像我們通過將數(shù)字放入桶中,創(chuàng)建一維直方圖一樣吟温,我們也可以通過將點放入通過二維的桶中序仙,來創(chuàng)建二維直方圖。我們將在這里簡要介紹幾種方法鲁豪。我們首先定義一些數(shù)據(jù) - 從多元高斯分布中抽取的xy數(shù)組:

mean = [0, 0]
cov = [[1, 1], [1, 2]]
x, y = np.random.multivariate_normal(mean, cov, 10000).T

plt.hist2d:二維直方圖

繪制二維直方圖的一種簡單方法是使用 Matplotlib 的plt.hist2d函數(shù):

plt.hist2d(x, y, bins=30, cmap='Blues')
cb = plt.colorbar()
cb.set_label('counts in bin')
png

就像plt.hist一樣潘悼,plt.hist2d有許多微調(diào)繪圖和分箱的額外選項來,這在函數(shù)的文檔字符串中有很好的概述爬橡。此外治唤,正如plt.histnp.histogram中存在對應(yīng),plt.hist2dnp.histogram2d中也存在對應(yīng)堤尾,可以按如下方式使用:

counts, xedges, yedges = np.histogram2d(x, y, bins=30)

對于維度大于 2 的直方圖分箱的推廣肝劲,請參閱np.histogramdd函數(shù)。

plt.hexbin:六邊形分箱

二維直方圖創(chuàng)建了橫跨坐標軸的正方形細分。這種細分的另一種自然形狀是正六邊形辞槐。為此掷漱,Matplotlib 提供了plt.hexbin例程,它將表示在六邊形網(wǎng)格中分箱的二維數(shù)據(jù)集:

plt.hexbin(x, y, gridsize=30, cmap='Blues')
cb = plt.colorbar(label='count in bin')
png

plt.hexbin有許多有趣的選項榄檬,包括為每個點指定權(quán)重卜范,以及將每個桶中的輸出更改為任何 NumPy 聚合(權(quán)重的平均值,權(quán)重的標準差等)鹿榜。

核密度估計

另一種評估多維密度的常用方法是核密度估計(KDE)海雪。這將在“深度:核密度估計”中全面討論,但是現(xiàn)在我們只是提到舱殿,KDE 可以被認為是“消去”空間中的點奥裸,并將結(jié)果相加來獲得平滑函數(shù)的一種方式。

scipy.stats包中存在非郴ο快速和簡單的 KDE 實現(xiàn)湾宙。以下是在此數(shù)據(jù)上使用 KDE 的快速示例:

from scipy.stats import gaussian_kde

# 擬合大小為 [Ndim, Nsamples] 的數(shù)組
data = np.vstack([x, y])
kde = gaussian_kde(data)

# 在常規(guī)網(wǎng)格上評估
xgrid = np.linspace(-3.5, 3.5, 40)
ygrid = np.linspace(-6, 6, 40)
Xgrid, Ygrid = np.meshgrid(xgrid, ygrid)
Z = kde.evaluate(np.vstack([Xgrid.ravel(), Ygrid.ravel()]))

# 將結(jié)果繪制為圖像
plt.imshow(Z.reshape(Xgrid.shape),
           origin='lower', aspect='auto',
           extent=[-3.5, 3.5, -6, 6],
           cmap='Blues')
cb = plt.colorbar()
cb.set_label("density")
png

KDE 具有平滑長度,可以在細節(jié)和平滑度之間有效地調(diào)整(無處不在的偏差 - 方差權(quán)衡的一個例子)冈绊。有關(guān)選擇合適的平滑長度的文獻非常多:gaussian_kde使用經(jīng)驗法則侠鳄,試圖為輸入數(shù)據(jù)找到近似最佳的平滑長度。

SciPy 生態(tài)系統(tǒng)中提供了其他 KDE 實現(xiàn)死宣,每個實現(xiàn)都有自己的優(yōu)點和缺點伟恶;例如,參見sklearn.neighbors.KernelDensitystatsmodels.nonparametric.kernel_density.KDEMultivariate毅该。對于基于 KDE 的可視化博秫,使用 Matplotlib 往往過于冗長。在“可視化和 Seaborn”中討論的 Seaborn 庫鹃骂,提供了更為簡潔的 API 來創(chuàng)建基于 KDE 的可視化台盯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罢绽,一起剝皮案震驚了整個濱河市畏线,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌良价,老刑警劉巖寝殴,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異明垢,居然都是意外死亡蚣常,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門痊银,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抵蚊,“玉大人,你說我怎么就攤上這事≌晟” “怎么了谷醉?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冈闭。 經(jīng)常有香客問我俱尼,道長,這世上最難降的妖魔是什么萎攒? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任遇八,我火速辦了婚禮,結(jié)果婚禮上耍休,老公的妹妹穿的比我還像新娘刃永。我一直安慰自己,他們只是感情好羊精,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布揽碘。 她就那樣靜靜地躺著,像睡著了一般园匹。 火紅的嫁衣襯著肌膚如雪雳刺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天裸违,我揣著相機與錄音掖桦,去河邊找鬼。 笑死供汛,一個胖子當著我的面吹牛枪汪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怔昨,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雀久,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了趁舀?” 一聲冷哼從身側(cè)響起赖捌,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎矮烹,沒想到半個月后越庇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡奉狈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年卤唉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仁期。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡桑驱,死狀恐怖竭恬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情熬的,我是刑警寧澤萍聊,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站悦析,受9級特大地震影響寿桨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜强戴,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一亭螟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骑歹,春花似錦预烙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至最域,卻和暖如春谴分,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镀脂。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工牺蹄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人薄翅。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓沙兰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翘魄。 傳聞我的和親對象是個殘疾皇子鼎天,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容