统计学---极端异常值的检测
你在整理統(tǒng)計(jì)公司人的收入情況,手一抖,不小心把某個(gè)人的月薪26249變成262490了,某個(gè)人的月薪16895變成1689.5了。于是變成了如下的情況:
incomes=[25590, 23306, 26780, 29463, 22485, 262490, 24985, 1689.5, 17700, 18257, 24132, 21479, 19304, 16511, 18573, 26606, 20917, 19394, 24322, 28383, 16478, 29062, 23232, 17580, 26804, 28500, 25018, 24001, 27530, 27459, 22776, 19835, 16475, 15201, 28801, 19509, 19098, 17993, 15131, 26187, 25022, 27430, 19114, 18295, 25365, 23550, 20413, 19335, 21286, 22911]有時(shí)候數(shù)據(jù)集中會(huì)包含一個(gè)或多個(gè)數(shù)值異常大或異常小的值,這樣的極端值稱為異常極端值(outlier)。這在現(xiàn)實(shí)數(shù)據(jù)集中是很有可能發(fā)生的,如數(shù)據(jù)錄入錯(cuò)誤、測(cè)量錯(cuò)誤、試驗(yàn)錯(cuò)誤、數(shù)據(jù)處理錯(cuò)誤等。異常值的存在當(dāng)然對(duì)數(shù)據(jù)統(tǒng)計(jì)產(chǎn)生很多不良的影響,例如降低數(shù)據(jù)統(tǒng)計(jì)的說(shuō)服力和可信度。
因此,我們首先想到的是把異常值檢測(cè)出來(lái)。這里就需要用到排序,利用排序,將數(shù)據(jù)從小到大進(jìn)行排列。然后將數(shù)據(jù)進(jìn)行等分。如果分成2部分,那這個(gè)數(shù)就是中位數(shù)。如果分為4部分,那這個(gè)數(shù)就叫四分位數(shù)。注意,這不是美式足球(橄欖球)中的四分位;四分位數(shù)不止一個(gè),是3個(gè),即通過(guò)3個(gè)四分位數(shù)將數(shù)據(jù)分為了4個(gè)數(shù)量上相等的部分。
這3個(gè)四分位數(shù)分別用Q1,Q2,Q3表示。你可能并不陌生,股票市場(chǎng)中,經(jīng)常有Q1財(cái)報(bào),Q2財(cái)報(bào),Q3財(cái)報(bào),Q4財(cái)報(bào)的說(shuō)法,指的是四個(gè)季度的財(cái)報(bào)情況,一年4個(gè)季度,也是四等分。
那么,對(duì)于上面的數(shù)據(jù),怎樣計(jì)算Q1,Q2,Q3呢?可以利用pandas的describe函數(shù)。
import pandas as pd four = pd.Series(data).describe() print(four) print('Q1= {0}, Q2= {1}, Q3={2}'.format(four['25%'],four['50%'],four['75%']))輸出結(jié)果:
count 50.000000 mean 26835.150000 std 34372.619505 min 1689.500000 25% 19102.000000 50% 22843.500000 75% 26037.750000 max 262490.000000 dtype: float64 Q1= 19102.0, Q2= 22843.5, Q3= 26037.75可以看出,pandas的describe函數(shù)不僅能得出數(shù)據(jù)集的樣本數(shù)量,均值,標(biāo)準(zhǔn)差,最小值、最大值,以及3個(gè)四分位數(shù),即在數(shù)據(jù)25%,50%,75%位置的數(shù)。我們通常把Q3-Q1的差值稱為四分位距(interquartile range,IQR),或四分差。
那什么是異常極端值呢,用如下計(jì)算公式:
Q1 = four['25%'] Q3 = four['75%'] IQR = Q3 - Q1upper = Q3 + 1.5 * IQR lower = Q1 - 1.5 * IQRprint(upper, lower)輸出結(jié)果:
36441.375 8698.375高于upper或者低于lower的值都屬于異常極端值。
畫出圖像如下:
incomes = pd.DataFrame(incomes) import seaborn as sns import matplotlib.pyplot as pltsns.boxplot(data=incomes, palette="Set1") plt.show()
很容易發(fā)現(xiàn)標(biāo)為黑色菱形的這2個(gè)極端值。那這個(gè)計(jì)算極端值的1.5是怎么得來(lái)的呢,這是統(tǒng)計(jì)學(xué)中經(jīng)過(guò)大量分析和經(jīng)驗(yàn)積累得出的標(biāo)準(zhǔn),一般情況不做調(diào)整。
總結(jié)
以上是生活随笔為你收集整理的统计学---极端异常值的检测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 为什么matplotlib显示openc
- 下一篇: 图像就是函数