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)
É 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()
ggmonthplot(interesse_ts) + theme_minimal()
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()
ggseasonplot(interesse_ts_mensal) + theme_minimal()
Agora é mais fácil ver que os meses onde há maior busca pelo termo gripe são Abril e Maio.
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