6.6 直方图
6.6.1 直方图简介
直方图(Histogram)是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
在质量管理中,需要预测并监控产品质量状况以及对质量波动进行分析,直方图就是一目了然地把这些问题图表化处理的工具。它通过对收集到的貌似无序的数据进行处理,来反映产品质量的分布情况,判断和预测产品质量及不合格率。
所以直方图又称质量分布图,它是表示资料变化情况的一种主要工具。用直方图可以解析出资料的规则性,比较直观地看出产品质量特性的分布状态,对于资料分布状况一目了然,便于判断其总体质量分布情况。
6.6.2 直方图绘制步骤
①集中和记录数据,求出其最大值和最小值。数据的数量应在100个以上,在数量不多的情况下,至少也应在50个以上。 我们把分成组的个数称为组数,每一个组的两个端点的差称为组距。
②将数据分成若干组,并做好记号。分组的数量在5-12之间较为适宜。
③计算组距的宽度。用最大值和最小值之差去除组数,求出组距的宽度。
④计算各组的界限位。各组的界限位可以从第一组开始依次计算,第一组的下界为最小值减去最小测定单位的一半,第一组的上界为其下界值加上组距。第二组的下界限位为第一组的上界限值,第二组的下界限值加上组距,就是第二组的上界限位,依此类推。
⑤统计各组数据出现频数,作频数分布表。
⑥作直方图。以组距为底长,以频数为高,作各组的矩形图。
6.6.3 直方图绘制实例
Matplotlib库提供了hist方法绘制直方图。按照以上绘制步骤,首先集中和记录数据,我们加载电影网站评分数据,示例代码:
import pandas as pd
import matplotlib.pyplot as plt
reviews = pd.read_csv("fandango_scores.csv")
cols = ['FILM', 'RT_user_norm', 'Metacritic_user_nom', 'IMDB_norm', 'Fandango_Ratingvalue']
norm_reviews = reviews[cols]
print(norm_reviews[:5])
显示结果
FILM RT_user_norm Metacritic_user_nom \
0 Avengers: Age of Ultron (2015) 4.3 3.55
1 Cinderella (2015) 4.0 3.75
2 Ant-Man (2015) 4.5 4.05
3 Do You Believe? (2015) 4.2 2.35
4 Hot Tub Time Machine 2 (2015) 1.4 1.70
IMDB_norm Fandango_Ratingvalue
0 3.90 4.5
1 3.55 4.5
2 3.90 4.5
3 2.70 4.5
4 2.55 3.0
通过结果,可以观察出数据值在0到5区间,然后统计每项分值出现的次数,并根据次数的多少进行排序。我们拟观察fandango_distribution网站评分数据,示例代码:
fandango_distribution = norm_reviews['Fandango_Ratingvalue'].value_counts()
fandango_distribution = fandango_distribution.sort_index()
print(fandango_distribution)
利用轴对象ax的hist方法快速绘制直方图,示例代码:
fig,ax = plt.subplots()
ax.hist(norm_reviews['Fandango_Ratingvalue'])
plt.show()
显示结果:
直方图1
我们可以利用hist方法中的bins参数将数据分成若干组,参数值即是划分的组数,默认值为10,我们设置为20,示例代码:
fig,ax = plt.subplots()
ax.hist(norm_reviews['Fandango_Ratingvalue'], bins=20)
plt.show()
显示结果:
直方图2
也可以通过hist方法中的range参数指定x轴的区间范围,示例代码:
fig,ax = plt.subplots()
ax.hist(norm_reviews['Fandango_Ratingvalue'], range=(0, 3))
plt.show()
显示结果:
直方图3
此外,利用orientation参数可以设置直方图的显示方式,默认是vertical即垂直显示,也可以水平显示,其值为horizontal,示例代码:
fig,ax = plt.subplots()
ax.hist(norm_reviews['Fandango_Ratingvalue'], orientation='horizontal', bins=20)
plt.show()
显示结果:
直方图4
也可以利用color和alpha分别设置直方图的颜色和透明度,示例代码:
fig,ax = plt.subplots()
ax.hist(norm_reviews['Fandango_Ratingvalue'], color='k', alpha=0.5, bins=20)
plt.show()
显示结果:
直方图5
最后,我们可以同一画布上绘制多个直方子图,对多家网站的电影评分数据进行数据对比,示例代码:
fig = plt.figure(figsize=(5,20))
ax1 = fig.add_subplot(4,1,1)
ax2 = fig.add_subplot(4,1,2)
ax3 = fig.add_subplot(4,1,3)
ax4 = fig.add_subplot(4,1,4)
ax1.hist(norm_reviews['Fandango_Ratingvalue'], bins=20, range=(0, 5))
ax1.set_title('Distribution of Fandango Ratings')
ax1.set_ylim(0, 50)
ax2.hist(norm_reviews['RT_user_norm'], 20, range=(0, 5))
ax2.set_title('Distribution of Rotten Tomatoes Ratings')
ax2.set_ylim(0, 50)
ax3.hist(norm_reviews['Metacritic_user_nom'], 20, range=(0, 5))
ax3.set_title('Distribution of Metacritic Ratings')
ax3.set_ylim(0, 50)
ax4.hist(norm_reviews['IMDB_norm'], 20, range=(0, 5))
ax4.set_title('Distribution of IMDB Ratings')
ax4.set_ylim(0, 50)
plt.show()
显示结果:
直方图6