利用Python进行异常值分析实例代码


Posted in Python onDecember 07, 2017

前言

异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值。常用检测方法3σ原则和箱型图。其中,3σ原则只适用服从正态分布的数据。在3σ原则下,异常值被定义为观察值和平均值的偏差超过3倍标准差的值。P(|x−μ|>3σ)≤0.003,在正太分布假设下,大于3σ的值出现的概率小于0.003,属于小概率事件,故可认定其为异常值。

异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。

异常值是指样本中的个别值,其数值明显偏离其余的观测值。异常值也称为离群点,异常值的分析也称为离群点分析。

(1)简单统计量分析

可以先对变量做一个描述性统计,进而查看哪些数据是不合理的。最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出了合理的范围。如客户年龄的最大值为199岁,则该变量的取值存在异常。

(2)3原则

如果数据服从正态分布,在3原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。在正态分布的假设下,距离平均值3之外的值出现的概率为P(|x-|>3)≤0.003,属于极个别的小概率事件。

如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。

(3)箱型图分析

箱型图提供了识别异常值的一个标准:异常值通常被定义为小于QL-1.5IQR或大于QU+1.5IQR的值。QL称为下四分位数,表示全部观察值中有四分之一的数据取值比它小;QU称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;IQR称为四分位数间距,是上四分位数QU与下四分位数QL之差,其间包含了全部观察值的一半。

箱型图依据实际数据绘制,没有对数据作任何限制性要求(如服从某种特定的分布形式),它只是真实直观地表现数据分布的本来面貌;另一方面,箱型图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的鲁棒性:多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不能对这个标准施加影响。由此可见,箱型图识别异常值的结果比较客观,在识别异常值方面有一定的优越性,如图3-1所示。

利用Python进行异常值分析实例代码

如下数据:

日期 2015/2/10 2015/2/11 2015/2/12 2015/2/13 2015/2/14

销量额 2742.8 3014.3 865 3036.8

我们对其进行异常值分析

import pandas as pd

catering_sale = 'data2.xls' #餐饮数据
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列

import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

plt.figure() #建立图像
p = data.boxplot() #画箱线图,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
y = p['fliers'][0].get_ydata()
y.sort() #从小到大排序,该方法直接改变原对象

#用annotate添加注释
#其中有些相近的点,注解会出现重叠,难以看清,需要一些技巧来控制。
#以下参数都是经过调试的,需要具体问题具体调试。
for i in range(len(x)): 
 if i>0:
 plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
 else:
 plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))

plt.show()

结果如下:

利用Python进行异常值分析实例代码

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python实现优先级队列结构的方法详解
Jun 02 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
python 获取网页编码方式实现代码
Mar 11 Python
浅谈python正则的常用方法 覆盖范围70%以上
Mar 14 Python
python实现word 2007文档转换为pdf文件
Mar 15 Python
python opencv检测目标颜色的实例讲解
Apr 02 Python
python中时间、日期、时间戳的转换的实现方法
Jul 06 Python
Python使用Excel将数据写入多个sheet
May 16 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
python 实现端口扫描工具
Dec 18 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 Python
4种非常实用的python内置数据结构
Apr 28 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 #Python
python实现对excel进行数据剔除操作实例
Dec 07 #Python
Python编程实现使用线性回归预测数据
Dec 07 #Python
机器学习10大经典算法详解
Dec 07 #Python
机器学习的框架偏向于Python的13个原因
Dec 07 #Python
python编程线性回归代码示例
Dec 07 #Python
基于Django的ModelForm组件(详解)
Dec 07 #Python
You might like
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
遗传算法之Python实现代码
2017/10/10 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
估算杭州有多少软件工程师
2015/08/11 面试题
聚网科技C++面试笔试题
2015/09/01 面试题
法律顾问服务方案
2014/05/15 职场文书
团队激励口号
2014/06/06 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
同志主要表现材料
2014/08/21 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
房屋买卖协议样本
2014/11/16 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
2015国庆节宣传语
2015/07/14 职场文书
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis