R语言学习之DataExpo2009练习
今天是2018年的最后一天,逝者如斯夫,不舍昼夜。想必记录学习的过程对学习本身还是有所帮助的,因此开始决定记录R语言的一些学习、练习过程同时和大家一起分享探讨。
这篇是关于利用ASA的DataExpo2009(链接 https://community.amstat.org/stat-computing/data-expo/data-expo-2009 )做的一些练习。主要是探索飞机起飞或到达延迟与什么因素有关。
软件设置:Win10操作系统,R版本3.5.1,RStudio
基本步骤包括:
- 数据预处理:将不同年份的csv文件合并成一个文件(这里可以有许多方法,例如用python或者shell语言),同时将需要用到的字符变量映射成数值变量(为了能利用big.matrix变量类型)。
- 读取整个数据(约12Gb):利用bigmemory包中的 read.big.matrix读取文件同时生成后援文件和描述符文件以便下次快速读取文件。
- 利用并行计算:为了缩短程序运行时间,利用parallel包和doSNOW包进行并行计算。
以下为步骤2和3的具体代码:
#步骤2: load bigmemory 包,读取整个数据集(read.big.matrix)同时生成后援文件(1987_2008_All.bin)和描述符文件(1987_2008_All.desc),变量类型为整型#######
library(bigmemory)
x <-read.big.matrix('1987_2008_All.csv', header = TRUE, backingfile =
'1987_2008_All.bin', descriptorfile =
'1987_2008_All.desc', type = 'integer')
#步骤3
delay_info <- function(varname, delayname){
#定义函数
library(parallel)
library(doSNOW)
ncores <- max(1, detectCores()-2) #设置想要的并行计算核数
c1 <- makeCluster(rep('localhost', ncores), type = 'SOCK') #创建集群
registerDoSNOW(c1)
y <- attach.big.matrix('1987_2008_All.desc') #利用在步骤2生成的描述符文件读取整个数据集(快且占用内存少)
indexs <- 0 #行号和分组变量
if((delayname %in% c(