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 数据质量分析①

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