R 数据质量分析①

作者: 柳叶刀与小鼠标 | 来源:发表于2018-01-25 15:50 被阅读29次

数据质量分析

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

  • 缺失值

  • 异常值

  • 不一致的值

  • 重复数据或者包括特殊符号的数据

缺失值处理

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

  • 识别缺失数据

  • 检测导致数据缺失的原因

  • 删除包含缺失值的实例或用合理的数值代替(插补)缺失值。

1、识别缺失数据:

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

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()可用来识别矩阵或数据框中没有缺失值的行

> 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则表示有缺失值。
第一行给出了没有缺失值的数目(共多少行)。
第一列表示各缺失值的模式。
最后一行给出了每个变量的缺失值数目。
最后一列给出了变量的数目(这些变量存在缺失值)。

aggr(a,prop=F,numbers=T)
matrixplot(a)

2. 缺失值处理

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

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

  • 删除含有缺失值的行

newdata<-na.omit(a)
newdata<-a[complete.cases(a),]
  • 删除含有缺失值的列

t(na.omit(t(a)))

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

lapply(Y, na.omit)
  • 预测插补法
> 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 
> 

相关文章

  • R 数据质量分析①

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

  • DAY7+ 学习笔记 by 康康

    《R与tidyverse——数据分析入门》学习笔记 R与tidyverse——数据分析入门[https://tia...

  • R小姐:数据探索之数据质量分析

    广招兵马并非遣之攻城拔寨,必当择优汰劣,去其糟粕。 如此军中尽是热血男儿,便攻无不克,战无不胜。 数据质量分析中的...

  • 【数据分析】-001数据探索篇-数据质量分析

    数据质量分析 数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确...

  • 利用rwda包抓取微博评论并分析

    工具:Rstudio,R(3.3.4) 参考文章: R微博数据分析 用R爬取微博评论数据

  • 使用MaxCompute进行数据质量核查

    数据质量基本介绍 什么是数据质量? 数据质量顾名思义就是数据的质量 数据质量是数据分析结论有效性和准确性的基础,也...

  • 使用MaxCompute进行数据质量核查

    数据质量基本介绍 什么是数据质量? 数据质量顾名思义就是数据的质量 数据质量是数据分析结论有效性和准确性的基础,也...

  • 大数据Clouder认证:使用MaxCompute进行数据质量核

    数据质量基本介绍 什么是数据质量? 数据质量顾名思义就是数据的质量 数据质量是数据分析结论有效性和准确性的基础,也...

  • 数据质量分析

    一、数据质量分析数据质量分析是数据挖掘中数据准备最重要的一环,是数据预处理的前提,是数据挖掘分析结论有效性和准确性...

  • 缺陷分析笔记

    缺陷分析的基础是数据质量,该如何保证数据质量? 高质量的数据,是缺陷分析的基础,可以从两个方面大的方面来保证数据质...

网友评论

    本文标题:R 数据质量分析①

    本文链接:https://www.haomeiwen.com/subject/vwpvaxtx.html