如何使用R中的并行处理来分析大型时间序列数据集

2024-01-31

我有一个大型时间序列数据集,使用顺序处理通常需要 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='.'))
}

我反映了评论中的观点,即该过程应尽可能矢量化。在没有可重现的示例的情况下,我将不得不对您的数据做出一些假设。我假设该系列一个一个地堆叠在另一个之上,并有一个变量指示该系列。如果不是,并且该系列位于单独的列中,您可以使用 reshape2 融合数据框,然后使用下面的代码。

如果您使用的是 Linux 或 Mac 机器,那么如果您能够对代码进行更多矢量化,则可以使用并行包和 mclapply。我偏爱 data.table - 如果您不熟悉,那么这可能是一个陡峭的攀登。

require(forecast)
require(data.table)
require(parallel)

#create 10 sample series -not 1800, but you get the idea.
data <- data.table(series=rep(1:10,each=60),
                   date=seq(as.Date("01/08/2009",format("%d/%m/%Y")),length.out=60,by="1 month"),
                   Volume=rep(rnorm(10),each=60)+rnorm(600))
#Define some functions to get the job done.    
getModel <- function(s) {
  data[order(date)][series==s][,ets(ts(Volume,start=as.yearmon(min(date),format("%d/%m/%Y")),frequency=12))]
}
getForecast <- function(s,forward=24) {
  model <- getModel(s)
  fc <- forecast(model,h=forward)
  return(data.frame(fc))
}
#Write the forecasts m at a time, where m is the number of cores.
Forecasts <- mclapply(1:10,getForecast)

使用数据框列表,您可以执行以下操作:

