R语言箱线图(boxplot)四分位算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言箱线图(boxplot)四分位算法相关的知识,希望对你有一定的参考价值。

参考技术A 箱线图(Boxplot)也称箱须图(Box-whisker Plot),是利用数据中的五个统计量:最小值、第一四分位数、中位数、第三四分位数与最大值来描述数据的一种方法。它也可以粗略地看出数据是否具有有对称性,分布的离散程度等信息;特别适用于对几个样本的比较。

注:四分位数(Quartile),即统计学中,把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

  第一四分位数 (Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。

  第二四分位数 (Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字。

  第三四分位数 (Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。

  第三四分位数与第一四分位数的差距又称四分位距(InterQuartile Range,IQR)。

R语言中计算方法:

quantile函数直接计算四分位:

例如:data = c(1,2,3,4,5,6.2,7,8,9,10)

quantile(data)   #其结果如下

0%       25%       50%       75%       100%

1.00      3.25       5.60        7.75      10.00

其中0%:最小值;25%:第一四分位数Q1;50%:中位数;75%:第三四分位数;100%:最大值。

其计算方法为:

1. 排序,从小到大排列data;

2. 计算分位数的位置;pos = 1+ (n-1)*p,n为数据的总个数,p为0-1之间的值

3. 给出分位数

注意:另一种分位数的计算方法为:其他与前面的一致。但是分位数位置的计算采用:pos = (n+1)*p,n为数据的总个数,p为0-1之间的值。

四分位数的计算方法没有一个统计的标准,如果对此计算有要求的,需要注意函数的具体算法。

另外,boxplot中存在异常值,其规定标准如下:

当数据中的值大于或小于箱体的四分位距IQR的1.5倍时,认定为异常值。

就是说当某值大于(Q3+1.5*IQR)或小于(Q1-1.5*IQR)时,处理时会认定为异常值。

箱线图法详解及matplotlib画箱线图以及boxplot参数详解

箱线图法是一种检测异常值的常用方法,由于其对数据分布没有任何假设,便使得它能够适用于几乎任何的异常值检测场景。

1977年,美国著名数学家JohnW. Tukey首先在他的著作《ExploratoryDataAnalysis》中介绍了箱形图。其相关定义如下:
(1) 四分位距(Inter quartile range,简记IQR)指的是下四分位数(Q1)和上四分位数(Q3)之间的距离。
(2) Inner feces指的是落在区间[Q1-1.5*IQR, Q3+1.5*IQR]内部的区域。
(3) Outer fences指的是落在区间[Q1-3*IQR, Q3+3*IQR]外部的区域。通常落在Inner fences和Ourer fences之间的点可能是异常点,落在Outer fences之外的极值点是异常值点。实际情况中异常值大多数都是少数,对上下四分位数的扰动比较小,因此这两个统计量十分健壮,此方法数据分布没有任何假设,因此适用性十分广泛,对极值点更加稳健。

箱线图原理还是挺简单的,想画出好看的箱线图还是需要费点心思的。
话不多说贴上代码:

# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

data = np.array([1,3,4,5,10,15,30])

fig = plt.figure(figsize=(5, 5), dpi=100)  # 调整画布大小,清晰度
fig = fig.add_subplot(111)  # 画布1
fig.boxplot((data, data), # 数据
            positions=[1, 4],  # 放置在x轴的位置 
            widths=1.5,  # 指定箱线图的宽度
            notch=False, # 是否是凹口的形式展现箱线图,默认非凹口
            vert=True, # 是否需要将箱线图垂直摆放,默认垂直摆放
            meanline=True,  # 是否用线的形式表示均值,默认用点来表示
            patch_artist=True,  # 是否填充箱体
            showmeans=True, # 是否显示均值
            showcaps=True, # 是否显示箱线图顶端和末端的两条线,默认显示
            showfliers=True,  # 是否显示异常值
            showbox=True, # 是否显示箱线图的箱体,默认显示
            meanprops = "color": "black", "linewidth": 1.5, # 设置平均线的属性,如线的类型、粗细等
            medianprops="color": "red", "linewidth": 0.5,  # 设置中位数的属性,如线的类型、粗细等
            boxprops="facecolor": "C0", "edgecolor": "black","linewidth": 0.5, "alpha":0.4,  # 设置箱体的属性,如边框色,填充色等
            whiskerprops="color": "black", "linewidth": 1.5, "alpha":0.8, # 设置须的属性,如颜色、粗细、线的类型等
            capprops="color": "C0", "linewidth": 1.5, # 设置箱线图顶端和末端线条的属性,如颜色、粗细等
            sym="+",  # 异常点的形状
                )

fig.set_xticks([1, 4])  # 对应坐标1 4的位置换成下面的标签
fig.set_xticklabels(["箱线图", "箱线图2"])
plt.show()

许多的参数都直接放在代码里面解释了,可以好好看看,调试调试应该就懂了。
配上运行图:

这图不是很好看,但是调整那些参数可以让好看变成一种可能。

以上是关于R语言箱线图(boxplot)四分位算法的主要内容,如果未能解决你的问题,请参考以下文章

R语言 箱线图

箱线图法详解及matplotlib画箱线图以及boxplot参数详解

关R语言实战中箱线图关于异常值理解的问题

箱线图(boxplot)简介与举例

R语言可视化:箱线图绘制

通过箱线图判断偏向