当前位置: 首页 > news >正文

异常数据处理——3σ原则、箱线图

首先三连问: 

异常数据是什么呢

偏离大部分数据。

但是呢大家会不会有疑惑,疑惑异常数据都是不好的吗?

不是的。还是要看问题的,当我们在信用卡欺诈,数据中我们往往找的就是异常数据。

那我们怎么能预测出来呢?

(1)3σ原则

(2)箱线图

(3)聚类(有时间再补充)

一、3σ原则

3σ原则假设一组检测数据含有随机误差,数据进行计算处理得到标准差,按概率函数确定一个区间,认为误差超过这个区间的就属于异常值。

正态分布:

代码:

import pandas as pd
import numpy as np
def three_sigma(Ser):
    rule = (Ser.mean()-3*Ser.std()>Ser1) | (Ser.mean()+3*Ser.std()< Ser)
    index = np.arange(Ser1.shape[0])[rule]
    outrange = Ser.iloc[index]
    return outrange

 二、箱线图

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

1.函数一:对给定的某列Series进行异常值检测,并用不包括异常值的剩余数据的均值替换(Ser:进行异常值分析的DataFrame的某一列)

#定义箱线图识别异常值函数
def box——mean(Ser,Low=None,Up=None):
    if Low is None:
        Low=Ser.quantile(0.25)-1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))
    if Up is None:
        Up=Ser.quantile(0.75)+1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))
    Ser2=Ser[(Ser>=Low) & (Ser<=Up)]   #取出不包含异常点的数据,为了求均值
    Ser[(Ser<Low) | (Ser>Up)]=Ser2.mean()  #用非空且非异常数据的那些数据的均值替换异常值
    return(Ser)

2.测试;

cols=[ 'chwrhdr', 'chwshdr', 'chwsfhdr', 'cwshdr', 'cwrhdr','dch']  
for col_name in cols:
    data[col_name]=box_mean(data[col_name])

3.函数二:获取异常点索引号(Ser:进行异常值分析的DataFrame的某一列)

def outlier_index(Ser,Low=None,Up=None):
    if Low is None:
         Low = Ser.quantile(0.25)-1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))  
    if Up is None:
         Up = Ser.quantile(0.75)+1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))   
    yczindex_list=Ser[(Ser<Low) | (Ser>Up)].index.tolist()
    return(yczindex_list)

4.测试:删除DataFrame中某列有异常值的整行

for col_name in outlier_cols:
    yczindex_list=outlier_index(selfdata[col_name])  
    selfdata=selfdata.drop(yczindex_list,axis=0)

三、箱线图可视化(数值型特征)

numeric_cols=['chwgpmrt', 'cwgpmrt', 'systotpower', 'loadsys',
       'effsys', 'hbsys', 'wetbulb', 'cwgpmrt_sp']  #给出数值型特征的列名
col_numbers=len(numeric_cols)    #数值型特征列的个数
pic_numbers_per_line=2 #每行显示的图形个数
row_numbers=col_numbers//pic_numbers_per_line   #总共显示几行图形
plt.figure(figsize=(20,16),dpi=100) 
for i in range(col_numbers):
    plt.subplot(row_numbers,pic_numbers_per_line,i+1)
    plt.boxplot(data[numeric_cols[i]])
plt.show()

 结果:

相关文章:

  • vue3.0 + tsx 构建el-button
  • 基于JAVA的TCP网络QQ聊天工具系统
  • 【WLAN】【调试】netsh wlan常用命令使用说明
  • 教程图文详解 - 网络安全(第八章)
  • Python数据分析案例08——预测泰坦尼克号乘员的生存(机器学习全流程)
  • 计算机四级——操作系统原理常用知识点个人总结(上)
  • 【学姐面试宝典】—— 前端基础篇Ⅰ
  • c++之二叉树
  • 字符串训练赛
  • Android性能优化之【启动优化】
  • Java 集合与数据结构 · 接口 interfaces ·Collection 常用方法 · Map 常用方法
  • 面试面不过?大厂面试官是这样说的···
  • 秒懂YUV444/YUV422/YUV420计算(二十九)
  • 模方重大更新,支持3ds max、新版大疆数据、匀色、多原点数据等
  • 论文教程之 138位科研工作者分享如何(认真地)阅读一篇科学论文
  • .pyc 想到的一些问题
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【EOS】Cleos基础
  • Github访问慢解决办法
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Linux Process Manage
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Vim 折腾记
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 聚类分析——Kmeans
  • 目录与文件属性:编写ls
  • 设计模式(12)迭代器模式(讲解+应用)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 说说动画卡顿的解决方案
  • 微信开源mars源码分析1—上层samples分析
  • 用quicker-worker.js轻松跑一个大数据遍历
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​520就是要宠粉,你的心头书我买单
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #define、const、typedef的差别
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (LeetCode) T14. Longest Common Prefix
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (一) springboot详细介绍
  • (转) RFS+AutoItLibrary测试web对话框
  • ***监测系统的构建(chkrootkit )
  • .Net Memory Profiler的使用举例
  • .NET 设计一套高性能的弱事件机制
  • .NET4.0并行计算技术基础(1)
  • .net分布式压力测试工具(Beetle.DT)
  • .考试倒计时43天!来提分啦!
  • @在php中起什么作用?
  • [ C++ ] STL_list 使用及其模拟实现
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [CentOs7]iptables防火墙安装与设置
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [Electron]ipcMain.on和ipcMain.handle的区别
  • [GN] 后端接口已经写好 初次布局前端需要的操作(例)