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

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

时间:2022-08-30 13:11:07浏览次数:89  
标签:线图 None plt Python 数据 之箱 四分 异常

一、介绍

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

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

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

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

  • 下四分位数:25%分位点所对应的值(Q1)
  • 中位数:50%分位点对应的值(Q2)
  • 上四分位数:75%分位点所对应的值(Q3)
  • 上须:Q3+1.5(Q3-Q1)
  • 下须:Q1-1.5(Q3-Q1)

其中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,数据,之箱,四分,异常
From: https://www.cnblogs.com/hider/p/16638918.html

相关文章

  • 零基础玩转Python Flask框架-学完可就业 笔记
    P5.1.Flask使用app.config来进行对象配置app.config['SECRET_KEY']="xxx"2.可以把配置项目放到单独一个文件里面通过,app.config.from_object()来加载setting.pySEC......
  • Python 使用wmi获取远程端电脑的磁盘使用情况
    安装wmi包pipinstallwmi说明:执行上面命令会自动安装依赖包pywin32代码演示importjsonasJSONimportreimportparamikoimportsudsfromsuds.wsseimport......
  • Python基础语法知识
    3、python基础语法知识3.1变量1.什么是变量?可以变化的量2.为什么要有变量?程序去执行一种状态,并且是可以变化的1.变量的使用原则:先定义,后使用name='hello'#定义pr......
  • Python基础
    Python1、基础知识1.1编程语言什么是语言?为什么要有编程语言?什么是编程?为什么要编程?编程语言的本质就是一门语言,是人与计算机沟通的一种介质。人与人之间......
  • Python--自动将文件分类归入文件夹
    转载:(63条消息)Python--自动将文件分类归入文件夹_JavaNewMans的博客-CSDN博客_python文件夹分类   ##推荐(63条消息)【python】将不同后缀的文件分开到不同文......
  • python实现常量类
    const有什么好处?最直接的好处是,防止被二次修改导致整个程序崩掉!第一种方法,使用enum来定义变量,防止串改.fromenumimportEnum,unique#若要不能定义相同的成员值......
  • Python使用gdb进行debug的方法
    准备工作:1、必须安装gdb,一般系统默认安装过了,未安装的根据系统使用不同命令安装,比如yuminstallgdb,也可以用rpm命令进行安装2、必须有一个携带符号表的Python,版本与要......
  • python print居中-靠右-靠左输出
    1 居中输出   需要使用center函数使用center函数,需要str类型的数据。width参数:长度,需要填一个int类型的参数fillchar参数:两边填充的字符,需要一个str类型的参数(可以......
  • Python入门系列(五)一篇搞懂python语句
    If语句elif关键字是pythons表示“如果前面的条件不为真,那么试试这个条件”。Theelsekeywordcatchesanythingwhichisn'tcaughtbytheprecedingconditions.a=......
  • [CISCN2019 华北赛区 Day1 Web2]ikun-1|python反序列化
    考点:JWT身份伪造、pythonpickle反序列化、逻辑漏洞1、打开之后首页界面直接看到了提示信息,信息如下:2、那就随便注册一个账号进行登录,然后购买lv6,但是未发现lv6,那就查看......