我有一个大型时间序列数据集,使用顺序处理通常需要 4 小时才能处理 1800 个时间序列。我正在寻找一种使用多个核心来减少这个时间的方法,因为我有许多这样的数据集需要定期处理。
我用于顺序处理的 R 代码如下。有4个文件包含不同的数据集,每个文件包含超过1800个系列。我一直在尝试使用 doParallel 独立分析每个时间序列并将结果连接到一个文件中。即使是 CSV 文件也可以。
# load the dataset
files <- c("3MH Clean", "3MH", "6MH", "12MH")
for (j in 1:4)
{
title <- paste("\n\n\n Evaluation of", files[j], " - Started at", date(), "\n\n\n")
cat(title)
History <- read.csv(paste(files[j],"csv", sep="."))
# output forecast to XLSX
outwb <- createWorkbook()
sheet <- createSheet(outwb, sheetName = paste(files[j], " - ETS"))
Item <- unique(unlist(History$Item))
for (i in 1:length(Item))
{
title <- paste("Evaluation of item ", Item[i], "-", i, "of", length(Item),"\n")
cat(title)
data <- subset(History, Item == Item[i])
dates <- unique(unlist(data$Date))
d <- as.Date(dates, format("%d/%m/%Y"))
data.ts <- ts(data$Volume, frequency=12, start=c(as.numeric(format(d[1],"%Y")), as.numeric(format(d[1],"%m"))))
try(data.ets <- ets(data.ts))
try(forecast.ets <- forecast.ets(data.ets, h=24))
IL <-c(Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i],Item[i])
ets.df <- data.frame(forecast.ets)
ets.df$Item <- IL
r <- 24*(i-1)+2
addDataFrame(ets.df, sheet, col.names=FALSE, startRow=r)
}
title <- paste("\n\n\n Evaluation of", files[j], " - Completed at", date(), "\n\n\n")
cat(title)
saveWorkbook(outwb, paste(files[j],"xlsx",sep='.'))
}