基于R软件的数据清洗

2019-10-21 07:42冯英华
锦绣·下旬刊 2019年7期

摘 要:大数据的处理中数据的清洗工作很重要。运用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。