本文为博主在处理异常数据的笔记与总结,如有理解不当之处,欢迎指正。

个人博客连接: JMX的个人博客

本篇文章主要是解决单变量数据集中的异常点分析,本代码中对异常数据的处理方式为删除,剔除异常数据,也可以适当修改,对异常数据进行自己需要的操作。

1. 四分位法

原理介绍:
首先计算出第一四分位数(Q1)、中位数(第二四分位数Q2)、第三四分位数(Q3)。
中位数也就是将一组数字按从小到大的顺序排序后,处于中间位置(也就是50%位置)的数字。
同理,第一四分位数、第三四分位数是按从小到大的顺序排序后,处于25%、75%的数字。
四分位法找出异常数据是利用:

令 I Q R = Q 3 − Q 1 IQR=Q3−Q1 IQR=Q3−Q1,那么 Q 3 + 1.5 ( I Q R ) Q3+1.5(IQR) Q3+1.5(IQR) 和 Q 1 − 1.5 ( I Q R ) Q1−1.5(IQR) Q1−1.5(IQR)之间的值就是可接受范围内的数值,这两个值之外的数认为是异常值,该原理类似于正态分布中异常数据的检测,只是将阈值变成了由四分位点求得。

def detect_outliers_4div(df):outlier_indices = []raw = dftry:# 1st quartile (25%)Q1 = np.percentile(df, 25)# 3rd quartile (75%)Q3 = np.percentile(df, 75)# Interquartile range (IQR)IQR = Q3 - Q1# outlier stepoutlier_step = 1.5 * IQRfor nu in df:if (nu < Q1 - outlier_step) | (nu > Q3 + outlier_step):df.remove(nu)except:return rawreturn df

2. 基于标准差的检测方法

假设数据是正态分布的,由概率论中的知识我们可以知道:

  • 95.449974%的数据在平均数左右两个标准差范围内
  • 99.730020%的数据在平均数左右三个标准差范围内
  • 99.993666%的数据在平均数左右四个标准差范围内

    以95%作为示例阈值,来剔除异常点。
def detect_outliers_std(df,threshold=0.95):outlier_indices = []for nu in df:if nu > np.quantile(df,threshold):df.remove(nu)return df

3. 基于ZSCORE检测方法

ZSCORE计算公式为 Z i = x i − X s t d Z_i=\frac {x_i-X}{std} Zi​=stdxi​−X​

std为数据标准差,X为数据均值

我们取阈值为3.5,代码如下:

def detect_outliers_zscore(df,threshold=3.5):outlier_indices = []for nu in df:zscore = (nu - np.mean(df))/np.std(df)if abs(zscore) > threshold:df.remove(nu)return df

4. 基于MAD检测方法

该方法为对ZSCORE方法的增强,MAD定义为:
M A D = m e d i a n ∣ x i − X ∣ MAD=median{|x_i-X|} MAD=median∣xi​−X∣

m e d i a n median median为取中位数, X X X为数据的中位数

M i = 0.6475 ( x i − X ) M A D M_i=\frac{0.6475(x_i-X)}{MAD} Mi​=MAD0.6475(xi​−X)​

取阈值为3.5,代码如下:

def detect_outliers_mad(df,threshold=3.5):outlier_indices = []MAD = np.median(abs(df - np.median(df)))for nu in df:zscore = abs((nu - np.median(df))*0.6475/MAD)if zscore > threshold:df.remove(nu)return df

完整代码如下:

#_*_coding:utf-8_*_
# author    : jmx
# create    : 19-9-17 上午10:31
# filename  : test.py
# IDE   : PyCharm
import numpy as npdef detect_outliers_4div(df):outlier_indices = []raw = dftry:# 1st quartile (25%)Q1 = np.percentile(df, 25)# 3rd quartile (75%)Q3 = np.percentile(df, 75)# Interquartile range (IQR)IQR = Q3 - Q1# outlier stepoutlier_step = 1.5 * IQRfor nu in df:if (nu < Q1 - outlier_step) | (nu > Q3 + outlier_step):df.remove(nu)except:return rawreturn dfdef detect_outliers_std(df,threshold=0.95):outlier_indices = []for nu in df:if nu > np.quantile(df,threshold):df.remove(nu)return dfdef detect_outliers_zscore(df,threshold=3.5):outlier_indices = []for nu in df:zscore = (nu - np.mean(df))/np.std(df)if abs(zscore) > threshold:df.remove(nu)return dfdef detect_outliers_mad(df,threshold=3.5):outlier_indices = []MAD = np.median(abs(df - np.median(df)))for nu in df:zscore = abs((nu - np.median(df))*0.6475/MAD)if zscore > threshold:df.remove(nu)return dfdf = [-0.2296411544084549,-1.404792070388794,-0.0,-1.3356698751449585,-4.174769878387451,84.90332174301147,-0.0,-0.0]clean = detect_outliers_std(df)
print(clean)

参考文章:用Python做单变量数据集的异常点分析

