Python实现非正太分布的异常值检测方式


Posted in Python onDecember 09, 2019

工作中,我们经常会遇到数据异常,比如说浏览量突增猛降,交易量突增猛降,但是这些数据又不是符合正太分布的,如果用几倍西格玛就不合适,那么我们如何来判断这些变化是否在合理的范围呢?

小白查阅一些资料后,发现可以用箱形图,具体描述如下:

箱形图(英文:Box plot),又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。箱形图最大的优点就是不受异常值的影响,能够准确稳定地描绘出数据的离散分布情况,同时也利于数据的清洗。

Python实现非正太分布的异常值检测方式

异常值可以设置为上四分位数的1.25倍,也可以设置为1.5倍,具体的要通过实验可得。

1、下四分位数Q1

(1)确定四分位数的位置。Qi所在位置=i(n+1)/4,其中i=1,2,3。n表示序列中包含的项数。

(2)根据位置,计算相应的四分位数。

例中:Q1所在的位置=(14+1)/4=3.75,Q1=0.25×第三项+0.75×第四项=0.25×17+0.75×19=18.5;

2、中位数(第二个四分位数)Q2中位数,即一组数由小到大排列处于中间位置的数。若序列数为偶数个,该组的中位数为中间两个数的平均数。

例中:Q2所在的位置=2(14+1)/4=7.5,Q2=0.5×第七项+0.5×第八项=0.5×25+0.5×28=26.5

3、上四分位数Q3计算方法同下四分位数。

例中:Q3所在的位置=3(14+1)/4=11.25,Q3=0.75×第十一项+0.25×第十二项=0.75×34+0.25×35=34.25。

4、上限上限是非异常范围内的最大值。

首先要知道什么是四分位距如何计算的?四分位距IQR=Q3-Q1,那么上限=Q3+1.5IQR5、下限下限是非异常范围内的最小值。下限=Q1-1.5IQR

我这里是使用上四分位数的1.5倍作为上限,下四分位数的1.5倍作为下限。

这里是拿历史一个月每天的产量和间夜量作为参考,统计出历史的箱线图的各个指标,然后将要比较的数据,来进行循环判断,若超过上限/下限那么抛出1和0.

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 30 10:52:37 2019
@author: chen_lib
"""
 
import pandas as pd
catering_sale = 'D:/Users/chen_lib/Desktop/ceshi.csv' #读取历史数据
datax = pd.read_csv(catering_sale) #读取数据
#取出不是昨天的数据
data = datax.loc[datax['orderdate'] != datetime][:]
'''
import time
## yyyy-mm-dd格式
print (time.strftime("%Y-%m-%d"))
'''
#时间减一天
import datetime
datetime = (datetime.datetime.now()+datetime.timedelta(days=-1)).strftime("%Y-%m-%d")
 
 
#保存基本统计量,将常见的统计信息保存为数据框
statistics = data.describe() 
#添加行标签 计算出每个指标的上线下线和四分位间距
statistics.loc['IQR'] = statistics.loc['75%']-statistics.loc['25%'] #四分位数间距
statistics.loc['UP'] = statistics.loc['75%'] + 1.5*statistics.loc['IQR'] #上限
statistics.loc['DAWN'] = statistics.loc['25%'] - 1.5*statistics.loc['IQR']#下限
#取出data的列名
columns = data.columns.values.tolist()
 
 
'''取出要比较的数值,放在统计信息表'''
a = data.loc[data['orderdate'] == datetime][columns[1]]#取出第一列
b = data.loc[data['orderdate'] == datetime][columns[2]]#取出第二列
statistics.loc['res'] = [a[1],b[1]]#取出需要比较的当天的数据 放入统计信息中
  
 
'''循环取出结果是否满足要求''' 
ret = [] 
for i in range(2):
  res = statistics.loc['res'][i]
  max = statistics.loc['UP'][columns[i+1]]#最大值
  min = statistics.loc['DAWN'][columns[i+1]]#最小值
  '''
  #重建三个值的索引,以便比较大小
  res.index = ['ordernum']
  max.index = max['ordernum']
  min.index = min['ordernum']
  #判断异常值,若大于最大值或者小于最小值则抛出结果为1
  '''
  result1 = res>max
  result2 = res<min
  if result1 =='False' or result2 == 'False':
    ret.append([columns[i+1],1])
  else: 
    ret.append([columns[i+1],0])
  df = pd.DataFrame(ret)
  
	#将文件写入excel表中
df.to_excel("d:/Users/chen_lib/Desktop/ceshi.xlsx",sheet_name="total",index=False,header=False)

以上这篇Python实现非正太分布的异常值检测方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python里大整数相乘相关技巧指南
Sep 12 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
基于使用paramiko执行远程linux主机命令(详解)
Oct 16 Python
Python IDLE入门简介
Dec 08 Python
在ubuntu16.04中将python3设置为默认的命令写法
Oct 31 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
python处理“
Jun 10 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
python中bytes和str类型的区别
Oct 21 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
python 实现检验33品种数据是否是正态分布
Dec 09 #Python
Python远程开发环境部署与调试过程图解
Dec 09 #Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 #Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 #Python
python3 tcp的粘包现象和解决办法解析
Dec 09 #Python
python绘制规则网络图形实例
Dec 09 #Python
Spring实战之使用util:命名空间简化配置操作示例
Dec 09 #Python
You might like
php上的memcache和memcached两个pecl库
2010/03/29 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
探讨:如何编写PHP扩展
2013/06/13 PHP
Jquery拖拽并简单保存的实现代码
2010/11/28 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
python 文件和路径操作函数小结
2009/11/23 Python
简单实现Python爬取网络图片
2018/04/01 Python
对numpy Array [: ,] 的取值方法详解
2018/07/02 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
在python中安装basemap的教程
2018/09/20 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
三维科技面试题
2013/07/27 面试题
高一生物教学反思
2014/01/17 职场文书
情人节寄语大全
2014/04/11 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
处级干部考察材料
2014/12/24 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS