前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R 数据质量分析①

R 数据质量分析①

作者头像
用户1359560
发布2018-08-27 11:36:41
9390
发布2018-08-27 11:36:41
举报
文章被收录于专栏:生信小驿站

数据质量分析

数据质量分析是数据挖掘中数据准备的最重要一环,是数据处理的前体。数据质量分分析主要任务是识别脏数据。常见的脏数据包括:

  • 缺失值
  • 异常值
  • 不一致的值
  • 重复数据或者包括特殊符号的数据

缺失值处理

处理数据缺失的一般步骤:

  • 识别缺失数据
  • 检测导致数据缺失的原因
  • 删除包含缺失值的实例或用合理的数值代替(插补)缺失值。
1、识别缺失数据:

R语言中,NA代表缺失值,NaN代表不可能值,Inf和-Inf代表正无穷和负无穷。推荐使用is.na,is.nan,is.finite,is.infinite4个函数去处理。

代码语言:javascript
复制
setwd("E:\\Rwork\\data")
library(mice)
library(VIM)
a <- read.csv('catering_sale.csv',header = T)
dim(a)
sum(complete.cases(a))
sum(!complete.cases(a))
mean(!complete.cases(a))
a[!complete.cases(a), ]


# 异常值检测箱线图
sp <- boxplot(a$"销量", boxwex = 0.7)
title("销量异常值检测箱线图")
xi <- 1.1
sd.s <- sd(a[complete.cases(a), ]$"销量")
mn.s <- mean(a[complete.cases(a), ]$"销量")
points(xi, mn.s, col = "red", pch = 18)
arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1)
text(rep(c(1.05, 1.05, 0.95, 0.95), length = length(sp$out)), 
     labels = sp$out[order(sp$out)], sp$out[order(sp$out)] + 
       rep(c(150, -150, 150, -150), length = length(sp$out)), col = "red")

complete.case()可用来识别矩阵或数据框中没有缺失值的行

代码语言:javascript
复制
> complete.cases(a)
  [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
 [16]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [31]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [46]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [61]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [76]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
 [91]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[106]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[121]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[136]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[151]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
[166]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[181]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[196]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
> is.na(a)
        日期  销量
  [1,] FALSE FALSE
  [2,] FALSE FALSE
  [3,] FALSE FALSE
  [4,] FALSE FALSE
  [5,] FALSE FALSE
  [6,] FALSE FALSE
  [7,] FALSE FALSE
  [8,] FALSE FALSE
  [9,] FALSE FALSE
 [10,] FALSE FALSE
 [11,] FALSE FALSE
 [12,] FALSE FALSE
 [13,] FALSE FALSE
 [14,] FALSE FALSE
 [15,] FALSE  TRUE
 [16,] FALSE FALSE
 [17,] FALSE FALSE
 [18,] FALSE FALSE
 [19,] FALSE FALSE
 [20,] FALSE FALSE
 [21,] FALSE FALSE
 [22,] FALSE FALSE
 [23,] FALSE FALSE
 [24,] FALSE FALSE
 [25,] FALSE FALSE
 [26,] FALSE FALSE
 [27,] FALSE FALSE
 [28,] FALSE FALSE
 [29,] FALSE FALSE
 [30,] FALSE FALSE
 [31,] FALSE FALSE
 [32,] FALSE FALSE
 [33,] FALSE FALSE
 [34,] FALSE FALSE
 [35,] FALSE FALSE
 [36,] FALSE FALSE
 [37,] FALSE FALSE
 [38,] FALSE FALSE
 [39,] FALSE FALSE
 [40,] FALSE FALSE
 [41,] FALSE FALSE
 [42,] FALSE FALSE
 [43,] FALSE FALSE
 [44,] FALSE FALSE
 [45,] FALSE FALSE
 [46,] FALSE FALSE
 [47,] FALSE FALSE
 [48,] FALSE FALSE
 [49,] FALSE FALSE
 [50,] FALSE FALSE
 [51,] FALSE FALSE
 [52,] FALSE FALSE
 [53,] FALSE FALSE
 [54,] FALSE FALSE
 [55,] FALSE FALSE
 [56,] FALSE FALSE
 [57,] FALSE FALSE
 [58,] FALSE FALSE
 [59,] FALSE FALSE
 [60,] FALSE FALSE

> md.pattern(a)
    日期 销量  
195    1    1 0
  6    1    0 1
       0    6 6

备注:0表示变量的列中没有缺失,1则表示有缺失值。 第一行给出了没有缺失值的数目(共多少行)。 第一列表示各缺失值的模式。 最后一行给出了每个变量的缺失值数目。 最后一列给出了变量的数目(这些变量存在缺失值)。

代码语言:javascript
复制
aggr(a,prop=F,numbers=T)
代码语言:javascript
复制
matrixplot(a)

2. 缺失值处理

  • 行删除法:数据集中含有缺失值的行都会被删除,一般假定缺失数据是完全随机产生的,并且缺失值只是很少一部分,对结果不会造成大的影响。即:要有足够的样本量,并且删除缺失值后不会有大的偏差!

行删除的函数有na.omit()和complete.case()

  • 删除含有缺失值的行
代码语言:javascript
复制
newdata<-na.omit(a)
newdata<-a[complete.cases(a),]
  • 删除含有缺失值的列
代码语言:javascript
复制
t(na.omit(t(a)))

na_flag <- apply(is.na(a), 2, sum)
a <- a[, which(na_flag == 0)]

lapply(Y, na.omit)
  • 预测插补法
代码语言:javascript
复制
> a <- read.csv("titanic.train.csv",header = T, row.names = 1) 
> sapply(a,function(x) sum(is.na(x)))
Survived   Pclass     Name      Sex      Age    SibSp    Parch 
       0        0        0        0      177        0        0 
  Ticket     Fare    Cabin Embarked 
       0        0        0        0 
> age.model <- rpart(Age ~ Pclass + Sex + SibSp + 
+                      Parch + Fare + Embarked  ,
+                    data=a[!is.na(a$Age), ],
+                    method='anova')
> 
> a$Age[is.na(a$Age)] <- predict(age.model, a[is.na(a$Age), ])
> sapply(a,function(x) sum(is.na(x)))
Survived   Pclass     Name      Sex      Age    SibSp    Parch 
       0        0        0        0        0        0        0 
  Ticket     Fare    Cabin Embarked 
       0        0        0        0 
> 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.01.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据质量分析
    • 缺失值处理
      • 1、识别缺失数据:
    • 2. 缺失值处理
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档