使用Prophet程序包按组进行预测并创建图

时间:2019-02-19 01:17:19

标签: r dplyr time-series forecasting prophet

我正在使用Prophet软件包对数据框中的分组进行预测,我想使用分组的数据框创建图。

我正在关注Using Prophet Package to Predict by Group in Dataframe in R中的答案。与下面的方法相比,有没有更简单的方法来创建图?

library(dplyr)
library(prophet)    

df <- data_frame(ds = seq(as.Date("2017/01/01"), as.Date("2019/01/01"), "month"), 
                     a = rnorm(n = 25, mean = 100000, sd = 7500), 
                     b = rnorm(n = 25, mean = 100000, sd = 7500), 
                     c = rnorm(n = 25, mean = 100000, sd = 7500))

a,b和c列是每种产品的销售编号。而且,我想对所有12种产品以及未来12个期间的总销售额进行预测。

因此,我整理数据框,然后进行组预测。

d1 <- df %>%
        gather(key = "prod", value = "y", a:c) %>%
        nest(-prod) %>%
        mutate(m = map(data, prophet)) %>%
        mutate(future = map(m, make_future_dataframe, period = 12, freq = "month")) %>%
        mutate(forecast = map2(m, future, predict)) %>%
        mutate(p = map2(m, forecast, plot))

输出看起来像这样:

# A tibble: 3 x 6
  dept  data              m             future                forecast               p       
  <chr> <list>            <list>        <list>                <list>                 <list>  
1 a     <tibble [25 x 2]> <S3: prophet> <data.frame [37 x 1]> <data.frame [37 x 16]> <S3: gg>
2 b     <tibble [25 x 2]> <S3: prophet> <data.frame [37 x 1]> <data.frame [37 x 16]> <S3: gg>
3 c     <tibble [25 x 2]> <S3: prophet> <data.frame [37 x 1]> <data.frame [37 x 16]> <S3: gg>

然后,我手动创建图,然后使用grid.arrange重新排列

gridExtra::grid.arrange(d1$p[[1]], d1$p[[2]], d1$p[[3]]

有什么方法可以更快,更自动地做到这一点?

2 个答案:

答案 0 :(得分:0)

我找不到将调用传递给# /usr/local/bin/kubectl --kubeconfig="wzone2.yaml" get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 10m quickstart-es ClusterIP 10.245.97.209 <none> 9200/TCP 3m11s quickstart-es-discovery ClusterIP None <none> 9300/TCP 3m11s 的方法,但是您可以使用grid.arrange来避免手动选择图。

do.call

示例:

do.call(gridExtra::grid.arrange, d1$p)

答案 1 :(得分:0)

单图: 使用cowplot

company [document]
  hours [map]
    - mon [map]
      - open: 08:00 [timestamp...?]
      - close: 18:00
    - tue [map]
      - open: 08:00
      - close: 18:00

多个地块: 使用purrr::walk function

cowplot::plot_grid(plotlist =d1$p)

.x是第一个参数,.f是函数。如果需要多个参数,则应使用walk2(2)或pwalk(3 +)