美文网首页
6.6 直方图

6.6 直方图

作者: 操作系统 | 来源:发表于2017-05-06 17:31 被阅读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

    相关文章

      网友评论

          本文标题:6.6 直方图

          本文链接:https://www.haomeiwen.com/subject/woqytxtx.html