数据探索之数据预处理

来源:互联网 发布:软件开发招聘广告 编辑:程序博客网 时间:2024/06/05 04:43

数据探索步骤

  • 查看单个变量的分布情况,了解每一个变量值的分布情况并找出缺失值和离群点,以确定变量是否需要进行转换或者是否应该用于建模;
  • 查看目标变量(因变量)与预测变量(自变量)之间的关系,用于特征选择;
  • 查看预测变量之间的关系,删除冗余变量

重命名及数据重组

重命名

重命名可以采用 names()/rename()–reshape包/colnames(),rownames()

  • names(),系统自带函数,使用后会直接修改原数据;另外通过此函数还可以得到向量/数据框/list等数据结构的名字,重命名变量格式* names(data)[index]=’新名字’,其中index只能是数字,不能用旧名字*
    这里写图片描述
    names()函数得到list数据结构的名字
    这里写图片描述
  • reshape包中的rename()函数,使用后不会改变原数据结构的名字,可以新增一个变量接住这个改完名字的数据结构,同时接受更改多个变量,rename(dataframe,c(oldname = ‘newname’, oldname2 = ‘newname2’))
    这里写图片描述
  • colnames()/rownames(),可以获取数据框的名字又可以对数据框进行命名,当然重命名也可以
    这里写图片描述

数据组合(增加数据列)

增加数据框的变量within()/transform()/dplyr包-mutate()/直接用$符号增加一列

  • within(data frame,操作1,操作2…),中间新加的列需要进行命名,加个名字,否则新加入的变量将不进入新的数据框中;within函数可以改变数据框结构,with作用是定位当前数据框,不能对数据框进行改变,with之间的不同的操作之间是可以没有分号,但最后要有分号。此函数不改变原数据框
    这里写图片描述
    这里写图片描述
  • transform()函数,transform(dataframe,操作1,操作2),此函数的操作也要给新列加上名字(其实很正常,要给这一列命名,这一列才存在滴)
    这里写图片描述
    要给新加的列加名字的,给两列进行离差标准化
    这里写图片描述
  • dplyr包中的mutate(dataframe,操作1,操作2),不改变原数据框,同时也可以自动起名字,就这一点感觉就比transform与within实用
    这里写图片描述
  • 使用$符号直接加入一列,经常作为变量初始化。

数据组合

  • paste()拼接函数,直接对向量进行操作,向量化运算合并的内容有一个是向量就会是向量化运算
    这里写图片描述
  • rbind(),按照行合并;cbind(),按列合并
  • merge(x,y,by.x=’colname’,by.y=’colname’,all.x=T/F,all.y=T/F,all=T/f)

当连接按键不一样时候用by.x,by.y
这里写图片描述

这里写图片描述
当要保留df1全部元素时,df2只保留与df1相匹配的数据其余排除,没有的用NA呈现,此时就要用到了all.x(all.y)参数
这里写图片描述
df1与df2的数据全部保留,无法匹配的用NA代替,用到merge()的all=TRUE 参数.发现因子变量的缺失值外面还有个尖括号。。
这里写图片描述

缺失值

脏数据包括:缺失值,异常值(问卷调查,录入),不一致的值,重复数据,含有特殊符号(如#,¥)的数据

缺失值

缺失值产生的原因

  • 有些信息暂时无法获取,或者获取信息的代价太大;
  • 有些信息是被遗漏的,可能是人为忘记/认为不重要/忘记填/数据理解错误,机械原因/如数据采集设备故障/存储介质故障/传输媒体故障;
  • 属性值不存在,某些情况下,缺失值并不意味着有错误,对于某些对象来说属性是不存在的,如未婚人配偶名,未激活行用卡客户的激活日期

缺失值影响

  • 数据挖掘模型所表现出的不确定性更加显著,模型中蕴涵的确定性成分更难把握
  • 数据挖掘建模将丢失大量的有用信息
  • 包含空值的数据会使挖掘建模过程陷入混乱,导致不可靠的输出

对缺失值做简单统计分析

  • 统计缺失值的变量个数
  • 统计每个变量的未缺失数
  • 统计变量的缺失数及缺失率

缺失值处理步骤
这里写图片描述

  • 1)识别缺失数据;2)检查导致数据缺失的原因;3)对于不合理的值定义为缺失值;4)删除包含缺失值的实例或合理的数值代替(插补缺失值),有些函数自带na.rm参数会过滤掉缺失值
    这里写图片描述
    替换缺失值,发现有缺失值的不能是整个数据框拉出来处理,只能拿出一列来~
    这里写图片描述
  • 识别缺失值:NA(不可得)代表缺失值 is.na();NaN(不是一个数)代表不可能的值 is.nan();Inf和-Inf分别代表正无穷和负无穷 is.infinite(), 返回逻辑值
  • is.na()为向量化操作,判断向量中每一个元素是否为缺失值
  • 函数complete.cases() 可用来识别矩阵或数据框中没有缺失值的行。若每行都包含完整的实例,则返回TRUE的逻辑向量;若每行有一个或多个缺失值,则返回FALSE;此函数仅将NA和NaN识别为缺失值,无穷值(Inf和-Inf)被当作有效值, 返回的是vector形式
  • 利用complete.cases() 可以用来删除含有缺失值的行,并计算完整个案的比例;因为逻辑变量为0-1数,有个特色就是mean就等于1的百分比,可以用mean(complete.cases())来计算完整个案的比例
    这里写图片描述

