python:matplotlib.pyplot绘制箱线图并 检测异常值(基础一) 您所在的位置:网站首页 箱形图Python代码 python:matplotlib.pyplot绘制箱线图并 检测异常值(基础一)

python:matplotlib.pyplot绘制箱线图并 检测异常值(基础一)

2024-07-15 10:28| 来源: 网络整理| 查看: 265

在数据处理中,箱线图常用来检测异常值。

数据文件data01.xls

1.绘制箱线图使用boxplot()函数

import pandas as pd import matplotlib.pyplot as plt # 读取excel文件 file_01 = pd.read_excel("data01.xls") fig = plt.figure(figsize=(16, 8)) d1 = file_01['变量1'] d2 = file_01['变量2'] d3 = file_01['变量3'] d4 = file_01['变量4'] label = '变量1', '变量2', '变量3', '变量4' plt.boxplot([d1, d2, d3, d4], labels=label) # label设置横轴每个箱图对应的横坐标 plt.xticks(fontproperties='KaiTi') plt.xlabel('变量', fontproperties='KaiTi') plt.ylabel('变量值', fontproperties='KaiTi') plt.show()

 2.使用vert=False:水平箱线图;showmeans=True:显示均值

# vert=False:水平箱线图;showmeans=True:显示均值 plt.boxplot([d1, d2, d3, d4], labels=label, vert=False, showmeans=True)

3.notch:是否是凹口的形式展现箱线图;sym:异常点的形状;还可设置箱体的颜色,箱体边框的颜色等,比较简单,不过多叙述

import pandas as pd import matplotlib.pyplot as plt # 读取excel文件 file_01 = pd.read_excel("data01.xls") fig = plt.figure(figsize=(16, 8)) d1 = file_01['变量1'] d2 = file_01['变量2'] d3 = file_01['变量3'] d4 = file_01['变量4'] label = '变量1', '变量2', '变量3', '变量4' # vert=False:水平箱线图;showmeans=True:显示均值 # plt.boxplot([d1, d2, d3, d4], labels=label, vert=False, showmeans=True) # notch:是否是凹口的形式展现箱线图;sym:异常点的形状; # plt.boxplot([d1, d2, d3, d4], labels=label, vert=False, showmeans=True, notch=True, sym='*') # 1.箱体颜色的设置需配合 patch_artist = True 使用 # 2.boxprops:color箱体边框色,facecolor箱体填充色; plt.boxplot([d1, d2, d3, d4], labels=label, patch_artist=True, vert=False, boxprops={'color': 'orangered', 'facecolor': 'pink'}) # plt.boxplot([d1, d2, d3, d4], labels=label) # label设置横轴每个箱图对应的横坐标 plt.yticks(fontproperties='KaiTi') plt.ylabel('变量', fontproperties='KaiTi') plt.xlabel('变量值', fontproperties='KaiTi') plt.show()

 

 4.在使用箱线图查看异常值时,需要计算计算上四分位数和下四分数,基于1.5倍的四分位差计算上限和下限对应的值

箱线图简图:

 假设有一组n个数据从小到大排列,箱体中包含了非异常数据的50%,上限和上四分位数之间为非异常数据的25%,下限和下四分位数之间为非异常数据的25%。上下限的数据为非异常数据的最大值和最小值。

首先可以计算上四分位数(占总数居的75%)和下四分位数(占总数居的25%),使用quantile

# 计算上四分位数和下四分数 # 上四分位数,d4接收 pandas.Series 数据格式 Q3 = d4.quantile(0.75) # 下四分位数 Q1 = d4.quantile(0.25)

再计算基于1.5倍的四分位差计算上限和下限对应的值

# 基于1.5倍的四分位差计算上限和下限对应的值 # 上限值 up_value = Q3 + 1.5 * (Q3 - Q1) # 下限值 low_value = Q3 - 1.5 * (Q3 - Q1)

 这里以excel文件中变量4对应的数据为例,需要注意的是在上下四分位数,d4接收的是pandas.Series 数据格式

import pandas as pd import matplotlib.pyplot as plt # 读取excel文件 file_01 = pd.read_excel("data01.xls") fig = plt.figure(figsize=(8, 8)) d4 = file_01['变量4'] plt.boxplot([d4], sym='*') plt.xticks(fontproperties='KaiTi') plt.xlabel('变量', fontproperties='KaiTi') plt.ylabel('变量值', fontproperties='KaiTi') # 删除异常值,调用warnings模块忽略警告 """可在boxplot参数中加入: showfliers=False""" # 计算上四分位数和下四分数 # 上四分位数,d4接收 pandas.Series 数据格式 Q3 = d4.quantile(0.75) # 下四分位数 Q1 = d4.quantile(0.25) print('Q3:', Q3, 'Q1:', Q1) # 基于1.5倍的四分位差计算上限和下限对应的值 # 上限值 up_value = Q3 + 1.5 * (Q3 - Q1) # 下限值 low_value = Q3 - 1.5 * (Q3 - Q1) print('up_value:', up_value, 'low_value', low_value) # low和up为d4中小于下限和大于上限输出的bool值 low = d4 < low_value up = d4 > up_value print(low, up) plt.show()

 输出箱线图为:

 得到上四分位数(占总数居的75%)和下四分位数(占总数居的25%)分别为4.0和2.0,基于1.5倍的四分位差计算上限和下限对应的值分别为7.0和1.0

输出的low对应的结果,可见第10 行对应的bool值为true,说明在表格中,第10行的数据比下限还小,为一个异常值。(up对应的结果同理,不在重复)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有