6.6 直方图

2017-05-06  本文已影响0人  操作系统

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
上一篇下一篇

猜你喜欢

热点阅读