社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

R 机器学习 | 数据预处理

生信菜鸟团 • 3 年前 • 419 次点击  

本文为 机器学习实战 | 数据预处理(基于 Python) 的姊妹篇 R 语言实现。

1. 变量名转换

转换大小写:使用 toupper() 和 tolower() 函数去除特殊符号,例如 .,空格等:可用 gsub() 进行替换或 strsplit() 根据字符分割并提取字符串。

2. 数值离散化

所谓数值离散化就是把连续型数据转变成离散数据,比如把连续的收入值分为 $0~$10000、$10001~$25000、$25001~$50000、$50001~$75000、$75001~$100000 和 $100001~$150000。使用 cut() 函数可以很方便地进行这类操作。

cut(x, breaks, labels = NULL,     include.lowest = F, right = T, dig.lab = 3,    ordered_result = F)

x:数值向量breaks:指定分割点的数量的整数,或者制定分割点位置的向量labels:输出因子水平标签include.lowest:表明临界点是否包含在内right :表示区间是否左开右闭(当right = F,区间左闭右开)dig.lab:当产生标签时,标签有效数字ordered_results:返还值是否转换成有序因子

3. 日期处理

可用 lubridate 包处理日期和时间数据。

解析日期与时间

lubridate 包的 ymd() 系列函数来读取日期数据。ym 和 d 分别对应年、月和日。读取日期时,根据日期时间的元素顺序,选择相应的函数。例如,在下面的日期中,月份在首,其次是日,然后是年。所以用 mdy() 函数:

> mdy("12-01-2010")[1] "2010-12-01 UTC"

要是顺序是日月年,那就得用 dmy() 函数:

> dmy("12-01-2010")[1] "2010-01-12 UTC"

当然也有 ydm() 函数等等。

这些函数会自动识别日期中的分隔符,包括:-/. 和 ``(无分隔符)。

操作日期与时间

每个日期时间都是不同元素的组合,我们可调用不同的函数来提取对应信息。

4. 对分类数据进行编码

可用 car 包的 recode 函数将数值或者字符向量、factor 变量重新编码。

recode(var, recodes, as.factor, as.numeric=TRUE, levels)

var:为数值向量,字符向量或者 factor 变量recodes:为设定重新编码规则的字符串as.factor:如果 var 是一个 factor,则默认为TRUE,否则为 FALSEas.numeric:默认为 TRUE,当 as.factor = False 时输出结果指定为数字levels:指定新的编码分组的顺序(默认是按照分组名称排序)

xrep(1:3,3)x## [1] 1 2 3 1 2 3 1 2 3recode(x, "c(1,2)='A'; 


    
    else='B'")## [1] "A" "A" "B" "A" "A" "B" "A" "A" "B"Recode(x, "1:2='A'; 3='B'")## [1] "A" "A" "B" "A" "A" "B" "A" "A" "B"

5. 合并数据集

可用 merge()cbind() 和 rbind() 来合并数据集。

merge():根据列名合并数据集

merge(x,y,by = , by.x = , by.y = , all = , all.x = , all.y = ,...)

x:第一个数据框y:第二个数据框byby.xby.y:指定两个数据框中匹配列名称。默认使用两个数据框中相同列名称all all.xall.y:指定合并类型的逻辑值。

另外还有,cbind() 根据列合并数据集以及 rbind() 根据行合并数据集,当然也可以用 dplyr 中的 join 等等。

6. 使用 dplyr 包进行数据操作

dplyr 也是我们常用于处理数据框的工具,例如:

filter():按行筛选样本select():按列选择变量arrange():按给定的列名依次对行进行排序mutate() 和 transmute():根据一个或多个变量生成新变量或重定义已有变量。mutate() 的返回结果会保留原有变量,而 transmute() 则只返回新变量。distinct:去重,仅返回无重复的行

7. 处理缺失数据

填充缺失值

可用 e1071 包中的 impute() 函数填充缺失值:

impute(x, what = c("median", "mean"))

what="median" 表示用对应列的中位数填充;what="mean" 表示用对应列的平均值填充。

impute() 返回的是一个矩阵,而不是一个数据框。所以我们必须多加一步,将结果转换回数据框的形式。

删除缺失值

可用 complete.cases() 函数判断数据框中没有缺失值的行,进一步进行删除。或者直接用 na.omit()

newdatana.omit(data)
newdatadata[complete.cases(data),]

8. 特征缩放:z-score 标准化

stats 包中的 scale() 函数,可以用于缩放数值,使用平均值和标准差对数据集进行标准化。

scale(x, center = TRUE, scale = TRUE)

x:数据矩阵center:逻辑值或长度为 x 列数的数值向量,其中“类似数字”表示如果is.numeric(。)不正确,则as.numeric(。)将成功应用scale:逻辑值或长度为 x 列数的数值向量

center  的值确定如何执行列中心化。如果 center 是数字向量,则 x 的每一列都将减去相应值。如果 center 为 TRUE,则通过减去 x 相应列的均值(省略 NA)来完成中心化,如果 center 为 FALSE,则不进行中心化。

scale 的值确定中心化后如何执行列缩放。如果 scale 是一个数字向量,则 x 的每一列都将除以 scale 中的相应值。如果 scale 和 center 都为 TRUE 则缩放是将 x 除以它们的标准差。如果 scale 为 FALSE,则不进行缩放。

所以默认情况下 scale(x) 就相当于 (x - mean(x)) / sd(x)


文末友情推荐

2021生信学习班起航,先送福利96核心384G内存的超级服务器(共享)使用权一年


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/107385
 
419 次点击