Python数据分析-异常数据处理相关推荐

  1. python数据分析--金融数据处理

    数据来源:和鲸社区-Numpy+Pandas数据处理·第四关 主要内容: 缺失数据 查看每列 数据的缺失情况 输出每列具体缺失的行数 删除所有存在缺失值的行 绘制折线图 收盘价折线图 收盘价开盘价折线 ...

  2. 作业3(大作业):python数据分析与应用大作业,对用户用电量数据进行数据处理,包括数据转置、异常数据识别和处理、统计基本统计量(包括峰度、偏度)、按日/周(求和)差分、5%分位数等

    Python数据分析与应用大作业 使用学习过的知识(Numpy数值分析基础.Matplotlib数据可视化基础.Pandas统计分析基础),对data.csv用户用户用电量数据进行相关处理,其中数据中 ...

  3. python使用箱图法和业务规则进行异常数据处理并检查预测使用的数据特征是否有字段缺失的情况并补齐

    python使用箱图法和业务规则进行异常数据处理并检查预测使用的数据特征是否有字段缺失的情况并补齐 关于预测或者推理的时候特征补齐的情况是这样的: 你在模型训练的时候使用了多少特征,那么在模型预测和推 ...

  4. Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换

    CSDN 课程推荐:<迈向数据科学家:带你玩转Python数据分析>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python ...

  5. python数据分析入门【二】 --- 数据处理

    python数据分析入门[二] - 数据处理 上一章内容python数据分析入门[一] - DataFrame & Series 下一章内容python数据分析入门[三] - 数据分析 文章目 ...

  6. azw3 python数据分析 活用pandas库_Python数据分析 活用Pandas库 数据科学教程数据分析入门图书 Python编程入门数据处理...

    内容介绍 本书是Python数据分析入门书,每个概念都通过简单实例来阐述,便于读者理解与上手.具体内容包括:Python及Pandas基础知识,加载和查看数据集,Pandas的DataFrame对象和 ...

  7. chatgpt赋能python:Python是一门强大的编程语言,它在数据分析和数据处理方面广受欢迎。在网站开发中,Python也被广泛应用。它可以用于开发Web应用、爬虫、自动化测试等。此外,Pyt

    Python是一门强大的编程语言,它在数据分析和数据处理方面广受欢迎.在网站开发中,Python也被广泛应用.它可以用于开发Web应用.爬虫.自动化测试等.此外,Python也可以用于创建表格.在本文 ...

  8. python快速入门神器 知乎_python数据分析之数据处理终极神器

    一行代码一行代码带着敲,通过实战讲解如何进行数据预处理,在实战中学习,最快的学习方法,精华!讲解的非常详细简单,学不会,全额退款哦!!! 数据分析之数据处理终极神器课程目录如下: 1数据框行与列的选择 ...

  9. python基础一入门必备知识-Python数据分析入门必备基础知识

    今天,老师要带大家解数据分析的定义.核心思路.应用领域以及开发流程,向大家全方位展示数据分析入门必备基础知识,全都是干货哦!虽然看完本文,不能让大家立马变身为一名数据分析师,但是能让大家对数据分析有一 ...

最新文章

  1. OpenSUSE 11 安装Qt5.0,失败,失败,失败,留个坑,以后来填,万一实现了呢
  2. Oracle 11g R2 64位在 win7 64位的安装流程图解
  3. 在PHP中如何使用消息列队
  4. java forward 修改请求参数_聊聊springboot session timeout参数设置
  5. python爬虫框架scrapy实例详解_python爬虫框架scrapy实例详解
  6. 目前网络时间服务有哪几种协议?
  7. 如何正确地开启Facebook广告营销大门?
  8. PgSQL · 应用案例 · 惊天性能!单RDS PostgreSQL实例支撑 2000亿
  9. Linux执行fastqc报错Exception in thread “main“ java.awt.HeadlessException: No X11 DISPLAY variable was s
  10. 指令 出厂_CNC数控加工中心编程指令详解
  11. bgfx入门练习2——找出DX,OpenGL驱动切换实现原理
  12. 硬币找钱问题(最小硬币和问题)详解与代码实现
  13. MHA Failover测试-上
  14. 三极管专题:PNP和NPN 三极管恒流电路分析
  15. Elasticsearch的基本使用
  16. Linux下部署tomcat,启动时8005端口无法启动
  17. Android 实现答题器功能(通过手势实现翻页效果)...
  18. Shell常用命令 和 bat常用命令
  19. Android 页面或文件或网络请求时的加载动画
  20. 《Spark -- The Definitive Guide》学习笔记Note.4

热门文章

  1. (毕设)云开发——图书馆座位预约小程序(一)
  2. Mercurial hg轻量级分布式版本控制系统
  3. 参考文献名称怎么复制_毕业学术论文发表 | 毕业论文怎么写才能通过论文的查重...
  4. matlab plot 曲线类型
  5. 【测试】这到底是前端还是后端Bug
  6. 金蝶K3--委外加工订单--列表
  7. 微信公众号开发系列教程视频
  8. 若依框架(SpringBoot)增加SQL防注入处理,SpringBoot增加SQL防注入
  9. SQL防注入正则表达式
  10. soapui 证书_SoapUI无法连接HTTPS(SSLPeerUnverifiedException)