數據處理——異常值檢測


一、3σ原則

  3σ原則又稱為拉依達准則,該准則具體來說,就是先假設一組檢測數據只含有隨機誤差,對原始數據進行計算處理得到標准差,然后按一定的概率確定一個區間,認為誤差超過這個區間的就屬於異常值。

  正態分布狀況下,數值分布表:

數值分布 在數據中的占比
(μ-σ,μ+σ) 0.6827
(μ-2σ,μ+2σ) 0.9545
(μ-3σ,μ+3σ) 0.9973

  注:在正態分布中σ代表標准差,μ代表均值,x=μ為圖形的對稱軸

import pandas as pd
import numpy as np

# 定義3σ法則識別異常值函數
def three_sigma(Ser1):
    '''
    Ser1:表示傳入DataFrame的某一列。
    '''
    rule = (Ser1.mean()-3*Ser1.std()>Ser1) | (Ser1.mean()+3*Ser1.std()< Ser1)
    index = np.arange(Ser1.shape[0])[rule]
    outrange = Ser1.iloc[index]
    return outrange
# 導入數據並調用three_sigma
df = pd.read_csv('./data.csv',encoding= 'gbk')
three_sigma(df['counts']).head()

  

 

二、箱線圖檢測異常值

  和3σ原則相比,箱線圖依據實際數據繪制,真實、直觀地表現出了數據分布的本來面貌,且沒有對數據作任何限制性要求(3σ原則要求數據服從正態分布或近似服從正態分布),其判斷異常值的標准以四分位數和四分位距為基礎。四分位數給出了數據分布的中心、散布和形狀的某種指示,具有一定的魯棒性,即25%的數據可以變得任意遠而不會很大地擾動四分位數,所以異常值通常不能對這個標准施加影響。鑒於此,箱線圖識別異常值的結果比較客觀,因此在識別異常值方面具有一定的優越性。

  箱型圖提供了識別異常值的一個標准,即異常值通常被定義為小於QL-1.5IQR或大於QU+1.5IQR的值。其中,QL稱為下四分位數,表示全部觀察值中有四分之一的數據取值比它小;QU稱為上四分位數,表示全部觀察值中有四分之一的數據取值比它大;IQR稱為四分位數間距,是上四分位數QU與下四分位數QL之差,其間包含了全部觀察值的一半。

# 定義箱線圖識別異常值函數
def box_plot(Ser):
    '''
    Ser:進行異常值分析的DataFrame的某一列
    '''
    Low = Ser.quantile(0.25)-1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))
    Up = Ser.quantile(0.75)+1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))
    index = (Ser< Low) | (Ser>Up)
    Outlier = Ser.loc[index]
    return(Outlier)
# 調用
box_plot(df['counts']).head(8)

  

  

 

  或許我們還可以統計Ser中的非空值個數:

def box_plot_null(Ser):
    '''
    Ser:進行異常值分析的DataFrame的某一列
    函數將Ser中的異常值賦值None
    '''
    Low = Ser.quantile(0.25)-1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))
    Up = Ser.quantile(0.75)+1.5*(Ser.quantile(0.75)-Ser.quantile(0.25))
    index = (Ser< Low) | (Ser>Up)
    Ser.loc[index] = None
    return(Ser)
box_plot_null(df['counts']).notnull().sum()

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM