摘 要:大數(shù)據(jù)的處理中數(shù)據(jù)的清洗工作很重要。運用R語言對數(shù)據(jù)清洗,需要對缺失值、異常值進行處理,文章給出了清洗的方法和相關(guān)程序語言。
關(guān)鍵詞:數(shù)據(jù)清洗;缺失值;異常值
現(xiàn)在在數(shù)據(jù)處理與挖掘中數(shù)據(jù)的預(yù)處理是很重要的,數(shù)據(jù)的處理主要是指對原始數(shù)據(jù)進行清洗、集成、變換及規(guī)約。數(shù)據(jù)清洗是將刪除原始數(shù)據(jù)中的一些無關(guān)、重復(fù)數(shù)據(jù),篩選掉一些與挖掘主題沒有關(guān)系的數(shù)據(jù),對缺失值、異常值進行處理。
一、缺失值、異常值的處理
在R中缺失值用NA表示,用is.na()判斷缺失值是否存在。判斷后需進行缺失值處理,經(jīng)常用的方法一般有:刪除法、插補法、替換法。
(1)刪除法,這也是最簡單的方法。
na.emit()移除所有含缺失數(shù)據(jù)的行,適用于缺失值占表較少的情況。data[,-p]其中data表示目標數(shù)據(jù)集,p表示缺失變量所在的列。適用于變量有較大缺失且對研究目標影響不大的情況,意味著要刪除整個變量。
(2)替換法。
變量分為數(shù)值型和非數(shù)值型,數(shù)值型變量中缺失的可以用其他所有對象取值的均值來替換;非數(shù)值型變量中缺失的可以用其他全部有效觀測值的中位數(shù)或眾數(shù)替換。
(3)插補法,這是比上面兩種都要好的方法。
常用的插補法有,回歸插補法、多重插補法?;貧w插補法,利用回歸模型將需插值補缺的變量作為因變量,其他變量為自變量,通過回歸函數(shù)lm()預(yù)測出因變量的值來補缺。多重插補法,從一個包含缺失值的數(shù)據(jù)集中生成一組完整的數(shù)據(jù),如此多次,從而產(chǎn)生缺失值的一個隨機樣本。
異常值的處理方式一般有:1、刪除;2、變?yōu)槿笔е堤幚?3、如果是正確的異常值,可以直接在有異常值的數(shù)據(jù)集上建模。
二、常用的R程序語言有
#讀取銷售數(shù)據(jù)文件,提取標題行。
inputfile=read.csv(‘./catering_sale.csv,he=T)/讀取當(dāng)前工作目錄下的文件
inputfile=read.csv(‘E:/R_Files/…/catering_sale.csv,he=T)/讀取完整工作目錄下的文件
#變換變量名。
inputfile=data.frame(sales=inputfile$銷量,date=inputfile$日期)
#數(shù)據(jù)截取。
Inputfile=inputfile[5:16,] #取5—16行
R中工作目錄:
(1) getwd()函數(shù)顯示當(dāng)前工作目錄
(2) setwd()更改當(dāng)前目錄,用法:
dir.ceate(“E:/R_Files”)/創(chuàng)立一個目錄(setwd不會自動創(chuàng)建一個不存在的目錄,另:dir.ceate一次只能創(chuàng)建一個”/”路徑,如有多個”/”就需創(chuàng)建多次。)
setwd(“E:/R_Files”)更改到
getwd()顯示當(dāng)前工作目錄
也可不用dir.ceate()函數(shù),直接手動建立目標文件夾后再setwd更改。
(3)判斷是否缺失:
is.na(inputfile) /判斷是否存在缺失。
n=sum(is.na(inputfile)) /輸出缺失個數(shù)。
(4)異常值識別:
par(mfrow=c(1,2)) #將繪圖窗口劃為1行2列,同時顯示。
dotchart(inputfile$sales) #繪制水平箱形圖。
boxplot(inputfile$sales,horizontal=T) #繪制水平箱形圖。
(5)異常值處理:
inputfile$sales[5]=NA #將第5個銷量值處理成缺失值。
fix(inputfile) #表格形式呈現(xiàn)數(shù)據(jù)。
(6)缺失值處理:
inputfile$date=as.numeric(inputfile$date) #將日期轉(zhuǎn)換為數(shù)值型變量。
sub=which(is.na(inputfile$sales)) #識別缺失值所在行數(shù)。
sub #出現(xiàn)行數(shù)值。
inputfile1=inputfile[-sub,] #完整(將數(shù)據(jù)集分成完整數(shù)據(jù)和缺失數(shù)據(jù)兩部分)。
Inputfile2=inputfile[sub,] #缺失。
(7)行刪除法處理缺失,結(jié)果轉(zhuǎn)存。
result1=inputfile1
(8)均值替換法處理缺失。
avg_sales=mean(inputfile1$sales) #求銷量表完整部分的平均值(未缺失部分均值)。
inputfile2$sales=rep(avg_sales,n) #用均值替換缺失。
result2=rbind(inputfile1,inputfile2) #將1、2兩部分合并(并入完成插補的數(shù)據(jù))。
(9)回歸插補法處理缺失,結(jié)果轉(zhuǎn)存。
model=lm(sales~date,date=inputfile) #回歸模型擬合。
inputfile2$sales=predict(model,inputfile2) #模型預(yù)測。
result3=rbind(inputfile1,inputfile2) #將兩部分合并
(10)多重插補法處理缺失,結(jié)果轉(zhuǎn)存。
library(lattice) #調(diào)入函數(shù)包。
library(mass) #函數(shù)、應(yīng)用統(tǒng)計包。
library(nnet) #神經(jīng)網(wǎng)絡(luò)包。
library(mice) #多重插補。
imp=mice(inputfile,m=4) #4重插值,即生成4個無缺失數(shù)據(jù)集。
fit=with(imp,lm(sales~date,data=inputfile)) #選擇插補模型。
pooled=pool(fit) #將單獨的分析結(jié)果整合為一組結(jié)果。
summary(pooled) #獲取描述性統(tǒng)計量可以提供最大、最小、四分位數(shù)、均值……
result4=complete(imp,action=3) #選擇第3個插補數(shù)據(jù)集作為結(jié)果。
參考文獻
[1]周蘇,馮嬋璟,王碩蘋,等.大數(shù)據(jù)技術(shù)與應(yīng)用[M].北京:機械工業(yè)出版社,2016:3-4.
[2]曾劍平.互聯(lián)網(wǎng)大數(shù)據(jù)處理技術(shù)與應(yīng)用[M].北京:清華大學(xué)出版社,2017:5-6.
作者簡介:
馮英華(1977--),男,山東壽光人,濰坊科技學(xué)院副教授,碩士。主要研究方向:應(yīng)用數(shù)學(xué)
基金項目:濰坊科技學(xué)院2018年度校級課題(人文社科類)重點項目,項目編號:2018RWZD10。