R语言数据预处理有很多包,但由于历史原因,部分包读写数据、数据转化速度较慢,本文主要介绍部分常用的高效的R语言数据预处理包。推荐使用Revolution Analytics公司提供的R版本,同时Rstudio的免费IDE也非常适合编写R脚本程序。
-
快速读取数据readr包
基于C++的SourceFile, SourceString, SourceRaw的文件API接口,避免了数据的复制和分配,能更加快速的读取格式化的数据。同时,readr将读取的数据列转化为多种不同类型的vector,如BigInteger (64 bit)和Time类型。
读取文件时建议使用read_csv()和write_csv() ,可以加快IO性能。
-
使用dplyr和tidyr清洗数据
dplyr相比plyr更快更高效,能和tidyr一起高效清洗数据。同时也能读取数据库的数据、处理超过内存容量的数据。dplyr能对数据进行行和列的筛选select、group、combine(类似sql中的左连接(保存左表中的数据行、右表中未出现的数据行删除)、右连接、全连接、内连接等)、summarise等。除此之外R采用%>%来对于数据进行类似linux中的pipline处理,能保证数据处理更高效,可读性更好。
tidyr能有效整理数据,经常和dplyr配合使用。更多详细的函数命令可以参考tidyR和dplyr用法
-
并行计算包doParallel
使用randomForest等包时,由于需要生成多个CART树,需要较大的计算量和内存,通常可使用foreach、doParallel、parallel等包进行处理数据。比如使用如下代码。
library(randomForest)
library(foreach)
cl <- makeCluster(4)
registerDoParallel(cl)
rf .model<- foreach(ntree=rep(250, 4), .combine=combine,
.packages='randomForest') %dopar%
randomForest(x = data.matrix(train[,feature.names]),y= train$target,ntree=ntree)
stopCluster(cl)
-
安装OpenBLAS、revolutionary R的 MKL加速矩阵运算
通常R语言采用单个CPU进行矩阵运算,这样对于计算密集型的任务很慢,可以安装OpenBLAS、MKL等包进行多核的矩阵运算。比如Revolution R就提供了专门的MKL安装包,推荐https://mran.revolutionanalytics.com/download/#download,可以加速矩阵运算。
-
使用openMP和CPP编写R包
R语言底层的代码可以基于C\C++\Fortran语言进行计算,并打包为R packages进行使用,应此对于很多需要并行计算的R语言程序,可以使用gcc、openMP等支持共享内存系统中的的多核并行包,可以非常快的加速计算。
参考资料:
(1)http://www.revolutionanalytics.com/get-revolution-r
(2)http://www.r-bloggers.com/r-r-with-atlas-r-with-openblas-and-revolution-r-open-which-is-fastest/
(3)http://www.r-bloggers.com/lang/chinese/1131