美文网首页此地古同R语言
R小姐:缺失值 and 异常值的分析、处理

R小姐:缺失值 and 异常值的分析、处理

作者: 鲨瓜 | 来源:发表于2018-11-24 16:40 被阅读1次

    现实生活中我们遇到的绝大部分数据都包含有缺失值,因此如何处理缺失值变得尤其重要。

    缺失值的处理一般分为两个步骤:缺失值的识别,缺失值的处理。

    缺失值的识别:is.na()    /   complete.cases()  
    缺失值的处理:删除法    行删除(na.omit),列删除(data[ ,- p])
                 替换法    利用均值、中位数、众数替换缺失值
                 插补法    回归模型插补、多重插补
    

    多重插补较为复杂,下期内容消化。

    1

    识别缺失值

    #加载数据包
    library('mice')
    library('VIM')
    library('ggplot2')
    library('tidyverse')
    
    #设置工作空间
    setwd('D:/chapter3/示例程序')
    #读取数据
    saledata <- read.csv(file = './data/catering_sale.csv',header = T)
    #更改数据框的变量名
    saledata <- rename(saledata,Date=日期,Sale=销量)
    
    > #统计Sale列的缺失值个数
    > sum(is.na(saledata$Sale))
    [1] 1> #统计sale列的缺失值比例
    > mean(is.na(saledata$Sale))
    [1] 0.004975124> #以行为单位,统计不完整数据的个数
    > sum(!complete.cases(saledata))
    [1] 1> #以行为单位,统计不完整数据的比例
    > mean(!complete.cases(saledata))
    [1] 0.004975124
    
    #利用mice包中函数的查看缺失值
    md.pattern(saledata)
    
    image

    图形显示的更直观,200个完整数据,1个Sale数据缺失。

    #利用VIM包中函数查看缺失值
    aggr(saledata,prop=T,numbers=T,col=c('grey80','cornsilk'))
    
    image

    略粉色表示缺失数据,灰色表示完整数据。显示了两种数据的比例。

    2

    处理缺失值

    1.分而治之:将缺失数据与完整数据分开

    #将数据框中的Date列转换成数字
    saledata$Date <- as.numeric(saledata$Date)
    #返回sale列中的缺失位置
    sub <- which(is.na(saledata$Sale))
    #返回除缺失值的所有行
    file1 <- saledata[-sub,]
    #返回含有缺失值的行
    file2 <- saledata[sub,]
    

    2.删除法

    #删除法得到的数据,转存为result1
    result1 <- file1
    

    3.均值替换法

    #计算完整数据的均值
    avg_file1 <- mean(file1$Sale)
    #将均值替换缺失数据,有几个缺失数据就写几次
    file2$Sale <- rep(avg_file1,1)
    #将两个数据框合并
    result2 <- rbind(file1,file2)
    #利用完整数据创建一个线性模型
    model <- lm(Sale ~ Date,data = file1)
    #利用模型预测缺失数据
    file2$Sale <- predict(model,file2)
    #将两个数据框合并
    result3<- rbind(file1,file2)
    

    3

    异常值

    对于异常值来说,处理步骤与缺失值一样:识别、处理。

    异常值可被当做缺失值处理。

    1.识别异常值

    散点图初判离群值

    #传递数据
    ggplot(saledata,aes(x=Date,y=Sale)) +
      #设置散点图的数据点的类型,颜色,透明度
      geom_point(shape=19,colour='red',alpha=.4) +
      #设置背景主题
      theme_bw() +
      #删除网格线
      theme(panel.grid = element_blank(),
            ##设置边框颜色
            panel.border = element_rect(colour = 'blue'),
            #设置坐标轴标签字体,类型,颜色
            axis.text = element_text(family = 'serif',face = 'italic',colour = 'blue'),
            #设置坐标轴标题字体,类型,颜色
            axis.title = element_text(family = 'serif',face = 'italic',colour = 'blue'))
    
    image

    识图,与大量数据分开的便是异常值(也称离群值)

    2.箱图再判离群值

    #传递数据
    ggplot(saledata,aes(x='Sale',y=Sale)) +
      #设置箱图的填充色,边框色,宽度
      geom_boxplot(fill='cornsilk',colour='grey60',width=0.2,
                   #设置异常值类型,大小
                   outlier.shape = 21,outlier.size = 2,
                   #设置异常值边框色,填充色
                   outlier.colour = 'red',outlier.fill = 'white') +
      #设置背景主题
      theme_bw() +
      #删除网格线
      theme(panel.grid = element_blank(),
            #设置边框颜色
            panel.border = element_rect(colour = 'lightblue'),
            #设置坐标轴标签
            axis.text = element_text(family = 'serif',face = 'italic',colour = 'blue'),
            #设置坐标轴标题
            axis.title = element_text(family = 'serif',face = 'italic',colour = 'blue'))
    
    image

    箱图显示离群值更明显一些,大家自行查阅箱图判定离群值的原理。


    由于利用多重插补法处理缺失值较为复杂,下期定当补充。

    回台回复:2018/11/23。获取往后文章所用数据。

    下期再见。

    你可能还想看

    等你很久啦,长按加入古同社区

    image

    相关文章

      网友评论

        本文标题:R小姐:缺失值 and 异常值的分析、处理

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