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