mclapply(Forecasts, function(x) {addDataFrame(x, sheet, col.names=FALSE, startRow=r))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用R中的并行处理来分析大型时间序列数据集 的相关文章

  • R foreach问题(某些进程返回NULL)

    我遇到了问题foreach我正在 R 中使用的程序的一部分 该程序用于运行不同参数的模拟 然后将结果返回到单个列表 然后用于生成报告 当并非所有分配的模拟运行都在报告上实际可见时 就会出现问题 从各方面来看 似乎只有分配的运行的一个子集实际
  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 将绘图调用拆分为多个块

    我正在编写一个图的解释 其中我基本上将在第一个块中创建图 然后描述该输出 并在第二个块中添加一个轴 然而 似乎每个块都会强制一个新的绘图环境 因此当我们尝试使用以下命令运行块时会出现错误axis独自的 观察 output html docu
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • Purrr::map_df() 删除 NULL 行

    使用时purrr map df 我偶尔会传递一个数据框列表 其中一些项目是NULL 当我做 map df 返回行数少于原始列表的数据框 我想发生的事情是这样的map df calls dplyr bind rows 它忽略了NULL价值观
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 所有 x 轴标签未以 45 度显示

    I m having the code as like below But I m not getting all the x axis labels and it is not displaying in 45 degree when I
  • 纵向比较 R 中的值...并进行扭转

    我有许多人在多达四个时间段进行的测试结果 这是一个示例 dat lt structure list Participant ID c A A A A B B B B C C C C phase structure c 1L 2L 3L 4L
  • 将不均匀的层次列表转换为数据框

    我认为还没有有人问过这个问题 但是有没有一种方法可以将具有多个级别和不均匀结构的列表的信息组合成 长 格式的数据帧 具体来说 library XML library plyr xml inning lt http gd2 mlb com c
  • 投资决策:R中的NPV、IRR、PB计算

    我正在尝试计算不同数量项目的净现值 NPV 内部收益率 IRR 和投资回收期 PB 时间 以评估哪个投资项目提供最佳回报 到目前为止 我可以为每个项目单独计算几行代码 但我想做的是 编写一个函数 它接受一个包含许多不同项目及其现金流的矩阵
  • read_html(url) 和 read_html(content(GET(url), "text")) 之间的区别

    我正在看这个很棒的答案 https stackoverflow com a 58211397 3502164 https stackoverflow com a 58211397 3502164 解决方案的开头包括 library httr
  • 闭包作为数据合并习惯的解决方案

    我正在尝试解决闭包问题 而且我think我发现了一个案例 他们可能会有所帮助 我有以下几部分需要处理 一组正则表达式 旨在清理状态名称 位于函数中 具有州名称 上述函数创建的标准化形式 和州 ID 代码的 data frame 用于链接两者
  • 如何将plot中的单变量列表图表转换为ggplot2格式?

    我正在搜索 但仍然找不到一个非常简单的问题的答案 我们如何使用 R 中的 ggplot2 生成一个变量的简单线图 我正在分析时间序列数据 并且想要对图表进行更复杂的操作 我认为如果我使用 ggplot2 代替会更好plot It works
  • 在 Shiny 中的用户会话之间共享反应数据集

    我有一个相当大的反应数据集 该数据集是通过轮询文件然后按预定义的时间间隔读取该文件而派生的 数据更新频繁 需要不断重新加载 诚然 重新加载可以增量完成并附加到 R 中的现有对象 但事实并非如此 然而目前 尽管会话中的数据相同 但此操作是针对
  • 如何使用 dplyr 独立过滤每列的行

    我有以下内容 library tidyverse df lt tibble tribble gene colB colC a 1 2 b 2 3 c 3 4 d 1 1 df gt A tibble 4 x 3 gt gene colB c

随机推荐

  • 在 AngularJS 之后加载 jQuery(而不是之前)

    为了让 angular element 指向 jQuery 而不是 jQLite 需要在页面头部加载 jQuery 然后再加载 Angular 然而 出于性能原因 尤其是在移动设备上 如果能够在加载 AngularJS 后加载 jQuery
  • Malloc 与自定义分配器:Malloc 的开销很大。为什么?

    我有一个图像压缩应用程序 现在有两个不同版本的内存分配系统 在第一个版本中 malloc 随处可见 在第二个版本中 我实现了一个简单的池分配器 它只分配内存块并将部分内存返回给 myalloc 调用 我们注意到使用 malloc 时会产生巨
  • Angular 2/4+ 路由动画,等待之前的路由动画完成

    我在 2 条路线上配置了以下动画 trigger routeAnimation transition enter style opacity 0 animate 1s style backgroundColor 1 transition l
  • 如何将 AWS 角色与 Packer 结合使用来创建 AMI

    我目前正在通过 Packer 构建 AMI 没有出现任何问题 但我将 AWS 凭证烘焙到我的脚本中 这不是我想要的 阅读 Packer 文档后 他们指出 如果没有找到凭证 它可以使用 AWS 角色 我已经创建了策略和角色 但我不清楚如何告诉
  • 查找 protobuf 模型的输入张量

    所以事情是这样的 我正在尝试使用已冻结到 pb ProtoBuf 文件的模型进行推断 我已正确冻结模型 选择我有兴趣用于推理的节点 仅输出 我还可以选择输出张量 但是当我输入张量时 它会给我一个类似的错误 InvalidArgumentEr
  • C#中如何一次性跳出多个循环?

    如果我有嵌套循环 并且我想立即打破所有嵌套循环怎么办 while true while shouldCont while shouldGo if timeToStop break Break out of everything In PHP
  • 使用 Material-UI 的 DataGrid 组件,如何在其中一个单元格中创建多层文本?

    我试图在一个单元格内有两行单独的文本 其中一行文本位于另一行之上 在 Material UI 的数据网格组件中 似乎无法实现任何工作 这是我尝试过的 const columns ColDef field name headerName Se
  • 如何将 Dataframe 单元格内的列表分解为单独的行

    我希望将包含列表的 pandas 单元格转换为每个值的行 所以 采取这个 如果我想解压并将值堆叠在nearest neighbors列 以便每个值都是每个值中的一行opponent索引 我最好怎么做 是否有适用于此类操作的 pandas 方
  • 从客户端的 ASP.NET PageMethods 获取异常详细信息

    我有一个 pagemethod 我可以从 JavaScript 调用它 说 Pagemethods MyMethod MyParameter onsucess onfailure 在后面的代码中 我有这样的内容 WebMethod publ
  • Numpy loadtxt 编码

    我正在尝试使用 numpy loadtxt 加载数据 我试图读取的文件使用 cp1252 编码 是否可以使用 numpy 将编码更改为 cp1252 下列 import numpy as np n 10 myfile path to myf
  • 如何使用 CLI 命令更改 GCP 中的项目

    如何将当前正在运行的项目更改为 GCP 中的另一个项目 谷歌云平台 帐户使用命令行界面命令除了使用之外gcloud init手动 gcloud projects list将列出我的帐户上运行的项目 我想使用 cli 命令将当前项目更改为列表
  • 获取变换后旋转物体的宽度和高度

    这个问题是问题的后续 变换后的宽度 高度 https stackoverflow com questions 7565542 width height after transform 我发布一个新问题 因为该问题仅解决宽度而不是高度 公式
  • Google 地图顶部的网格会产生正方形间隙

    我有这个函数可以在谷歌地图上生成一个网格 var map var gribBlockSize 1000 LOCATION MELB var startingLatLng new google maps LatLng 37 686997575
  • Angular Material 日期选择器位置错误(Chrome 除外)

    我正在使用角材料和md datepicker在我的项目中 我有一个表单 包含几个输入和
  • Video.js 下载块而不是整个视频

    我在用着VideoJs https github com videojs video js播放各种视频 有些比其他的大 这是一个简单的场景 开始播放总长度为 100mb 持续时间为 10 分钟的视频 如果用户跳到第 2 分钟 则会调用后端来
  • 具有相互计数的搜索列表(第二次尝试)

    我创建了新的数据集来解释我想要的结果 这是link http console neo4j org r dxwc8z 或者您可以使用 cypher 触发此命令 create 6 UserName dhansukh UserProfileID
  • RichTextBox高级编辑

    我想在我正在使用的 RichTextBox 中使用高级编辑功能 例如 粗体 斜体 下划线 字体颜色 我想知道如何获得一个显示在 RichTextBox 顶部且具有这些功能的工具栏 我想知道是否有任何内置功能提供此功能 或者我是否必须自己创建
  • 添加“auth:api”中间件 Laravel 5.3 后找不到路由

    我正在尝试使用 laravel 5 3 中的新 oauth2 功能从我的一个 laravel 项目到另一个项目进行 api 调用 我的新 Laravel 项目的 api php 路由文件中有这条路由 我想从旧项目中调用它 Route get
  • 以编程方式导航:React Router V4+ Typescript 给出错误

    使用 React Router v4 和 Typescript 以编程方式导航时出错 类型 Readonly 和 Readonly 我想在 API 调用成功或失败时重定向到特定路径 但无法做到这一点 路由器代码 import Browser
  • 如何使用R中的并行处理来分析大型时间序列数据集

    我有一个大型时间序列数据集 使用顺序处理通常需要 4 小时才能处理 1800 个时间序列 我正在寻找一种使用多个核心来减少这个时间的方法 因为我有许多这样的数据集需要定期处理 我用于顺序处理的 R 代码如下 有4个文件包含不同的数据集 每个