探索缺失值模式

  • 列表显示缺失值:complete.cases()/mice包中的md.pattern()函数可生成一个以矩阵或数据框形式展示缺失值模式的表格

1代表没有缺失值,0代表有缺失值;第一行代表9个特征都没有缺失的个例,共有42个;倒数第二行代表span,Dream,NonD有缺失其他特征没有缺失的个例共有1个;最后一行给出每个变量中缺失值的数目。请自己用心体会。。。懒得写,下次有时间补上

这里写图片描述

  • 图形探究缺失数据:VIM包中提供了大量能可视化数据集中缺失值模式的函数,aggr(),matrixplot(),scattMiss()
aggr(sleep,prop=FALSE,numbers = TRUE)

这里写图片描述

aggr(sleep,prop=TRUE,numbers = TRUE)

这里写图片描述
matrixplot(sleep)函数可生成展示每个实例数据的图形

library(VIM)matrixplot(sleep) ##数值型数据被重新转换到[0,1]区间,并用灰度来表示大小:浅色表示值小,深色表示值大;默认缺失值为红色;所画出的图红色被阴影化处理,因此相对显眼;按照BodyWgt将序排列。

这里写图片描述
图形鼠标放在图片上变成加号时候,有可能有惊喜,有惊喜。matrixplot()在R中画的图,是可以交互的,可以点击按照不同的特征进行排序
跟matrixplot(sleep,sortby=)使用参数一样
这里写图片描述
有交互的例子(直接用R来编辑),可以查看不同种类的图,socool~
这里写图片描述
marginplot()函数:可生成一幅散点图,在图形边界展示两个变量的缺失值信息,以Gest(哺乳动物妊娠期时长)与Dream(做梦时长)关系为例

marginplot(sleep[c("Gest","Dream")],pch=c(20),col=c("darkgray","red","blue")) ##灰色箱形图,为除去空值后的箱形图,红色点为空值及个数统计

这里写图片描述

R数据结构

数据结构及元素在内存中的组织形式,R语言支持的数据类型有haracter(字符型),numeric(数值型),integer(整型),complex(复数型),logical(逻辑型)其中复数大部分编程语言不支持的,R支持。R语言的六大数据结构:

  • 一维数据结构:向量(数值变量)/因子(分类变量)
  • 二维数据结构:矩阵(所有数据元素为同型)/数据框(由向量组成,不要求所有元素同型)
  • 高维数据结构:数组/列表

数据采样

子集选区

subset()函数更好用,因为可以过滤行也可以选择列,相比filter,个人感觉

  • 直接过滤,对小型数据挺方便的
    这里写图片描述

  • subset()函数,相当于,相当于查询或按照条件过滤,subset(dataframe,行的筛选条件,选择展示的列)

这里写图片描述
- dplyr()包中的filter()函数,只能对数据框的行进行过滤,filter函数中行筛选的并条件用逗号可以了,虽然我并没觉得有啥用目前。。。filter(dataferame,条件1,条件2)
这里写图片描述
这里写图片描述

采样

增加删除特征

数据标准化

一维数据结构

R中没有标量的概念,一个数字是看做一个向量的;在R中因子使用整型数值进行存储。

一维数据构建方法:

  • c函数
  • :操作符,得到连续的数
  • seq(from, to,by,length.out,along.with),along.with的参数为一个向量名,表示新生成的向量的长度与along.with是一样滴
  • 因子构造,factor()及gl()函数
  • 如果不指定数字(level)和标签(labels)的对应关系,则按照标签字母顺序与数字进行对应,如果想人为指定两者对应关系,使用factor函数中levels参数
  • gl(n, k, length = n*k, labels = seq_len(n), ordered = FALSE),n表示因子个数,k表示重复次数,labels表示标签
    这里写图片描述
原创粉丝点击