|
前面介紹了拿到臟數(shù)據(jù)后,對(duì)缺失值的處理數(shù)據(jù)分析|R-缺失值處理,今天分享一下另一種臟數(shù)據(jù)-異常值的處理。 異常值一般會(huì)拉高或拉低數(shù)據(jù)的整體情況,因此需要對(duì)異常值進(jìn)行處理。 一 異常值檢驗(yàn) 1.1 箱線圖方法 繪制箱線圖,并標(biāo)注出異常值 set.seed(1)test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))library(ggplot2)ggplot(data=NULL,mapping=aes(x='',y=test))+geom_boxplot(outlier.colour = 'red', outlier.shape = 17)1.2 平均值±3個(gè)標(biāo)準(zhǔn)差方法 set.seed(1)test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))min<-mean(test)-3*sd(test) max<-mean(test)+3*sd(test)#返回異常值的下標(biāo)which(test > max)#返回異常值的數(shù)值test[which(test > max)]1.3 四分位數(shù)和四分位距方法 #獲取上下四分位數(shù)和四分位距 set.seed(1)test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))Q_xia <- quantile(test, probs = 0.25)Q_shang <- quantile(test, probs = 0.75)Q_range <- Q_shang - Q_xiaQ_xia ; Q_shang ; Q_range #找出異常點(diǎn) which(test > Q_shang + 1.5*Q_range)[1] 111 114 115 118 119 125 130 143 150 152 160 183 193 200value[which(test > Q_shang + 1.5*Q_range)][1] 48.07436 47.40352 40.94987 47.67244 47.69126 46.20603 42.71467 45.52748 [9] 47.15356 46.65220 46.74110 44.02792 49.08002 46.46977以上的三種方法均可以找到數(shù)據(jù)集中的異常值,下面介紹常見的處理異常值的方式。 二 異常值處理 異常值一般有刪除或替換兩種處理方式。刪除簡(jiǎn)單,但可能也造成數(shù)據(jù)信息丟失,下面主要說一下替換。 2.1 用上四分位數(shù)的1.5倍四分位距或下四分位數(shù)的1.5倍四分位距替換 #設(shè)定數(shù)據(jù)集set.seed(1)test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))test1 <- test#查看原始數(shù)據(jù)情況test[c(111,114,115)][1] 48.07436 47.40352 40.94987#查看替換后數(shù)據(jù)情況imp1 <- Q_shang + 1.5*Q_rangetest1[which(test1 > Q_shang + 1.5*Q_range )] <- imp1test1[c(111,114,115)]39.7537 39.7537 39.7537當(dāng)然也可以根據(jù)實(shí)際情況用中位數(shù)或者均值替代。 2.2 蓋帽法 令數(shù)據(jù)集合中90%以上的點(diǎn)值賦值為90%時(shí)候的值;小于10%的點(diǎn)值賦值為10%時(shí)候的值,百分比數(shù)據(jù)可根據(jù)實(shí)際情況調(diào)整,僅供參考。 #設(shè)定數(shù)據(jù)集 set.seed(1)test <- c(rnorm(100, mean = 5, sd = 1), runif(100, min = 0.1, max = 50))test2 <- test#查看原始數(shù)據(jù)q10,q90 q10 <- quantile(test2, 0.1)q90 <- quantile(test2, 0.9)q10 ; q90 10% 4.249007 90% 35.23009 head(test2[which(test2 < q10)])[1] 4.164371 4.179532 2.785300 3.010648 3.529248 3.622940#對(duì)數(shù)據(jù)進(jìn)行替換 test2[test2 < q10] <- q10test2[test2 > q90] <- q90#查看替換結(jié)果 summary(test2) Min. 1st Qu. Median Mean 3rd Qu. Max. 4.249 4.959 6.169 12.701 18.877 35.230 上面就是常見的檢測(cè)數(shù)據(jù)集的異常值以及簡(jiǎn)單的替換異常值的常用方法,結(jié)合之前缺失值的處理,即完成了對(duì)數(shù)據(jù)的簡(jiǎn)單“清洗”過程。 |
|
|