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

 更新时间:2019年12月09日 14:45:31   作者:J小白Y  
今天小编就为大家分享一篇Python实现非正太分布的异常值检测方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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

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

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

异常值可以设置为上四分位数的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 实现PS滤镜中的径向模糊特效

    Python 实现PS滤镜中的径向模糊特效

    这篇文章主要介绍了Python 实现 PS 滤镜中的径向模糊特效,帮助大家更好的利用python处理图片,感兴趣的朋友可以了解下
    2020-12-12
  • python读取.mat文件的数据及实例代码

    python读取.mat文件的数据及实例代码

    这篇文章主要介绍了python读取.mat文件的数据的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • Python基础语言学习笔记总结(精华)

    Python基础语言学习笔记总结(精华)

    给大家分享一篇关于Python基础学习内容的学习笔记整理总结篇,里面汇集了学习Python基础语言的难点和技巧,分享给大家。
    2017-11-11
  • python编程测试电脑开启最大线程数实例代码

    python编程测试电脑开启最大线程数实例代码

    这篇文章主要介绍了python编程测试电脑开启最大线程数实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Python网络爬虫中的同步与异步示例详解

    Python网络爬虫中的同步与异步示例详解

    这篇文章主要给大家介绍了关于Python网络爬虫中同步与异步的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • Python3.6 Schedule模块定时任务(实例讲解)

    Python3.6 Schedule模块定时任务(实例讲解)

    下面小编就为大家带来一篇Python3.6 Schedule模块定时任务(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Python 列表的清空方式

    Python 列表的清空方式

    今天小编就为大家分享一篇Python 列表的清空方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 学python最电脑配置有要求么

    学python最电脑配置有要求么

    在本篇内容中小编给大家整理的是关于学习python中电脑配置的相关文章,需要的朋友们可以学习下。
    2020-07-07
  • 使用python求斐波那契数列中第n个数的值示例代码

    使用python求斐波那契数列中第n个数的值示例代码

    这篇文章主要给大家介绍了关于使用python求斐波那契数列中第n个数的值的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • 对Python中的@classmethod用法详解

    对Python中的@classmethod用法详解

    下面小编就为大家分享一篇对Python中的@classmethod用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04

最新评论