编程语言
首页 > 编程语言> > Python学习笔记:异常值检测之箱线图

Python学习笔记:异常值检测之箱线图

作者:互联网

一、介绍

箱线图也称箱须图、箱形图、盒图,用于反映一组或多组连续型定量数据分布的中心位置和散布范围。箱形图包含数学统计量,不仅能够分析不同类别数据各层次水平差异,还能揭示数据间离散程度、异常值、分布差异等等。

1977年,美国著名数学家 John W. Tukey 首先在他的著作 《Exploratory Data Analysis》 中介绍了箱形图。

箱线图(Box Plot)是通过数据集的四分位数形成的图形化描述,是一种非常简单,而且有效的可视化离群点的方法。

上下须为数据分布的边界,只要高于上须,或者是低于下须的数据点,都认为是离群点或异常值。

其中Q3-Q1表示四分位,上四分位数与下四分位数的差距又称四分位距(interquartile range, IQR)。

箱体包含 50% 的数据,因此,箱子的高度在一定程度上反映了数据的波动程度

二、价值

箱形图最大的优点就是不受异常值的影响,能够准确稳定地描绘出数据的离散分布情况,同时也利于数据的清洗。

1.直观明了地识别数据中的异常值

箱线图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的耐抗性,多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不会影响箱形图的数据形状,箱线图识别异常值的结果比较客观。由此可见,箱线图在识别异常值方面有一定的优越性。

2.利用箱线图判断数据的偏态和尾重

对于标准正态分布的样本,只有极少值为异常值。异常值越多说明尾部越重,自由度越小(即自由变动的量的个数)。

而偏态表示偏离程度,异常值集中在较小值一侧,则分布呈左偏态;异常值集中在较大值一侧,则分布呈右偏态。

3.利用箱线图比较数据的形状

同一数轴上,不同数据的箱线图并行排列,几批数据的中位数、尾长、异常值、分布区间等形状信息便昭然若揭。

4.其他局限性

但箱形图也有他的局限性。比如:

三、plt.boxplot详解

plt.boxplot(x,                # 指定要绘制箱线图的数据
            notch=None,       # 是否是凹口的形式展现箱线图,默认非凹口;
            sym=None,         # 指定异常点的形状,默认为+号显示;
            vert=None,        # 是否需要将箱线图垂直摆放,默认垂直摆放;
            whis=None,        # 指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
            positions=None,   # 指定箱线图的位置,默认为[0,1,2…];
            widths=None,      #指定箱线图的宽度,默认为0.5;
            patch_artist=None,# 是否填充箱体的颜色;
            meanline=None,    # 是否用线的形式表示均值,默认用点来表示;
            showmeans=None,   # 是否显示均值,默认不显示;
            showcaps=None,    # 是否显示箱线图顶端和末端的两条线,默认显示;
            showbox=None,     # 是否显示箱线图的箱体,默认显示;
            showfliers=None,  # 是否显示异常值,默认显示;
            boxprops=None,    # 设置箱体的属性,如边框色,填充色等;
            labels=None,      # 为箱线图添加标签,类似于图例的作用;
            flierprops=None,  # 设置异常值的属性,如异常点的形状、大小、填充色等;
            medianprops=None, # 设置中位数的属性,如线的类型、粗细等;
            meanprops=None,   # 设置均值的属性,如点的大小、颜色等;
            capprops=None,    # 设置箱线图顶端和末端线条的属性,如颜色、粗细等;
            whiskerprops=None # 设置须的属性,如颜色、粗细、线的类型等;
            )

四、Python实操画图

1.简单例子

# 简单例子
import matplotlib.pyplot as plt
x = [1,2,3,5,6,8,9,15] # 数据
plt.boxplot(x)         # 默认垂直显示
plt.boxplot(x, vert=False)  # 水平显示
plt.show()

2.同时画多个

import matplotlib.pyplot as plt
x = [1,2,3,5,6,8,9,15] # 数据
y = [3,5,7,9,5,1,2]
z = [5,1,3,4,7]
plt.boxplot((x, y, z), labels=('x', 'y', 'z'))
plt.show()

3.数据框画图——Pandas自带

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame({
    'a':range(10),
    'b':range(12, 22),
    'c':np.random.randint(1, 10, 10)
    })
df.boxplot() # 按列画图
df.plot.box(title='Box Plot')  # 也可以 设置标题
plt.show()

4.数据框换图——matplotlib

plt.boxplot(x=df.values, labels=df.columns, whis=1.5)
plt.show()

5.另外一个例子

import matplotlib.pyplot as plt
# 设置中文和负号正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
# 设置图形的显示风格
plt.style.use('ggplot')
# 绘图:daily_Ionset_r_c1_predicted的箱线图

# 数据
x = [1200, 1300, 1400, 500,1500, 1600, 1700, 1800, 1900, 2000, 2100,4000] 

# 画图
plt.boxplot(x=x,
            patch_artist=True, # 箱体颜色
            showmeans=True, # 均值
            boxprops = {'color':'black', 'facecolor':'#9999ff'}, # 设置箱体属性,填充色和边框色 
            flierprops = {'marker':'o','markerfacecolor':'red','color':'black'}, # 设置异常值属性,点的形状、填充色和边框色 
            meanprops = {'marker':'D','markerfacecolor':'indianred'}, # 设置均值点的属性,点的形状、填充色 
            medianprops = {'linestyle':'--','color':'orange'}) # 设置中位数线的属性,线的类型和颜色 

# 设置y轴范围
plt.ylim(0, 5000)

# 保存
plt.savefig(r'./xxx.png', bbox_inches='tight') # 裁剪掉图表多余的空白区域

# 显示
plt.show()

参考链接:不会数学统计没关系——5分钟教你轻松掌握箱线图 | 图表家族#24

参考链接:数据清洗之异常值处理的常用方法

参考链接:5分钟包你搞懂箱形图分析!

参考链接:用python绘制箱线图

参考链接:箱线图(Python代码)

标签:线图,None,plt,Python,数据,之箱,四分,异常
来源: https://www.cnblogs.com/hider/p/16638918.html