
首先按照慣例先來(lái)認(rèn)識(shí)下直方圖是誰(shuí),以下是從維基百科搬運(yùn)過(guò)來(lái)的直方圖的定義:
在統(tǒng)計(jì)學(xué)中,直方圖(英語(yǔ):Histogram)是一種對(duì)數(shù)據(jù)分布情況的圖形表示,是一種二維統(tǒng)計(jì)圖表,它的兩個(gè)坐標(biāo)分別是統(tǒng)計(jì)樣本和該樣本對(duì)應(yīng)的某個(gè)屬性的度量,以長(zhǎng)條圖(bar)的形式具體表現(xiàn)。因?yàn)?a href='/map/zhifangtu/' style='color:#000;font-size:inherit;'>直方圖的長(zhǎng)度及寬度很適合用來(lái)表現(xiàn)數(shù)量上的變化,所以較容易解讀差異小的數(shù)值。
直方圖也是用條形進(jìn)行標(biāo)注的,而條形圖和直方圖猶如孿生兄弟般讓很多人都傻傻分不清,那么我們就先來(lái)好好區(qū)分一下這兩種圖形吧:
單純文字不夠直觀的話,我們來(lái)個(gè)圖感受下:
假設(shè)我們有一組數(shù)據(jù),是一個(gè)學(xué)校200位同學(xué)的身高數(shù)據(jù),如果想要知道該校學(xué)生身高的分布,那么直方圖再合適不過(guò)了。
這里我用隨機(jī)數(shù)生成了200個(gè)值在150到180之間的數(shù)表示身高信息:
data = np.random.randint(150,180,200) data
輸出的結(jié)果:
array([162, 166, 158, 166, 165, 170, 157, 156, 164, 161, 154, 176, 166, 176, 153, 169, 164, 153, 171, 175, 171, 173, 155, 165, 168, 160, 162, 150, 151, 169, 166, 152, 174, 176, 160, 155, 158, 152, 159, 179, 179, 168, 178, 166, 174, 171, 167, 166, 165, 163, 164, 153, 153, 153, 162, 167, 169, 155, 155, 175, 161, 151, 173, 154, 151, 151, 166, 168, 167, 173, 166, 164, 175, 172, 163, 175, 154, 169, 160, 174, 163, 167, 156, 154, 157, 169, 160, 176, 150, 154, 158, 167, 164, 153, 152, 165, 165, 160, 167, 161, 164, 177, 177, 159, 161, 171, 169, 150, 165, 156, 156, 155, 165, 164, 179, 164, 179, 155, 172, 151, 178, 171, 164, 165, 161, 166, 170, 175, 163, 163, 179, 175, 173, 150, 171, 150, 178, 175, 152, 176, 168, 150, 172, 166, 176, 170, 174, 174, 152, 158, 171, 165, 167, 152, 163, 167, 164, 151, 174, 169, 169, 166, 167, 168, 179, 160, 179, 156, 168, 168, 172, 175, 160, 165, 160, 161, 164, 179, 158, 176, 175, 154, 167, 159, 153, 169, 151, 158, 163, 169, 155, 165, 178, 151, 168, 164, 169, 177, 150, 169])
以上就是200位同學(xué)的身高信息了,存儲(chǔ)在一個(gè)數(shù)組中。
如果是常見(jiàn)的查看分布,直方圖很容易繪制,這里我們通過(guò)這組數(shù)據(jù)探索下直方圖函數(shù)中各個(gè)參數(shù)的作用,以更游刃有余的繪制符合需求的直方圖。
bins參數(shù)指的是要將數(shù)據(jù)分成幾組,它接收的參數(shù)可以是整數(shù),也可以是序列,還可以是字符串,常用的是整數(shù)和序列。
通過(guò)代碼來(lái)看一下區(qū)別:
fig = plt.figure(figsize=(16,4)) pic1 = fig.add_subplot(131) plt.hist(data) plt.title("bins默認(rèn)10") pic2 = fig.add_subplot(132) plt.hist(data,bins = 15) plt.title("bins = 15") pic3 = fig.add_subplot(133) plt.hist(data,bins = [150,153,156,159,162,165,168,171,174,179]) plt.title("bins取值為序列");
能夠看出即使是同一個(gè)數(shù)據(jù)集,分組的情況不同,呈現(xiàn)出來(lái)的分布也是有區(qū)別的,所以如何分組分成幾組也是有學(xué)問(wèn)的。
如果傳給參數(shù)的是序列,則表示將每個(gè)分組的臨界值都標(biāo)識(shí)出來(lái),缺點(diǎn)是比較麻煩,優(yōu)點(diǎn)是很靈活,可以自主決定每個(gè)組的組距,每個(gè)組的組距都可以是不同的,如果分5組記得需要的臨界值是6個(gè),參數(shù)序列中需要有6個(gè)數(shù)值。
一般繪制直方圖,都是對(duì)整個(gè)數(shù)據(jù)集繪制,有時(shí)候可能會(huì)有這樣的需求,比如我想看該校中身高在155cm到175cm之間的身高分布,那么就需要將整個(gè)數(shù)據(jù)集中符合要求的身高挑選出來(lái)繪制直方圖,實(shí)際上不用這么麻煩,用range參數(shù)就可以解決,這個(gè)參數(shù)就是指定繪圖時(shí)使用數(shù)據(jù)的范圍的,它接收的是一個(gè)元組,元組中放入兩個(gè)數(shù)值表示所取數(shù)據(jù)的范圍。
fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) plt.title('range默認(rèn)None') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10,range=(155,175)) #設(shè)置范圍從155-175 plt.title('range=(155,175)');
能夠看到x軸的數(shù)值范圍發(fā)生了變化,整個(gè)直方圖的形狀也發(fā)生了變化。
這個(gè)參數(shù)的意思其實(shí)很直觀,參數(shù)名字直譯成中文就是密度的意思。普通的直方圖y軸表示的都是頻數(shù),而通過(guò)density參數(shù)可以將y軸轉(zhuǎn)化成密度刻度,這個(gè)參數(shù)接收布爾值,默認(rèn)為None。
fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) #y軸表示計(jì)數(shù) plt.title('density默認(rèn)None') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10, density=True) # density=True 將原本y軸的計(jì)數(shù)轉(zhuǎn)換成概率密度的計(jì)數(shù),直方圖下面積為1 plt.title('density=True');
雖然兩個(gè)圖的形狀是完全一模一樣的,但是細(xì)看就能發(fā)現(xiàn)y軸的數(shù)值不一樣,具體的參數(shù)作用已經(jīng)以備注的形式標(biāo)注到代碼中了哦。
這里涉及到了另一個(gè)參數(shù)normed,這個(gè)參數(shù)已經(jīng)被棄用了,它的作用和density一樣,只用density就可以了,
大家對(duì)這個(gè)參數(shù)應(yīng)該不陌生,它經(jīng)常出現(xiàn),表示權(quán)重。沒(méi)錯(cuò)在這里也是表示設(shè)置權(quán)重。它接收的是一個(gè)序列,序列中是數(shù)值,數(shù)值的數(shù)量和原數(shù)據(jù)集中元素的個(gè)數(shù)一致,也就是每個(gè)數(shù)值都有自己?jiǎn)为?dú)的權(quán)重,我用隨機(jī)數(shù)生成了200個(gè)數(shù)值作為權(quán)重傳給參數(shù),看一下和不設(shè)置權(quán)重時(shí)有哪些變化。
x0=np.random.rand(200)#生成總和為1的200個(gè)數(shù),設(shè)置隨機(jī)權(quán)重 ratio=1/sum(x0) x1=x0*ratio fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) plt.title('weights默認(rèn)None') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10,weights=x1) plt.title('設(shè)置weights');
當(dāng)所有元素的權(quán)重都一樣時(shí)是第一幅圖的情況,而進(jìn)行權(quán)重設(shè)置后,分布情況發(fā)生了變化,而且y軸也發(fā)生了變化,不再是單純的計(jì)數(shù)。在實(shí)際工作中要謹(jǐn)慎使用權(quán)重,以符合業(yè)務(wù)需求為主哈。
如果英文比較好的人們,一眼就能看出這個(gè)參數(shù)的作用,直譯成中文就是累積的意思。到這里又出現(xiàn)了一個(gè)小問(wèn)題,很多人對(duì)“累積”和“累計(jì)”又傻傻分不清了,其實(shí)這兩者還是很容易區(qū)分的,看下圖特別直觀:
是不是能直觀區(qū)分“累積”和“累計(jì)”了?
那就繼續(xù)探索cumulative參數(shù)吧,這個(gè)參數(shù)接收布爾值,默認(rèn)為False,通過(guò)代碼來(lái)看一下參數(shù)設(shè)置不同都有怎樣的結(jié)果。
fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) plt.title('cumulative默認(rèn)False') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10,cumulative=True) #累積直方圖,展示累積分布 plt.title('cumulative=True');
左邊時(shí)普通的直方圖,右邊時(shí)累積直方圖,同樣可以根據(jù)實(shí)際的業(yè)務(wù)需求來(lái)進(jìn)行參數(shù)設(shè)置哦。
由于篇幅有限,對(duì)直方圖函數(shù)的介紹就先到這里啦。細(xì)心的小伙伴可能發(fā)現(xiàn)了介紹參數(shù)的順序就是按照函數(shù)官方文檔中參數(shù)的順序來(lái)的,沒(méi)錯(cuò),就是按照這個(gè)順序進(jìn)行的。但是參數(shù)中的第一個(gè)參數(shù)x卻沒(méi)有進(jìn)行介紹,是這個(gè)參數(shù)沒(méi)什么可介紹的嘛?當(dāng)然不是,這個(gè)參數(shù)也是有些小細(xì)節(jié)需要注意的,具體的講解留到下一篇文章和其他參數(shù)一起介紹啦。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10