
作者 | 劉順祥
來(lái)源 | 數(shù)據(jù)分析1480
在《Python數(shù)據(jù)清洗(一):類型轉(zhuǎn)換和冗余數(shù)據(jù)刪除》和《Python數(shù)據(jù)清洗(二):缺失值識(shí)別與處理》文中已經(jīng)講解了有關(guān)數(shù)據(jù)中重復(fù)觀測(cè)和缺失值的識(shí)別與處理,在本節(jié)中將分享異常值的判斷和處理方法。
異常值也稱為離群點(diǎn),就是那些遠(yuǎn)離絕大多數(shù)樣本點(diǎn)的特殊群體,通常這樣的數(shù)據(jù)點(diǎn)在數(shù)據(jù)集中都表現(xiàn)出不合理的特性。如果忽視這些異常值,在某些建模場(chǎng)景下就會(huì)導(dǎo)致結(jié)論的錯(cuò)誤(如線性回歸模型、K均值聚類等),所以在數(shù)據(jù)的探索過(guò)程中,有必要識(shí)別出這些異常值并處理好它們。
異常值的識(shí)別
通常,異常值的識(shí)別可以借助于圖形法(如箱線圖、正態(tài)分布圖)和建模法(如線性回歸、聚類算法、K近鄰算法),在本期內(nèi)容中,將分享兩種圖形法,在下一期將分享基于模型識(shí)別異常值的方法。
箱線圖法
箱線圖技術(shù)實(shí)際上就是利用數(shù)據(jù)的分位數(shù)識(shí)別其中的異常點(diǎn),該圖形屬于典型的統(tǒng)計(jì)圖形,在學(xué)術(shù)界和工業(yè)界都得到廣泛的應(yīng)用。箱線圖的形狀特征如下圖所示:
圖中的下四分位數(shù)指的是數(shù)據(jù)的25%分位點(diǎn)所對(duì)應(yīng)的值(Q1);中位數(shù)即為數(shù)據(jù)的50%分位點(diǎn)所對(duì)應(yīng)的值(Q2);上四分位數(shù)則為數(shù)據(jù)的75%分位點(diǎn)所對(duì)應(yīng)的值(Q3);上須的計(jì)算公式為Q3+1.5(Q3-Q1);下須的計(jì)算公式為Q1-1.5(Q3-Q1)。其中,Q3-Q1表示四分位差。如果采用箱線圖識(shí)別異常值,其判斷標(biāo)準(zhǔn)是,當(dāng)變量的數(shù)據(jù)值大于箱線圖的上須或者小于箱線圖的下須時(shí),就可以認(rèn)為這樣的數(shù)據(jù)點(diǎn)為異常點(diǎn)。
所以,基于上方的箱線圖,可以定義某個(gè)數(shù)值型變量中的異常點(diǎn)和極端異常點(diǎn),它們的判斷表達(dá)式如下表所示:
在Python中可以使用matplotlib模塊實(shí)現(xiàn)數(shù)據(jù)的可視化,其中boxplot函數(shù)就是用于繪制箱線圖的。下面以1700年至1988年太陽(yáng)黑子數(shù)量的數(shù)據(jù)為例,利用箱線圖法識(shí)別數(shù)據(jù)中的異常點(diǎn)和極端異常點(diǎn)。具體的代碼如下:
# 導(dǎo)入第三方模塊 import pandas as pd import matplotlib.pyplot as plt # 導(dǎo)入數(shù)據(jù) sunspots = pd.read_csv(r'C:\Users\Administrator\Desktop\sunspots.csv') # 繪制箱線圖(1.5倍的四分位差,如需繪制3倍的四分位差,只需調(diào)整whis參數(shù)) plt.boxplot(x = sunspots.counts, # 指定繪制箱線圖的數(shù)據(jù) whis = 1.5, # 指定1.5倍的四分位差 widths = 0.7, # 指定箱線圖的寬度為0.8 patch_artist = True, # 指定需要填充箱體顏色 showmeans = True, # 指定需要顯示均值 boxprops = {'facecolor':'steelblue'}, # 指定箱體的填充色為鐵藍(lán)色 # 指定異常點(diǎn)的填充色、邊框色和大小 flierprops = {'markerfacecolor':'red', 'markeredgecolor':'red', 'markersize':4}, # 指定均值點(diǎn)的標(biāo)記符號(hào)(菱形)、填充色和大小 meanprops = {'marker':'D','markerfacecolor':'black', 'markersize':4}, medianprops = {'linestyle':'--','color':'orange'}, # 指定中位數(shù)的標(biāo)記符號(hào)(虛線)和顏色 labels = [''] # 去除箱線圖的x軸刻度值 ) # 顯示圖形 plt.show()
如上圖所示,利用matplotlib子模塊pyplot中的boxplot函數(shù)可以非常方便地繪制箱線圖,其中左圖的上下須設(shè)定為1.5倍的四分位差,右圖的上下須設(shè)定為3倍的四分位差。從左圖可知,發(fā)現(xiàn)數(shù)據(jù)集中至少存在5個(gè)異常點(diǎn),它們均在上須之上;而在右圖中并沒(méi)有顯示極端異常點(diǎn)。
通過(guò)上圖可以直觀地發(fā)現(xiàn)數(shù)據(jù)中是否存在異常點(diǎn)或極端異常點(diǎn),但無(wú)法得知哪些觀測(cè)為異常點(diǎn),以及這些異常點(diǎn)的具體數(shù)值。為解決該問(wèn)題,讀者可以通過(guò)下方的代碼實(shí)現(xiàn)查詢:
# 計(jì)算下四分位數(shù)和上四分位 Q1 = sunspots.counts.quantile(q = 0.25) Q3 = sunspots.counts.quantile(q = 0.75) # 基于1.5倍的四分位差計(jì)算上下須對(duì)應(yīng)的值 low_whisker = Q1 - 1.5*(Q3 - Q1) up_whisker = Q3 + 1.5*(Q3 - Q1) # 尋找異常點(diǎn) sunspots.counts[(sunspots.counts > up_whisker) | (sunspots.counts < low_whisker)]
根據(jù)正態(tài)分布的定義可知,數(shù)據(jù)點(diǎn)落在偏離均值正負(fù)1倍標(biāo)準(zhǔn)差(即sigma值)內(nèi)的概率為68.2%;數(shù)據(jù)點(diǎn)落在偏離均值正負(fù)2倍標(biāo)準(zhǔn)差內(nèi)的概率為95.4%;數(shù)據(jù)點(diǎn)落在偏離均值正負(fù)3倍標(biāo)準(zhǔn)差內(nèi)的概率為99.6%。
所以,換個(gè)角度思考上文提到的概率值,如果數(shù)據(jù)點(diǎn)落在偏離均值正負(fù)2倍標(biāo)準(zhǔn)差之外的概率就不足5%,它屬于小概率事件,即認(rèn)為這樣的數(shù)據(jù)點(diǎn)為異常點(diǎn)。同理,如果數(shù)據(jù)點(diǎn)落在偏離均值正負(fù)3倍標(biāo)準(zhǔn)差之外的概率將會(huì)更小,可以認(rèn)為這些數(shù)據(jù)點(diǎn)為極端異常點(diǎn)。為使讀者直觀地理解文中提到的概率值,可以查看標(biāo)準(zhǔn)正態(tài)分布的概率密度圖,如下圖所示:
進(jìn)一步,基于上圖的結(jié)論,可以按照下表中的判斷條件,識(shí)別出數(shù)值型變量的異常點(diǎn)和極端異常點(diǎn),如下表所示:
利用正態(tài)分布的知識(shí)點(diǎn),結(jié)合pyplot子模塊中的plot函數(shù)繪制折線圖和散點(diǎn)圖,并借助于兩條水平參考線識(shí)別異常值或極端異常值。
接下來(lái)以某公司的支付轉(zhuǎn)化率數(shù)據(jù)為例,使用正態(tài)分布的特性識(shí)別數(shù)據(jù)集中的異常點(diǎn)和極端異常點(diǎn),該數(shù)據(jù)呈現(xiàn)的是2017年第三季度每天的支付轉(zhuǎn)化率。我們利用如上介紹的plot函數(shù),識(shí)別數(shù)據(jù)中可能存在的異常點(diǎn)或極端異常點(diǎn)。具體代碼如下:
# 讀入外部數(shù)據(jù) pay_ratio = pd.read_excel(r'C:\Users\Administrator\Desktop\pay_ratio.xlsx') # 繪制單條折線圖,并在折線圖的基礎(chǔ)上添加點(diǎn)圖 plt.plot(pay_ratio.date, # x軸數(shù)據(jù) pay_ratio.ratio, # y軸數(shù)據(jù) linestyle = '-', # 設(shè)置折線類型 linewidth = 2, # 設(shè)置線條寬度 color = 'steelblue', # 設(shè)置折線顏色 marker = 'o', # 往折線圖中添加圓點(diǎn) markersize = 4, # 設(shè)置點(diǎn)的大小 markeredgecolor='black', # 設(shè)置點(diǎn)的邊框色 markerfacecolor='black') # 設(shè)置點(diǎn)的填充色 # 顯示圖形 plt.show() # 添加上下界的水平參考線(便于判斷異常點(diǎn),如下判斷極端異常點(diǎn),只需將2改為3) plt.axhline(y = pay_ratio.ratio.mean() - 2* pay_ratio.ratio.std(), linestyle = '--', color = 'gray') plt.axhline(y = pay_ratio.ratio.mean() + 2* pay_ratio.ratio.std(), linestyle = '--', color = 'gray') # 導(dǎo)入模塊,用于日期刻度的修改(因?yàn)槟J(rèn)格式下的日期刻度標(biāo)簽并不是很友好) import matplotlib as mpl # 獲取圖的坐標(biāo)信息 ax = plt.gca() # 設(shè)置日期的顯示格式 date_format = mpl.dates.DateFormatter("%m-%d") ax.xaxis.set_major_formatter(date_format) # 設(shè)置x軸每個(gè)刻度的間隔天數(shù) xlocator = mpl.ticker.MultipleLocator(7) ax.xaxis.set_major_locator(xlocator) # 為了避免x軸刻度標(biāo)簽的緊湊,將刻度標(biāo)簽旋轉(zhuǎn)45度 plt.xticks(rotation=45)
如上圖所示,左圖中的兩條水平線是偏離均值正負(fù)2倍標(biāo)準(zhǔn)差的參考線,目測(cè)有6個(gè)樣本點(diǎn)落在參考線之外,可以判定它們屬于異常點(diǎn);而對(duì)于右圖中偏離均值正負(fù)3倍標(biāo)準(zhǔn)差的參考線來(lái)說(shuō),僅有1個(gè)樣本點(diǎn)落在參考線之外,即說(shuō)明該樣本點(diǎn)就是2017年第三季度的唯一極端異常點(diǎn)。
同理,也可以借助于下面的代碼,查詢出異常點(diǎn)所對(duì)應(yīng)的水流量:
# 計(jì)算判斷異常點(diǎn)和極端異常點(diǎn)的臨界值 outlier_ll = pay_ratio.ratio.mean() - 2* pay_ratio.ratio.std() outlier_ul = pay_ratio.ratio.mean() + 2* pay_ratio.ratio.std() extreme_outlier_ll = pay_ratio.ratio.mean() - 3* pay_ratio.ratio.std() extreme_outlier_ul = pay_ratio.ratio.mean() + 3* pay_ratio.ratio.std() # 尋找異常點(diǎn) pay_ratio.loc[(pay_ratio.ratio > outlier_ul) | (pay_ratio.ratio < outlier_ll), ['date','ratio']] # 尋找極端異常點(diǎn) pay_ratio.loc[(pay_ratio.ratio > extreme_outlier_ul) | (pay_ratio.ratio < extreme_outlier_ll), ['date','ratio']]
異常點(diǎn)
極端異常點(diǎn)
盡管基于箱線圖的分位數(shù)法和基于正態(tài)分布的參考線法都可以實(shí)現(xiàn)異常值和極端異常值的識(shí)別,但是在實(shí)際應(yīng)用中,需要有針對(duì)性的選擇。如果待判斷的變量近似服從正態(tài)分布,建議選擇正態(tài)分布的參考線法識(shí)別異常點(diǎn),否則使用分位數(shù)法識(shí)別異常點(diǎn)。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03