Использование пакета Prophet для прогнозирования по группам и создания сюжета - PullRequest
0 голосов
/ 19 февраля 2019

Я использую пакет Prophet для прогнозирования в группах в кадре данных и хочу создать графики с использованием сгруппированного блока данных.

Я следовал за ответами в Использование пакета Prophet для прогнозирования по группам вРамка данных в 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 являются номерами продаж для каждого продукта.И я хотел бы запустить прогнозирование для всех 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]]

Есть ли способы сделать это быстрее и автоматически?

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Одиночный участок: Использование Cowplot

cowplot::plot_grid(plotlist =d1$p)

Несколько графиков: Использование purrr :: Функция ходьбы :

walk(.x=d1$p,.f=gridExtra::grid.arrange)

.x - первый параметр, а .f - функция.Если вам нужно более одного параметра, тогда вы должны использовать walk2 (2) или pwalk (3 +)

0 голосов
/ 30 мая 2019

Я не смог найти способ передать вызов на 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)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...