一、直方圖介紹
1、什么是直方圖
直方圖,形狀類似柱狀圖卻有著與柱狀圖完全不同的含義。直方圖牽涉統計學的概念,首先要對數據進行分組,然后統計每個分組內數據元的數量。在坐標系中,橫軸標出每個組的端點,縱軸表示頻數,每個矩形的高,代表對應的頻數,稱這樣的統計圖為頻數分布直方圖
2、示例
某校初三(1)班36位同學的身高的頻數分布直方圖如下圖所示:
(1)身高在哪一組的同學最多?
(2)身高在160.5cm以上的同學有多少人?
相關概念
組數:在統計數據時,我們把數據按照不同的范圍分成幾個組,分成的組的個數稱為組數
組距:每一組兩個端點的差
已知:最高175.5,最矮150.5,組距5,求組數
(175.5 - 150.5) / 5 = 5
二、直方圖與柱狀圖的對比
1、柱狀圖是以矩形的長度表示每一組的頻度或數量,其寬度(表示類別)則是固定的,利于較小的數據集分析
2、直方圖描述的是一組數據的頻次分布,是以矩形的長度表示每一組的頻度或數量,寬度則表示各組的組距,因此其高度與寬度均有意義,利于展示大量數據集的統計結果
例如把年齡分成“0-5,5-10,...,80-85”17個組,統計一下中國人口年齡的分布情況。直方圖有助于我們知道數據的分布情況,諸如眾數、中位數的大致位置、數據是否存在缺口或者異常值
3、直方圖展示數據的分布,柱狀圖比較數據的大小
這是直方圖與柱狀圖最根本的區別。舉個例子,有10個蘋果,每個蘋果重量不同。如果使用直方圖,就展示了重量在0-100g的蘋果有多少個,10-20g的蘋果有多少個;如果使用柱狀圖,則展示每個蘋果的具體重量
所以直方圖展示的是一組數據中,在你劃分的區間里,這些數據的分布情況,但是我們不知道在一個區間里,單個數據的具體大小
4、直方圖x軸為定量數據,柱狀圖x軸為分類數據
5、直方圖柱子無間隔,柱狀圖柱子有間隔
6、直方圖柱子寬度可不一,柱狀圖柱子寬度需一致
7、直方圖要素
三、直方圖繪制
1、需求:電影時長分布狀況
現有250部電影的時長,希望統計出這些電影時長的分布狀態(比如時長為100分鐘到120分鐘電影的數量,出現的頻率)等信息,你應該如何呈現這些數據
2、matplotlib.pyplot.hist(x, bins=None, normed=None, **kwargs)
說明:
x:這一組數據
bins:組數
繪制
設置組距
設置組數(通常對于數據較少的情況,分為5~12組,數據較多,更換圖形顯示方式)
? 通常設置組數會有相應公式:組數 = 級差 / 組距 (max - min) /?distance
3、代碼
# 直方圖繪制
# 需求:電影時長分布狀況# 1、準備數據
time = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117, 86, 95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140, 83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92,121, 112, 146, 97, 137, 105, 98, 117, 112, 81, 97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112, 83, 94, 146, 133, 101,131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]# 2、創建畫布
plt.figure(figsize=(20,8), dpi=100)# 3、繪制直方圖
# 組距
distance = 2
# 組數
group_num = int((max(time) - min(time)) / distance)
plt.hist(time, group_num)# 修改x軸刻度
plt.xticks(range(min(time), max(time) + 2, distance))# 添加網格
plt.grid(linestyle="--", alpha=0.5)# 添加x,y軸描述信息
plt.xlabel("電影時長大小")
plt.ylabel("電影的數據量")# 4、顯示圖像
plt.show()
3、直方圖注意點
(1)注意組距
組距會影響直方圖呈現出來的數據分布,因此在繪制直方圖的時候需要多次嘗試改變組距
(2)注意y軸所代表的變量
y軸上的變量可以是頻次(數據出現了多少次)、頻率(頻次/總次數)、頻率/組數,不同的變量會讓直方圖描述的數據分布意義不同
四、直方圖的應用場景
1、用于表示分布情況
2、通過直方圖還可以觀察和估計哪些數據比較集中,異常或者孤立的數據分布在何處
例如:用戶年齡分布,商品價格分布
?