我有以下代码行:
train <- read.csv("avito_train.tsv", sep='\t', stringsAsFactors = F)
培训文件大约为3 GB。加载所有数据需要很长时间。
我的问题是,一位合适的数据科学家会加载所有数据还是只使用一个子集?我注意到我可以使用nrows
参数来指定要读取的最大行数。
我还认为将所有这些数据加载到语料库中(我必须这样做)可能会非常耗时。对于使用大量培训和测试数据编写机器学习程序的推荐策略是否存在普遍共识?
答案 0 :(得分:2)
有很多方法可以优化R中的数据加载。你告诉R关于它必须加载的数据结构越多,它加载它的速度就越快。具体来说,如果您可以告诉它有多少列,每个列的数据类型是什么,如果您也知道数据有多少行R将更容易加载它。
以下是我尝试提高加载文件速度的示例。首先,我得到文件中的列数:
ncols <- length(read.table(file,header=TRUE,sep="\t", nrows=1, na.strings=c("null","NA"),comment="",quote=""))
在这个特定的文件中,我知道我不想要前两列,其余的都是数字,所以我使用了以下read.table调用
tumor_data <- read.table(file,header=TRUE,sep="\t",
colClasses=c("NULL","NULL",rep("numeric",ncols-2)),
na.strings=c("null","NA"),comment="",quote="")
请注意,这个文件并不像你的那么大,所以我想加载3Gb文件还需要一段时间。
您可以查看此页Quickly reading very large tables as dataframes in R上的答案,我发现这些答案很有帮助。如果read.table不适合您,您可能需要考虑使用sqldf包或somethign类似。