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备份文件的脚本
Aug 11 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
May 22 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
VSCode Python开发环境配置的详细步骤
Feb 22 Python
python覆盖写入,追加写入的实例
Jun 26 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
Aug 05 Python
Python Tkinter模块 GUI 可视化实例
Nov 20 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Python多线程thread及模块使用实例
Apr 28 Python
django有哪些好处和优点
Sep 01 Python
python向企业微信发送文字和图片消息的示例
Sep 28 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
Laravel事件监听器用法实例分析
2019/03/12 PHP
PHP实现八皇后算法
2019/05/06 PHP
js压缩利器
2007/02/20 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
简单实现python画圆功能
2018/01/25 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
2014幼儿教师个人工作总结
2014/12/03 职场文书
人力资源部岗位职责
2015/02/11 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
js实现自动锁屏功能
2021/06/02 Javascript
Nginx HTTP跳转至HTTPS
2022/05/15 Servers