异常数据处理——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()

 结果:

在箱子外面的就是异常点。

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 异常值分析是通过对数据进行统计分析,识别并排除异常值,从而提高数据的准确性和可信度。3σ原则是一种常用的异常值检测方法,它指的是在正态分布的数据中,一般认为落在平均值加减3倍标准差范围之外的数据为异常值。通常,对于非正态分布的数据,可以采用其他的异常值检测方法。 ### 回答2: 异常值分析是数据分析中的一项重要工作,主要用于检测和处理异常值。其中,3σ原则是常用的方法之一。 3σ原则是基于正态分布的假设,假设数据符合正态分布,即大部分数据分布在均值附近,而极少数的数据为异常值。根据这一假设,通过计算数据的平均值和标准差,我们可以确定异常值的范围。 根据3σ原则,如果一个数据点的值与均值的差异超过3倍的标准差,那么这个数据点可以被认为是异常值。换句话说,如果一个数据点的值与均值的差异在3倍标准差以内,那么这个数据点可以被认为是正常值。异常值的判断可以通过以下公式表示: 异常值 = |数据点的值 - 均值| > 3 x 标准差 通过使用3σ原则,我们可以有效地识别和排除异常值,从而提高数据的准确性和可靠性。通过将异常值排除在外,我们可以更好地进行数据分析和建模,以便获得更准确的结果。然而,需要注意的是,3σ原则只是一种基本方法,对于不符合正态分布的数据,可能需要使用其他的异常值检测方法。 总之,异常值分析——3σ原则是一种常用的异常值检测方法,通过判断数据点与均值的差异是否超过3倍的标准差来确定异常值。这种方法可以帮助我们提高数据的准确性和可靠性,但在实际应用中,需要结合具体情况和其他方法进行综合分析。 ### 回答3: 异常值分析是数据分析中的一个重要步骤,可以帮助我们识别出数据中的异常点或异常值。其中,3σ原则是一种常用的异常值分析方法。 3σ原则是基于正态分布的假设,在正态分布中,大约68.27%的数据落在一个标准差内,95.45%的数据落在两个标准差内,99.73%的数据落在三个标准差内。根据这个规则,我们可以判断是否存在异常值。 具体分析步骤如下: 1. 计算数据的均值μ和标准差σ。 2. 确定上下阈值,上阈值为μ+3σ,下阈值为μ-3σ。 3. 将数据与上下阈值进行比较,超出上下阈值的数据被认为是异常值。 使用3σ原则进行异常值分析的好处是简单易懂,同时能够排除大部分正常数据。但这个方法也有一定的局限性,因为它假设数据服从正态分布,而实际数据可能存在其他类型的分布。因此,在使用3σ原则进行异常值分析时,我们需要根据具体情况来判断是否适用。 总之,异常值分析的目的是帮助我们找出可能会影响数据分析结果的异常点,3σ原则是一种常用的方法,但在具体使用时需要注意适用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值