使用 Prophet 包按组预测并创建图
Using Prophet package to forecast by groups and create plot
我正在使用 Prophet 包在数据框中进行分组预测,我想使用分组数据框创建图表。
我正在关注 中的答案。与我在下面所做的相比,是否有更简单的方法来创建绘图?
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 列是每种产品的销售数字。而且,我想 运行 预测所有 3 种产品和接下来 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]]
有没有什么方法可以更快、更自动地做到这一点?
我找不到将调用传递给 grid.arrange
的方法,但您可以使用 do.call
来避免手动选择地块。
do.call(gridExtra::grid.arrange, d1$p)
示例:
library(dplyr)
library(prophet)
library(tidyr)
library(purrr)
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))
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))
单图:
使用 cowplot
cowplot::plot_grid(plotlist =d1$p)
多个地块:
使用 purrr::walk function:
walk(.x=d1$p,.f=gridExtra::grid.arrange)
.x 是第一个参数,.f 是函数。如果您需要多个参数,那么您应该使用 walk2 (2) 或 pwalk (3+)
我正在使用 Prophet 包在数据框中进行分组预测,我想使用分组数据框创建图表。
我正在关注
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 列是每种产品的销售数字。而且,我想 运行 预测所有 3 种产品和接下来 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]]
有没有什么方法可以更快、更自动地做到这一点?
我找不到将调用传递给 grid.arrange
的方法,但您可以使用 do.call
来避免手动选择地块。
do.call(gridExtra::grid.arrange, d1$p)
示例:
library(dplyr)
library(prophet)
library(tidyr)
library(purrr)
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))
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))
单图: 使用 cowplot
cowplot::plot_grid(plotlist =d1$p)
多个地块: 使用 purrr::walk function:
walk(.x=d1$p,.f=gridExtra::grid.arrange)
.x 是第一个参数,.f 是函数。如果您需要多个参数,那么您应该使用 walk2 (2) 或 pwalk (3+)