No último mês, a Google vem disponibilizando relatórios sobre a mobilidade das comunidades com o intuito de fornecer informações sobre o que mudou em resposta às políticas destinadas a combater o COVID-19. Os relatórios traçam tendências de movimento ao longo do tempo por região geográfica, em diferentes categorias de lugares, como varejo e recreação, compras e farmácias, parques, estações de trânsito, locais de trabalho e residenciais.
O relatório mais recente foi publicado hoje (29/01/2023). Vamos aproveitar que, junto do relatório, um arquivo CSV é disponibilizado, e vamos explorar algumas funções em R de manipulação de dados e construirmos um gráfico de mobilidade com o pacote ggplot2 para a localidade do estado do Rio Grande do Sul.
Carregando o arquivo de dados
Uma vez que baixamos o arquivo de dados, vamos importá-lo para o R
.
library(readr)
mobilidade <- read_csv(
here::here("data",
"Global_Mobility_Report.csv"))
Aqui utilizamos a função read_csv
do pacote readr
que retorna um objeto do tipo tibble
, mas outras funções, tal como read.table
, devem dar conta do recado! Além disso, utilizamos a função here
do pacote de mesmo nome. Se você ainda não conhece a função here
veja este post sobre fluxo de trabalho orientado a projetos em R
.
Conhecendo os dados
Existem várias formas de termos uma primeira visão dos dados. Uma delas é através da função glimpse
do pacote dplyr
.
library(dplyr)
glimpse(mobilidade)
## Rows: 284,489
## Columns: 11
## $ country_region_code <chr> "AE", "AE", "AE", "…
## $ country_region <chr> "United Arab Emirat…
## $ sub_region_1 <chr> NA, NA, NA, NA, NA,…
## $ sub_region_2 <chr> NA, NA, NA, NA, NA,…
## $ date <date> 2020-02-15, 2020-0…
## $ retail_and_recreation_percent_change_from_baseline <dbl> 0, 1, -1, -2, -2, -…
## $ grocery_and_pharmacy_percent_change_from_baseline <dbl> 4, 4, 1, 1, 0, 1, 2…
## $ parks_percent_change_from_baseline <dbl> 5, 4, 5, 5, 4, 6, 6…
## $ transit_stations_percent_change_from_baseline <dbl> 0, 1, 1, 0, -1, 1, …
## $ workplaces_percent_change_from_baseline <dbl> 2, 2, 2, 2, 2, 1, -…
## $ residential_percent_change_from_baseline <dbl> 1, 1, 1, 1, 1, 1, 1…
Esta função nos apresenta o número linhas e colunas do objeto, as colunas e a classe das mesmas, além de alguns valores das colunas.
Formatando os dados
O próximo passo é organizarmos os dados em um formato apropriado para as nossas análises. Neste sentido, vamos filtrar os dados referentes ao Rio Grande do Sul utilizando a função filter
do pacote dplyr
. Logo em seguida vamos “empilhar” os dados, fazendo com que os valores referentes as tendências de mobilidade fiquem armazenados em uma coluna, e o tipo/local de “mobilidade” fique armazenado em uma outra coluna. Para tal, utilizaremos a função gather
do pacote tidyr
.
library(tidyr)
mobilidade <- mobilidade %>%
filter(sub_region_1 == "State of Rio Grande do Sul") %>%
select(-country_region_code, -country_region, -sub_region_1, -sub_region_2) %>%
gather(key = "Tipo", value = "Percentual", -date)
Note que antes de empilharmos os dados, mantivemos apenas as variáveis (colunas) que tínhamos interesse de analisarmos, utilizando a função select
. Agora o novo objeto possui apenas três colunas:
mobilidade
## # A tibble: 432 × 3
## date Tipo Percentual
## <date> <chr> <dbl>
## 1 2020-02-15 retail_and_recreation_percent_change_from_baseline 4
## 2 2020-02-16 retail_and_recreation_percent_change_from_baseline -2
## 3 2020-02-17 retail_and_recreation_percent_change_from_baseline -2
## 4 2020-02-18 retail_and_recreation_percent_change_from_baseline -3
## 5 2020-02-19 retail_and_recreation_percent_change_from_baseline 1
## 6 2020-02-20 retail_and_recreation_percent_change_from_baseline 1
## 7 2020-02-21 retail_and_recreation_percent_change_from_baseline 3
## 8 2020-02-22 retail_and_recreation_percent_change_from_baseline -3
## 9 2020-02-23 retail_and_recreation_percent_change_from_baseline 4
## 10 2020-02-24 retail_and_recreation_percent_change_from_baseline -16
## # … with 422 more rows
Antes de começarmos a construir o nosso gráfico, vamos formatar a variável Tipo
:
mobilidade$Tipo <- factor(mobilidade$Tipo,
labels = c("Mercearia e farmácia",
"Parques",
"Residencial",
"Varejo e recreação",
"Estações de trânsito",
"Locais de trabalho"))
O(s) gráfico(s) de mobilidade
Vamos construir um gráfico de linhas das tendências de mobilidade pelo tempo. Utilizaremos o pacote ggplot2
. Se você ainda não conhece o pacote ggplot2
, não deixe de conferir o material do minicurso Pintando e Bordando no R apresentado no 1º Datathon da UFRGS.
Começaremos com um gráfico simples.
library(ggplot2)
p <- ggplot(data = mobilidade,
mapping = aes(x = date, y = Percentual, colour = Tipo)) +
geom_line()
p
Nada mau! Mas, podemos melhorar com algumas modificações. Comecemos por uma outra apresentação (facetada) e aumentando a espessura das curvas.
p <- ggplot(data = mobilidade,
mapping = aes(x = date, y = Percentual, colour = Tipo)) +
geom_line(size = 1) +
facet_wrap(~ Tipo) +
theme(legend.position = "none")
p
Melhor? Estamos quase lá! Agora vamos vamos arrumar aqueles pequenos detalhes que fazem toda a diferença: rótulos dos eixos, formato das datas, símbolo de percentual no eixo \(y\) e uma paleta de cores diferente da padrão.
p <- ggplot(data = mobilidade,
mapping = aes(x = date, y = Percentual, colour = Tipo)) +
geom_line(size = 1) +
scale_color_brewer(palette = "Set2") +
scale_y_continuous(labels = function(x) paste0(x, "%")) +
scale_x_date(labels = scales::date_format("%d %b")) +
facet_wrap(~ Tipo) +
theme(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(x = "Tempo em dias",
title = "Rio Grande do Sul",
caption = "Fonte: Google Mobility (01/05/2020)")
p
Um outro detalhe que faz toda a diferença é inclusão de um preenchimento entre as curvas de mobilidade e o valor basal.
p <- ggplot(data = mobilidade,
mapping = aes(x = date, y = Percentual, colour = Tipo)) +
geom_line(size = 1) +
geom_area(mapping = aes(fill = Tipo), alpha = 0.3) +
scale_color_brewer(palette = "Set2") +
scale_fill_brewer(palette = "Set2") +
scale_y_continuous(labels = function(x) paste0(x, "%")) +
scale_x_date(labels = scales::date_format("%d %b")) +
facet_wrap(~ Tipo) +
theme(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1)) +
labs(x = "Tempo em dias",
title = "Rio Grande do Sul",
caption = "Fonte: Google Mobility (01/05/2020)")
p
Pronto! Temos um gráfico de mobilidade! Infelizmente as conclusões não são muito animadoras. As curvas de tendência de mobilidade no estado do Rio Grande do Sul indicam um retorno ao valor basal (mobilidade pré-pandemia do COVID-19). Isso em conjunto com outros fatores (ausência de medidas de teste, isolamento e rastreio dos contatos dos infectados) podem resultar em um aumento acelerado dos casos de COVID-19. Nos mantenhamos alertas e avaliando os dados.
Você pode gerar gráficos para outras localidades do Brasil e do mundo! Experimente também outros temas do ggplot2
ou do pacote ggthemes
.
library(ggthemes)
p + theme_wsj() +
theme(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1))
library(ggthemes)
p + theme_fivethirtyeight() +
theme(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1))
Tem até estilo “Old is cool”.
library(ggthemes)
p + theme_excel() +
theme(legend.position = "none",
axis.text.x = element_text(angle = 45, hjust = 1))
Depois é só salvar no formato e resolução que você desejar com a função ggsave
!
Se cuidem! Fiquem bem! E até a próxima!