1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python:matplotlib.pyplot绘制箱线图并 检测异常值(基础一)

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

时间:2020-04-29 15:02:16

相关推荐

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

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

数据文件data01.xls

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

import pandas as pdimport 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 pdimport 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 pdimport 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_valueup = d4 > up_valueprint(low, up)plt.show()

输出箱线图为:

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。