zoukankan      html  css  js  c++  java
  • 箱线图(boxplot)简介与举例


    简述:

      盒图是在1977年由美国的统计学家约翰·图基(John Tukey)发明的。它由五个数值点组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(max)。也可以往盒图里面加入平均值(mean)。如下图。下四分位数、中位数、上四分位数组成一个“带有隔间的盒子”。上四分位数到最大值之间建立一条延伸线,这个延伸线成为“胡须(whisker)”。

      由于现实数据中总是存在各式各样地“脏数据”,也成为“离群点”,于是为了不因这些少数的离群数据导致整体特征的偏移,将这些离群点单独汇出,而盒图中的胡须的两级修改成最小观测值与最大观测值。这里有个经验,就是最大(最小)观测值设置为与四分位数值间距离为1.5个IQR(中间四分位数极差)。即:

    IQR = Q3-Q1,即上四分位数与下四分位数之间的差,也就是盒子的长度。

    • 最小观测值为min = Q1 - 1.5*IQR,如果存在离群点小于最小观测值,则胡须下限为最小观测值,离群点单独以点汇出。如果没有比最小观测值小的数,则胡须下限为最小值。
    • 最大观测值为max = Q3 -1.5*IQR,如果存在离群点大于最大观测值,则胡须上限为最大观测值,离群点单独以点汇出。如果没有比最大观测值大的数,则胡须上限为最大值。
    通过盒图,在分析数据的时候,盒图能够有效地帮助我们识别数据的特征:
    1.  直观地识别数据集中的异常值(查看离群点)。
    2.  判断数据集的数据离散程度和偏向(观察盒子的长度,上下隔间的形状,以及胡须的长度)。

    实例:

    12位商学院毕业生月起薪的样本在这里按升序重复如下。

      2710 2755 2850 | 2880 2880 2890 | 2920 2940 2950 | 3050 3130 3325

      Q1 = 2865 Q2 = 2905(中位数) Q3 = 3000

      中位数是2 905,第一个四分位数Q1 = 2865,第三个四分位数Q3 = 3000。检查这些数据,最小值为2710,最大值为3325。因此,薪水数据的五数概括数据为2710、2865、2905、3000、3325。大约1/4或25%的观察值在五数概括的相邻两个数字之间。

      箱线图是在五数概括的基础上对数据进行描述的图形方法。绘制箱线图的关键是计算中位数、四分位数Q1Q3。也可以使用四分位数全距IQR = Q3Q1。图1是月起薪数据的箱线图。

      绘制箱线图的步骤如下:

      1.画一只箱子,箱子两端分别位于第一个和第三个四分位数上。对于薪水数据来说,Q1 = 2865以及Q3 = 3000。这个箱子包括中间50%的数据。

      2.在箱子中位数(薪水数据是2905)的位置画一条垂直线。

      3.用四分位数全距IQR = Q3Q1,确定限制线的位置。箱线图的上、下限制线分别在比Q1低1.5(IQR)和比Q3高1.5(IQR)的位置上。对于薪水数据来说,IQR = Q3Q1 = 3000 − 2865 = 135。因此,限制线的位置在2865 − 1.5(135) = 2662.5和3000 + 1.5(135) = 3202.5处。两条限制线以外的数据可以认为是异常值。

      4.图1中的虚线称为触须线。触须线从箱子两端开始绘制,直至第3步中计算的限制线内的最小值和最大值。因此,薪水数据的触须线分别在2 710和3 130处结束。

      5.最后,每个异常值的位置都用星号“*”表示出来。在图1中,我们可以看到一个异常值,即3325。

      Image:图1 起薪数据带有上下限制线的箱线图.jpg

      在图1中,我们画出了表示上下界限位置的直线。画这些线是为了说明如何计算薪水数据的限制线并标出其位置。虽然限制线通常要计算出来,但是在箱线图中一般并不标示出来。图2显示了薪水数据的常见箱线图的形状。

      Image:图2 起薪数据的箱线图.jpg

    seaborn(sns)调用举例:

    import seaborn as sns
    sns.set_style("whitegrid")
    tips = sns.load_dataset("tips")
    # 绘制箱线图
    ax = sns.boxplot(x=tips["total_bill"])
    # 竖着放的箱线图,也就是将x换成y
    ax = sns.boxplot(y=tips["total_bill"])

    Ref:

    1.盒图(boxplot): http://www.blogjava.net/norvid/articles/317235.html

    2. 箱线图: http://wiki.mbalib.com/wiki/%E7%AE%B1%E7%BA%BF%E5%9B%BE#_ref-1

    3. Seaborn(sns)官方文档学习笔记(第五章 分类数据的绘制) https://zhuanlan.zhihu.com/p/27683042

    4. python seaborn画图 : http://blog.csdn.net/suzyu12345/article/details/69029106

  • 相关阅读:
    位集合
    多线程进行http请求
    mysql--测试前缀索引能否用于order by 或者 group by
    用mysql触发器实现log记录
    源码安装mysql
    C语言:void指针
    C语言:枚举类型
    C语言:结构体与数组
    C语言:联合变量
    Linux 基础入门
  • 原文地址:https://www.cnblogs.com/space-place/p/7643480.html
Copyright © 2011-2022 走看看