在进行数据分析之前,我们往往需要对数据进行预处理,而最重要一部分就是怎么处理哪些缺失的数据。

通常的方法有四种:

  1. 删除这些缺失的数据。
  2. 用最高频数来补充缺失数据。
  3. 通过变量的相关关系来填充缺失值。
  4. 通过案例之间的相似性来填充缺失值。

下面通过R语言对上面4种方法进行说明(algae数据来源:http://www.dcc.fc.up.pt/~ltorgo/DataMiningWithR/extraFiles.html)

#方法一:删除这些缺失的数据。
algae[!complete.cases(algae),];#显示所有含有缺失数据的行
nrow(algae[!complete.cases(algae),]);#行数ncol():列数
algae<-na.omit(algae);#删除缺失数据的行。
data(algae);
manyNAs(algae,0.3);#得到缺失值个数大于列数30%的行标。
apply(algae,1,function(x)sum(is.na(x)));#统计每行中含有缺失数据的个数。
apply(algae,2,function(x)sum(is.na(x)));#统计每列中含有缺失数据的个数。
algae<-algae[-c(62,199),];#删除含有较多缺失数据的行。
#方法二:用最高频数来补充缺失数据
data(algae);
algae[48,"mxPH"]<-mean(algae$mxPH,na.rm=T);#使用平均值(正态分布)补充缺失的数据。
algae[is.na(algae$Cl),"Cl"]<-median(algae$Cl,na.rm=T);#使用中位数补充这一列中所有缺失的数据
#方法三:通过变量的相关关系来填充缺失值
#1、使用函数cor()来获取变量之间的相关值矩阵。
cor(algae[,4:18],use="complete.obs");
symnum(cor(algae[,4:18],use="complete.obs"));
#2、通过得到的关联矩阵,得到哪些变量之间有较强的线性关系
data(algae);
algae<-algae[-manyNAs(algae),];
lm(PO4~oPO4,data=algae);#通过函数lm(,)来得到它们线性关系PO4=a+b*oPo4;
algae[28,"PO4"]<-42.897+1.293*algae[28,"oPO4"];
#建立一个函数;
fillP04<-function(x){
      if(is.na(x))
        retrun(NA)
      else
        return(42.897+1.293*x)
}
algae[is.na(algae$PO4),"PO4"]<-sapply(algae[is.na(algae$PO4),"oPO4"],fillP04);
histogram(~mxPH|size*speed,data = algae);
#方法四: 通过案例之间的相似性来填充缺失值
algae<-knnImputation(algae,k=10);
algae<-knnImputation(algae,k=10,meth="median");

对数据缺失的处理(R)的更多相关文章

  1. 数据科学实战手册(R+Python)书中引用资料网址

    本文会持续将<数据科学实战手册(R+Python)>一书中的附带参考资料网址手打出来, 方便访问. 由于书中的参考资料网址太多, 这个文档将可能花费一段时间才能完成. 第一章 P7  Rs ...

  2. 05-pandas索引切片读取数据缺失数据处理

    引入 numpy已经能够帮助我们处理数据,能够结合matplotlib解决我们数据分析的问题,那么pandas学习的目的在什么地方呢? numpy能够帮我们处理处理数值型数据,但是这还不够 很多时候, ...

  3. 大数据工具比较:R 语言和 Spark 谁更胜一筹?

    本文有两重目的,一是在性能方面快速对比下R语言和Spark,二是想向大家介绍下Spark的机器学习库 背景介绍 由于R语言本身是单线程的,所以可能从性能方面对比Spark和R并不是很明智的做法.即使这 ...

  4. 数据缺失值的处理 | R包 - mice

    有些情况下缺失值会零星的分布在数据当中,这时去掉所有包含缺失值的样本就不行了,直接用0去填补缺失值也不行. 所以此时就应该用拟合的方法来填补缺失值. library(mice) init = mice ...

  5. OPENQUERY 无行返回 无数据返回 数据缺失

    用SQL Server 2008 R2 的 Oracle Provider for OLE DB 链接Oracle . 在SQL Server中使用下面查询语句,没有数据返回 但是再PL/SQL中查找 ...

  6. Excel VBA简单使用——数据缺失处理

    VBA(Visual Basic for Applications)是VB的一种宏语言.用来扩展应用程式的功能.特别是Microsoft Office软件. 转载请注明原文地址:http://blog ...

  7. 数据科学中的R和Python: 30个免费数据资源网站

    1 政府数据 Data.gov:这是美国政府收集的数据资源.声称有多达40万个数据集,包括了原始数据和地理空间格式数据.使用这些数据集需要注意的是:你要进行必要的清理工作,因为许多数据是字符型的或是有 ...

  8. Oracle EBS PO rcv_shipment_headers 数据缺失

    Datafix : How to Recreate Missing Receipt or Shipment Header Records (RCV_SHIPMENT_HEADERS table) (D ...

  9. R语言︱处理缺失数据&&异常值检验、离群点分析、异常值处理

    在数据挖掘的过程中,数据预处理占到了整个过程的60% 脏数据:指一般不符合要求,以及不能直接进行相应分析的数据 脏数据包括:缺失值.异常值.不一致的值.重复数据及含有特殊符号(如#.¥.*)的数据 数 ...

随机推荐

  1. win7下使用git

    1 安装git for window 2 安装tortoiseGit 3 生成public key 3.1 打开git bash 3.2 创建~/.ssh文件夹 mkdir ~/.ssh 3.3 配置 ...

  2. Gradle之恋-任务2

    由于任务作为Gradle的核心功能模块,多花点精力是值得的,本文继上一篇主要涉及到:任务的执行顺序.为任务添加组和描述.跳过任务.扩展任务属性.定义默认任务. 任务顺序 如果构建(build)不能在清 ...

  3. 启动phpstyle Apache的80端口被win7的System PID=4的进程占用的解决方法

    学习前端是,用到Ajax,php语言,操作mysql数据库,浏览器无法解析php代码(把源码输出):原因,我之前用的是tomcat服务器写jsp,servlet,php用的是apache服务器,没有配 ...

  4. 1197: [HNOI2006]花仙子的魔法

    1197: [HNOI2006]花仙子的魔法 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 762  Solved: 443[Submit][Stat ...

  5. linux内核链表---挑战常规思维

    一.普通链表 1.一般教材上的链表定义如下: struct node{ int content: node *next: }: 它将指针域放在链表节点中,上一个节点指针域中的值指向下一个节点的首地址, ...

  6. Jmeter 正则提取器

    背景: 用户购买商品,为防止CSRF攻击,在购买请求参数中要携带token参数,token的值是随机加密处理的,每次登录值都会刷新 场景: 用户登录站点,访问商品列表,购买商品 脚本设计: 1.登录 ...

  7. 【WCF】错误处理(二):错误码―—FaultCode

    先来说说SOAP消息中错误消息的包装结构,一条SOAP错误消息的大致形式如下: <s:Fault> <faultcode xmlns:a="me-cust-error&qu ...

  8. TFS2017代码搜索功能

    当团队或者公司的研发中心的代码库扩展到了一定程度,在代码库中查找一些需要的代码会变的比较困难.比如敏捷模式下的项目小组希望能够找到并重用其他小组开发的一些基础性的功能代码,我们通常需要去找当事人去询问 ...

  9. shell 之时间戳

    vim 1.sh #/bin/bash##by cc read -p "Please input yourtime:" timea=$timeif [ $a != 0 ] then ...

  10. JAVA-Servlet-ServletConfig 与 ServletContext 的区别

    什么是ServletConfig? Servlet容器初始化一个servlet对象时,会为这个servlet对象创建一个servletConfig对象.在servletConfig对象中包含了serv ...