
首先按照慣例先來認識下直方圖是誰,以下是從維基百科搬運過來的直方圖的定義:
在統計學中,直方圖(英語:Histogram)是一種對數據分布情況的圖形表示,是一種二維統計圖表,它的兩個坐標分別是統計樣本和該樣本對應的某個屬性的度量,以長條圖(bar)的形式具體表現。因為直方圖的長度及寬度很適合用來表現數量上的變化,所以較容易解讀差異小的數值。
直方圖也是用條形進行標注的,而條形圖和直方圖猶如孿生兄弟般讓很多人都傻傻分不清,那么我們就先來好好區分一下這兩種圖形吧:
單純文字不夠直觀的話,我們來個圖感受下:
假設我們有一組數據,是一個學校200位同學的身高數據,如果想要知道該校學生身高的分布,那么直方圖再合適不過了。
這里我用隨機數生成了200個值在150到180之間的數表示身高信息:
data = np.random.randint(150,180,200) data
輸出的結果:
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位同學的身高信息了,存儲在一個數組中。
如果是常見的查看分布,直方圖很容易繪制,這里我們通過這組數據探索下直方圖函數中各個參數的作用,以更游刃有余的繪制符合需求的直方圖。
bins參數指的是要將數據分成幾組,它接收的參數可以是整數,也可以是序列,還可以是字符串,常用的是整數和序列。
通過代碼來看一下區別:
fig = plt.figure(figsize=(16,4)) pic1 = fig.add_subplot(131) plt.hist(data) plt.title("bins默認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取值為序列");
能夠看出即使是同一個數據集,分組的情況不同,呈現出來的分布也是有區別的,所以如何分組分成幾組也是有學問的。
如果傳給參數的是序列,則表示將每個分組的臨界值都標識出來,缺點是比較麻煩,優點是很靈活,可以自主決定每個組的組距,每個組的組距都可以是不同的,如果分5組記得需要的臨界值是6個,參數序列中需要有6個數值。
一般繪制直方圖,都是對整個數據集繪制,有時候可能會有這樣的需求,比如我想看該校中身高在155cm到175cm之間的身高分布,那么就需要將整個數據集中符合要求的身高挑選出來繪制直方圖,實際上不用這么麻煩,用range參數就可以解決,這個參數就是指定繪圖時使用數據的范圍的,它接收的是一個元組,元組中放入兩個數值表示所取數據的范圍。
fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) plt.title('range默認None') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10,range=(155,175)) #設置范圍從155-175 plt.title('range=(155,175)');
能夠看到x軸的數值范圍發生了變化,整個直方圖的形狀也發生了變化。
這個參數的意思其實很直觀,參數名字直譯成中文就是密度的意思。普通的直方圖y軸表示的都是頻數,而通過density參數可以將y軸轉化成密度刻度,這個參數接收布爾值,默認為None。
fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) #y軸表示計數 plt.title('density默認None') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10, density=True) # density=True 將原本y軸的計數轉換成概率密度的計數,直方圖下面積為1 plt.title('density=True');
雖然兩個圖的形狀是完全一模一樣的,但是細看就能發現y軸的數值不一樣,具體的參數作用已經以備注的形式標注到代碼中了哦。
這里涉及到了另一個參數normed,這個參數已經被棄用了,它的作用和density一樣,只用density就可以了,
大家對這個參數應該不陌生,它經常出現,表示權重。沒錯在這里也是表示設置權重。它接收的是一個序列,序列中是數值,數值的數量和原數據集中元素的個數一致,也就是每個數值都有自己單獨的權重,我用隨機數生成了200個數值作為權重傳給參數,看一下和不設置權重時有哪些變化。
x0=np.random.rand(200)#生成總和為1的200個數,設置隨機權重 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默認None') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10,weights=x1) plt.title('設置weights');
當所有元素的權重都一樣時是第一幅圖的情況,而進行權重設置后,分布情況發生了變化,而且y軸也發生了變化,不再是單純的計數。在實際工作中要謹慎使用權重,以符合業務需求為主哈。
如果英文比較好的人們,一眼就能看出這個參數的作用,直譯成中文就是累積的意思。到這里又出現了一個小問題,很多人對“累積”和“累計”又傻傻分不清了,其實這兩者還是很容易區分的,看下圖特別直觀:
是不是能直觀區分“累積”和“累計”了?
那就繼續探索cumulative參數吧,這個參數接收布爾值,默認為False,通過代碼來看一下參數設置不同都有怎樣的結果。
fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) plt.title('cumulative默認False') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10,cumulative=True) #累積直方圖,展示累積分布 plt.title('cumulative=True');
左邊時普通的直方圖,右邊時累積直方圖,同樣可以根據實際的業務需求來進行參數設置哦。
由于篇幅有限,對直方圖函數的介紹就先到這里啦。細心的小伙伴可能發現了介紹參數的順序就是按照函數官方文檔中參數的順序來的,沒錯,就是按照這個順序進行的。但是參數中的第一個參數x卻沒有進行介紹,是這個參數沒什么可介紹的嘛?當然不是,這個參數也是有些小細節需要注意的,具體的講解留到下一篇文章和其他參數一起介紹啦。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25