且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

直方图(histogram)| 学习笔记

更新时间:2022-09-07 23:23:02

开发者学堂课程【Python 数据可视化库 Matplotlib 快速入门直方图(histogram)学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/606/detail/8843


直方图(histogram)


内容介绍

一、学习目标

二、直方图的介绍

三、直方图与柱状图的对比

四、直方图的绘制

五、直方图的应用场景


一、学习目标

(1)目标

应用 hist 实现直方图的绘制

知道直方图图的应用场景

(2)应用

电影时长分布


二、直方图介绍

直方图,形状类似柱状图却有着与柱状图完全不同的含义。直方图牵涉统计学的概念,首先要对数据进行分组,然后统计每个分组内数据元的数量。在坐标系中,横轴标出每个组的端点,纵轴表示频数,每个矩形的高代表对应的频数,称这样的统计图为频数分布直方图。


三、直方图与柱状图的对比

●柱状图是以矩形的长度表示每一组的频数或数量,其宽度(表示类别)则是固定的,利于较小的数据集分析。

●直方图描述的是一组数据的频次分布,是以矩形的长度表示每一组的频数或数量,宽度则表示各组的组距,因此其高度与宽度均有意义,利于展示大量数据集的统计结果。例如把年龄分成“0-5,5-10,.....80-85"17个组,统计一下中国人口年龄的分布情况。直方图有助于我们知道数据的分布情况,诸如众数、中位数的大致位置、数据是否存在缺口或者异常值。

1.直方图展示数据的分布,柱状图比较数据的大小。

这是直方图与柱状图最根本的区别。举个例子,有10个苹果,每个苹果重量不同。如果使用直方图,就展示了重量在0-10g 的苹果有多少个,10-20g 的苹果有多少个;如果使用柱状图,则展示每个苹果的具体重量。

所以直方图展示的是一组数据中,在你划分的区间里,这些数据的分布情况,但是我们不知道在一个区间里,单个数据的具体大小。上图展现了游客在博物馆的游览时间,其中,将近40%的游客仅逗留了0-10分钟。但是我们无法知道这些游客中,每个人具体的游览时间是多少。

2.直方图 X 轴为定量数据,柱状图X轴为分类数据。

在直方图中,X 轴上的变量是一个个连续的区间,这些区间通常表现为数字,例如代表苹果重量的“0-10g,10-20g....... 代表时间长度的“0-10min,10-20min..... 而在柱状图中,X 轴上的变量是一个个分类数据,例如不同的国家名称、不同的游戏类型。

直方图上的每根柱子都是不可移动的,X 轴上的区间是连续的、固定的。而柱状图上的每根柱子是可以随意排序的,有的情况下需要按照分类数据的名称排列,有的则需要按照数值的大小排列。

3.直方图柱子无间隔,柱状图柱子有间隔

因为直方图中的区间是连续的,因此柱子之间不存在间隙。而柱状图的柱子之间是存在间隔。

4.直方图柱子宽度可不一,柱状图柱子宽度须一致

柱状图柱子的宽度因为没有数值含义,所以宽度必须一致。但是在直方图中,柱子的宽度代表了区间的长度,根据区间的不同,柱子的宽度可以不同,但理论上应为单位长度的倍数。

例如,美国人口普查局(The U.S. Census Bureau)调查了12.4亿人的上班通勤时间,由于通勤时间在45-150分钟的人数太少,因此区间改为45 -60分钟、60-90分钟、90-150分钟,其他组距则均为5。

可以看到,Y 轴的数据为“人数/组距”,在这种情况下,每个柱子的面积相加就等于调查的总人数,柱子的面积就有了意义。


直方图(histogram)| 学习笔记


当上图的 Y 轴表达的是“区间人数/总人数/组距”,这个直方图就是我们初中学习的“频率分布直方图",频率指的是“区间数量/总数量"。在这样的直方图中,所有柱子的面积相加就等于1啦。



直方图(histogram)| 学习笔记


四、直方图绘制

需求:电影时长分布状况

现有250部电影的时长,希望统计出这些电影时长的分布状态(比如时长为100分钟到120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据?

(1)直方图绘制 api  

matplotlib.pyplot.hist(x, bins= =None, normed=None, **kwargs)

(注:normed 表示纵轴显示频率还是频数,软件版本问题,normed 还可以写成 density)

Parameters:

x : (n,) array or sequence of (n,) arrays

bins : integer or sequence or‘ auto', optional

组数

(2)绘制

①设置组距

②设置组数(通常对于数据较少的情况,分为5~12组,数据较多,更换图形显示方式)  

通常设置组数会有相应公式:组数=极差/组距= (max-min)/bins

例题

#需求:电影时长分布状况

#1、准备数据

time = [ 131,98,125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 111,...]

#2、创建画布

plt. figure(figsize=(20,8),dpi=80)

# 3、绘制直方图

distance = 2

group_ num = int( (max(time) - min(time)) / distance )

plt.hist(time, bins=group_ num, normed =True )

#修改x轴刻度

plt.xticks (range (min(time),max(time) + 2,distance) )

#添加网格

plt.grid( linestyle="--", alpha=0.5)

# 4、显示图像 plt. show( )

(3)直方图注意点

1.注意组距

组距会影响直方图呈现出来的数据分布,因此在绘制直方图的时候需要多次尝试改变组距。

2.注意Y轴所代表的变量

Y 轴上的变量可以是频次(数据出现了多少次)、频率(频次/总次数)、频率/组距,不同的变量会让直方图描述的数据分布意义不同。


五、直方图的应用场景

(1)用于表示分布情况

(2)通过直方图还可以观察和估计哪些数据比较集中,异常或者孤立的数据分布在何处

例如:用户年龄分布,商品价格分布