pandas - 异常值处理
异常值概念:是指那些远离正常值的观测,即“不合群”观测。异常值的出现一般是人为的记录错误或者是设备的故障等,异常值的出现会对模型的创建和预测产生
严重的后果。当然异常值也不一定是坏事,有些情况下,通过寻找异常值就能够给业务带来良好的发展,如销毁“钓鱼”网站,关闭“薅羊毛”用户的权限等。
异常值的判定方法:
1.n个标准差法
2.箱线图法
标准差法,就是用以样本均值+样本标准差为基准,如果样本离平均值相差2个标准差以上的就是异常值
箱线图法:以上下四分位作为参考, x > Q3+nIQR 或者 x < Q1 - nIQR 简单地理解,就是如果样本值不在上下四分位+标准差范围内,就是异常值
两种异常值判定是,如数据近似服从正态分布是,优先选择n个标准差法,因为数据的分布相对比较对称:否则优先选择箱线图法,因为分位数并不会受极端值的影响。
异常数据处理方法:
1.删除法(前提是异常观测的比例不能太大)
2.替换法(可以考虑使用低于判别上下限的最大值或最小值,均值或中位数替换等)
python处理异常值实例:
原数据(部分):

代码:
import pandas as pd
sunspots = pd.read_table(r'D:\sunspots.csv',sep = ',')
xbar = sunspots.counts.mean()
xstd = sunspots.counts.std()
print('标准差法异常值上限检测:\n',any(sunspots.counts > xbar + 2 * xstd))
print('标准差法异常值下限检测:\n',any(sunspots.counts < xbar - 2 * xstd))
#异常值 箱线图法
Q1 = sunspots.counts.quantile(q = 0.25)
Q3 = sunspots.counts.quantile(q = 0.75)
IQR = Q3 -Q1
print('箱线图法异常值上限检测:\n',any(sunspots.counts > Q3 + 1.5*IQR))
print('箱线图法异常值下限检测:\n',any(sunspots.counts < Q1 - 1.5*IQR))
out:

如上结果所示,不管是标准差检验法还是箱线图法,都发现太阳黑子数据中存在异常值,而且异常值都是超过上限临界值的。接下来,通过绘制太阳黑子数量的直方图和核密度曲线图,用于检测数据是否近似服从正态分布,进而选择一个最终的异常值判别方法:
import matplotlib.pyplot as plt
plt.style.use('ggplot')
sunspots.counts.plot(kind='hist',bins = 30,density = True)
sunspots.counts.plot(kind='kde')
plt.show()

如上图所示,不管是直方图还是核密度曲线,所呈现的数据分布形状都是有偏的,并且属于右偏。基于此,这里选择箱线图法来判定太阳黑子数据中的那些异常值。接下来要做的就是选用删除法或替换法来处理这些异常值,删除法就跟上篇我们讲过的一样处理方式,下面介绍一下替换法,即使用上限下限的最大最小值来替换,代码如下:(接异常值检测部分代码)
print('异常值替换前的数据统计特征:\n',sunspots.counts.describe())
UL = Q3 + 1.5 * IQR
print('判别异常值的上限临界值:\n',UL)
replace_vaule = sunspots.counts[sunspots.counts < UL].max()
print('用以替换异常值的数据:\n',replace_vaule)
sunspots.counts[sunspots.counts > UL] = replace_vaule
print('异常值替换后的数据统计特征:\n',sunspots.counts.describe())
out:

经过判别异常值,得知,如果一年内太阳黑子超过 148.85时即为异常值年份,对于这些年份的异常值使用141.7替换。
本篇知识导图:

pandas - 异常值处理的更多相关文章
- Pandas异常值处理
import pandas as pd #生成异常数据 df=pd.DataFrame({'col1':[1,120,3,5,2,12,13], 'col2':[12,17,31,53,22,32,4 ...
- Pandas数据的去重,替换和离散化,异常值的检测
数据转换 移除重复数据 import pandas as pd import numpy as np from pandas import Series data = pd.DataFrame( {' ...
- pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)
pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...
- 【转载】使用pandas进行数据清洗
使用pandas进行数据清洗 本文转载自:蓝鲸的网站分析笔记 原文链接:使用python进行数据清洗 目录: 数据表中的重复值 duplicated() drop_duplicated() 数据表中的 ...
- Pandas数据处理实战:福布斯全球上市企业排行榜数据整理
手头现在有一份福布斯2016年全球上市企业2000强排行榜的数据,但原始数据并不规范,需要处理后才能进一步使用. 本文通过实例操作来介绍用pandas进行数据整理. 照例先说下我的运行环境,如下: w ...
- 数据分析之Pandas
一.Pandas介绍 1.介绍 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. ...
- Pandas系列(三)-缺失值处理
内容目录 1. 什么是缺失值 2. 丢弃缺失值 3. 填充缺失值 4. 替换缺失值 5. 使用其他对象填充 数据准备 import pandas as pd import numpy as np in ...
- 【机器学习_8】pandas
背景 关于同一个话题,不同作者也有不同行文结构.但要真正理解并会用,在我的经验里,是必须要自己重新组织的. 本文是基于以往看过的资料,从自身数据处理应用的角度出发,重新组织pandas应用结构,希望能 ...
- Pandas 拼接操作 数据处理
数据分析 生成器 迭代器 装饰器 (两层传参) 单例模式() ios七层 io多路 数据分析:是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 pandas的拼接操作 p ...
随机推荐
- 使用Spring Validation优雅地校验参数
写得好的没我写得全,写得全的没我写得好 引言 不知道大家平时的业务开发过程中 controller 层的参数校验都是怎么写的?是否也存在下面这样的直接判断? public String add(Use ...
- Python大礼包-安装视频+pycharm编译器|Mac版本+64位+32位版本pycharm安装包+python安装|内附网盘链接带提取码
pycharm安装包+环境安装打包带走,附带视频教程与pdf教程. (下载链接在本文最下方) 多的不说,直接上图: Python大礼包-安装视频+pycharm编译器详细文件: 点击此处进入下载地址 ...
- gc 模块常用函数
""" 1.gc.set_debug(flags) 设置gc的debug日志,一般设置为gc.DEBUG_LEAK 2.gc.collect([generation]) ...
- PHP date_modify() 函数
------------恢复内容开始------------ 实例 修改时间戳.增加 15 天: <?php$date=date_create("2013-05-01");d ...
- 小程序中 radio 的一个坑,到底 checked 该赋什么值?
https://blog.csdn.net/henryhu712/article/details/83059365
- zabbix配置自定义监控
目录 zabbix配置自定义监控项---进程监控 1. 编写获取进程状态的脚本 2. 修改配置文件,添加自定义key 3. 配置监控项 4. 添加触发器 5. 媒介和动作 6. 触发并验证 zabbi ...
- 70道Spring面试题
1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Jav ...
- static关键字设计原理
语法只是表象,原理才是关键!!! 灵魂static关键字 Java规定:方法只能由对象来调用. 换句话来说,在面向对象的思维下,方法与对象存在一种强耦合. 方法在没有对象的情况下无法调用,于是上帝派来 ...
- c++ explict
explicit 用于一个参数的构造函数:防止隐式转换. 什么意思呢? myClass(int x); 这是个构造函数 我们可以使用 myClass a(4); 或 myClass a=4;来调用它 ...
- 没用过消息队列?一文带你体验RabbitMQ收发消息
人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 先给大家说声抱歉,最近一周都没有发文,有一些比较要紧重要的事需要处理. 今天正好得空,本来说准备写SpringIOC相关的东西,但是发现想 ...