Neste post, você aprenderá a:

  • Baixar dados do Google Trends com o R;
  • Usar gráficos de séries temporais do pacote forecast para analisar a sazonalidade de uma série temporal;
  • Converter uma série semanal em mensal;

O que é Sazonalidade?

No contexto de Séries Temporais, Sazonalidade se refere a um padrão fixo que se repete no mesmo período do tempo. Podemos citar alguns exemplos de cabeça, como vendas de trajes de banho no verão e de casacos no inverno. Modelar a sazonalidade de uma série temporal é fundamental na aplicação de diversos modelos de previsão.
Imagine que você é dono de uma farmácia ou um gestor de comunicação de alguma secretaria de Saúde e deseja saber em qual época do ano as pessoas costumam ficar mais doentes e/ou buscar por mais informações sobre a gripe, por exemplo. Uma fonte de informação útil, rápida e barata para o seu problema pode ser o Google Trends, que mostra o interesse das pessoas sobre um determinado tema ao longo do tempo.
O pacote gtrendsR fornece uma interface simples de conexão do R com o Google Trends, sem a necessidade de autenticação por login ou algo do tipo.
Para este post, usamos os seguintes pacotes:

 library(gtrendsR) # interface com o Google Trends
library(tidyverse) # Pq nao vivo sem ele
library(magrittr) # Nem ele
library(forecast) # Serve não só para previsões mas também para alguns gráficos legais
library(lubridate) # manipulação de datas

Vamos então baixar dados referentes a buscas pelo termo gripe. Usamos a função gtrends para baixar os dados, no qual atribuímos “BR” ao argumento geo para especificar que apenas buscas no Brasil sejam retornadas.

busca <- "gripe"
res <- gtrends(keyword = busca, geo = "BR")
res plot(res)
unnamed chunk 2 1

É perceptível que essa série temporal possui um forte componente sazonal, pois o número de pesquisas é maior no primeiro semestre que no segundo.
O pacote forecast fornece algumas funções de gráficos úteis, mas para usá-las será necessário transformar os dados acima em objetos da classe ts. A variável res, na qual foi salva o output da função gtrends, é na verdade uma lista de dataframes. Um deles, o interest_over_time, é o que possui os dados plotados acima.

df str(df)
## 'data.frame': 261 obs. of 6 variables:
## $ date : POSIXct, format: "2012-10-07 00:00:00" "2012-10-14 00:00:00" ...
## $ hits : int 8 10 9 8 8 7 8 8 7 6 ...
## $ keyword : chr "gripe" "gripe" "gripe" "gripe" ...
## $ geo : chr "BR" "BR" "BR" "BR" ...
## $ gprop : chr "web" "web" "web" "web" ...
## $ category: int 0 0 0 0 0 0 0 0 0 0 ...
# transformar em ts
interesse_ts frequency = 52)

Note que usamos a função lubridate::decimal_date() para converter a data de início da série em decimal (formato aceito pela função ts) e definimos a frequência como 52 pois a série é semanal (e um ano possui 52 semanas).
Com isso, já podemos usar diversos gráficos do pacote forecast para auxiliar a interpretação do componente sazonal da série:

ggseasonplot(interesse_ts) + theme_minimal()
unnamed chunk 4 1 1

ggmonthplot(interesse_ts) + theme_minimal()

unnamed chunk 4 2

Os dois gráficos mostram claramente que existe um pico de interesse da pessoas pela gripe no segundo trimestre do ano, mais especificamente entre as semanas 15 a 21.
Talvez o fato de a série ser semanal dificulte a análise da sazonalidade neste caso. Afinal de contas, é muito mais fácil saber em que mês estamos do que em qual semana.
Por isso, vamos transformar a série de semanal para mensal. Isso é feito usando a função lubridate::floor_date(), que recebe uma data de input e retorna o primeiro dia da referência escolhida. Por exemplo:

data

Aplicando o que aprendemos:

# transformar série semanal em mensal
interesse_mensal %
mutate(date = as.Date(floor_date(date, "month"))) %>%
# agrupar por mes
group_by(date) %>%
# calcular a qtd de pesquisas por mes
summarise(hits = sum(hits))
# refazer os gráficos de sazonalidade:
interesse_ts_mensal start = lubridate::decimal_date(min(interesse_mensal$date)),
frequency = 12)
ggsubseriesplot(interesse_ts_mensal) + theme_minimal()
unnamed chunk 6 1
ggseasonplot(interesse_ts_mensal) + theme_minimal()
unnamed chunk 6 2

Agora é mais fácil ver que os meses onde há maior busca pelo termo gripe são Abril e Maio.

ST

Gostaram do post? No próximo vou falar um pouco sobre sazonalidade de algumas cidades turísticas!
Quer aprender um pouco mais sobre séries temporais o curso em São Paulo começa esse mês. Mais informações aqui