library(ggplot2) knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "docs/README-", out.width = "100%" )
O objetivo do pacote AnaliseCOVID19Brasil é o de prover análises práticas e atualizadas, incluindo alguns gráficos, além de ser o meu trabalho de conclusão do curso R para Ciência de Dados 2 da Curso-R.
Aí você pode se perguntar...
Se tantos pacotes já fazem análises de dados da COVID-19, por que usar este aqui ~~e não algum outro~~?
Meu primeiro enfoque foi o de fazer um pacote que permita, de maneira muito simples, atualizar os dados da pandemia no Brasil antes de proceder às análises. Em outras palavras, toda a triste dinâmica da pandemia no Brasil vai se revelando conforme este pacote é utilizado ao longo do tempo.
Você pode instalar o AnaliseCOVID19Brasil do GitHub com:
# install.packages("devtools") devtools::install_github("brunocp76/AnaliseCOVID19Brasil")
Como disse, os primeiros propósitos deste pacotes são ser simples do usuário utilizar e poder atualizar os dados antes de proceder à qualquer análise. Então começamos assim:
library(AnaliseCOVID19Brasil) atualiza_dados()
Talvez você repare que os totais consolidados da data mais recente disponível (no caso, r covid %>% dplyr::summarise(data_mais_recente = max(date)) %>% as.data.frame()
) não batem exatamente com os números oficiais ou o dos telejornais. Se esta discrepância existe entre o governo e a imprensa por motivos políticos que eu não discutirei aqui, eu entendo que aqui basta que os números estejam bem próximos aos números veiculados pela grande imprensa.
covid %>% dplyr::summarise( ultima_data = max(date, na.rm = TRUE), total_contagios = scales::comma( sum(contagios_novos, na.rm = TRUE), big.mark = ".", decimal.mark = "," ), total_obitos = scales::comma( sum(obitos_novos, na.rm = TRUE), big.mark = ".", decimal.mark = "," ), taxa_mortalidade = scales::percent( sum(obitos_novos, na.rm = TRUE) / sum(contagios_novos, na.rm = TRUE), big.mark = ".", decimal.mark = ",", accuracy = 0.01 ) ) %>% as.data.frame()
Mais uma vez, o meu enfoque aqui é ter estes dados sendo facilmente atualizados e viabilizando as análises que apresentarei mais para frente.
Para isso, a função atualiza_dados()
é uma das funções principais, pois aciona uma série de funções menores, cada uma fazendo uma parte do processo de obter pela internet os dados mais atualizados possíveis de fontes diferentes e de combinar todos eles em uma única base.
Desta forma, depois de executada esta função você terá a base covid
construída com dados disponíveis tanto no portal Brasil.io quanto no Ministério da Saúde
bases_derivadas()
A função bases_derivadas()
é outra das funções principais, pois parte da base covid
e gera funções com os dados para análise (os dados originais e mais alguns dados derivados) em 5 níveis distintos de agregação (de município a Brasil inteiro), para viabilizar a análise nestes níveis.
Então após executar esta função você terá as bases derivadas com os dados sumarizados em 5 níveis crescentes de agregação:
Segue a relação de bases disponíveis:
covid
covid_cidades
covid
, esta base e as seguintes possuem mais alguns indicadores derivados para análise.covid_regioes_saude
covid_estados
covid_regioes_brasil
covid_brasil
Com os dados atualizados e organizados, podemos fazer as primeiras observações:
covid_estados %>% dplyr::mutate( estado = forcats::fct_reorder(.f = uf, .x = contagios_novos, .desc = TRUE), regiao_brasil = forcats::fct_reorder(.f = regiao, .x = contagios_novos, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_boxplot(ggplot2::aes(x = estado, y = contagios_novos, fill = estado), color = "white", show.legend = FALSE) + ggplot2::labs( x = "Estados", y = "Novos Contágios", title = "Novos Contágios", subtitle = "Regiões e Estados ordenados pela mediana de casos" ) + tema_bruno() + ggplot2::facet_wrap(ggplot2::vars(regiao_brasil), scales = "free")
covid_estados %>% dplyr::group_by(uf, date) %>% dplyr::summarise(contagios_acumulados = sum(contagios_acumulados)) %>% dplyr::mutate(num_contagios = max(contagios_acumulados)) %>% dplyr::ungroup() %>% dplyr::mutate( limite = num_contagios %>% unique() %>% sort(decreasing = TRUE) %>% dplyr::nth(5) ) %>% dplyr::filter(num_contagios >= limite) %>% dplyr::mutate(contagios_acumulados_por_mil = contagios_acumulados / 1000) %>% ggplot2::ggplot(ggplot2::aes(y = contagios_acumulados_por_mil, x = date, color = uf)) + ggplot2::labs( x = "Data", y = "Contágios Acumulados (x 1.000)", title = "Contágios Acumulados", subtitle = "Nos estados com os 5 maiores volumes" ) + ggplot2::geom_line(show.legend = FALSE) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") + ggplot2::geom_label(ggplot2::aes(label = uf), show.legend = FALSE) + tema_bruno() + gganimate::transition_reveal(date)
covid_brasil %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes(x = date, y = contagios_novos, fill = contagios_novos), color = "cyan", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1.5) + ggplot2::theme( plot.subtitle = ggplot2::element_text(hjust = 1, face = "bold.italic", size = 12, color = "yellow") ) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") + tema_bruno() + ggplot2::labs( x = "Data", y = "Novos Contágios", title = "Volumes Diários de Novos Contágios", subtitle = "Com a Média Móvel de 7 dias" )
covid_estados %>% dplyr::filter(regiao == "Sudeste") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Contágios", title = "Volumes Diários de Novos Contágios", subtitle = "Estados Ordenados por volume de Contágios Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Nordeste") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Contágios", title = "Volumes Diários de Novos Contágios", subtitle = "Estados Ordenados por volume de Contágios Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Sul") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Contágios", title = "Volumes Diários de Novos Contágios", subtitle = "Estados Ordenados por volume de Contágios Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Centro-Oeste") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Contágios", title = "Volumes Diários de Novos Contágios", subtitle = "Estados Ordenados por volume de Contágios Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Norte") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = contagios_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "contagios_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = contagios_novos_mm7), color = "yellow", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Contágios", title = "Volumes Diários de Novos Contágios", subtitle = "Estados Ordenados por volume de Contágios Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::mutate( estado = forcats::fct_reorder(.f = uf, .x = obitos_novos, .desc = TRUE), regiao_brasil = forcats::fct_reorder(.f = regiao, .x = obitos_novos, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_boxplot(ggplot2::aes(x = estado, y = obitos_novos, fill = estado), color = "white", show.legend = FALSE) + ggplot2::labs( x = "Estados", y = "Novos Óbitos", title = "Novos Óbitos", subtitle = "Regiões e Estados ordenados pela mediana de casos" ) + tema_bruno() + ggplot2::facet_wrap(ggplot2::vars(regiao_brasil), scales = "free")
covid_estados %>% dplyr::group_by(uf, date) %>% dplyr::summarise(obitos_acumulados = sum(obitos_acumulados)) %>% dplyr::mutate(num_obitos = max(obitos_acumulados)) %>% dplyr::ungroup() %>% dplyr::mutate( limite = num_obitos %>% unique() %>% sort(decreasing = TRUE) %>% dplyr::nth(5) ) %>% dplyr::filter(num_obitos >= limite) %>% dplyr::mutate(obitos_acumulados_por_mil = obitos_acumulados / 1000) %>% ggplot2::ggplot(ggplot2::aes(y = obitos_acumulados_por_mil, x = date, color = uf)) + ggplot2::labs( x = "Data", y = "Óbitos Acumulados (x 1.000)", title = "Óbitos Acumulados", subtitle = "Nos estados com os 5 maiores volumes" ) + ggplot2::geom_line(show.legend = FALSE) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") + ggplot2::geom_label(ggplot2::aes(label = uf), show.legend = FALSE) + tema_bruno() + gganimate::transition_reveal(date)
covid_brasil %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes(x = date, y = obitos_novos, fill = obitos_novos), color = "cyan", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1.5) + ggplot2::theme( plot.subtitle = ggplot2::element_text(hjust = 1, face = "bold.italic", size = 12, color = "red") ) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") + tema_bruno() + ggplot2::labs( x = "Data", y = "Novos Óbitos", title = "Volumes Diários de Novos Óbitos", subtitle = "Com a Média Móvel de 7 dias" )
covid_estados %>% dplyr::filter(regiao == "Sudeste") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Óbitos", title = "Volumes Diários de Novos Óbitos", subtitle = "Estados Ordenados por volume de Óbitos Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Nordeste") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Óbitos", title = "Volumes Diários de Novos Óbitos", subtitle = "Estados Ordenados por volume de Óbitos Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Sul") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Óbitos", title = "Volumes Diários de Novos Óbitos", subtitle = "Estados Ordenados por volume de Óbitos Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Centro-Oeste") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Óbitos", title = "Volumes Diários de Novos Óbitos", subtitle = "Estados Ordenados por volume de Óbitos Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Norte") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = obitos_acumulados, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_col(ggplot2::aes_string(x = "date", y = "obitos_novos"), fill = "#34A4A4", show.legend = FALSE) + ggplot2::geom_line(ggplot2::aes(x = date, y = obitos_novos_mm7), color = "red", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + tema_bruno() + ggplot2::labs( x = "Mês", y = "Novos Óbitos", title = "Volumes Diários de Novos Óbitos", subtitle = "Estados Ordenados por volume de Óbitos Acumulados" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Algumas coisas também nos levam a outra questão por conta da possibilidade de transmissão assintomática, o tempo entre a detecção do contágio e a ocorrência do óbito.
teste <- covid %>% dplyr::select( date, contagios_novos, obitos_novos ) correlacoes <- c() lags <- c(0:50) for (k in lags) { tmp <- teste %>% dplyr::mutate(lagk = dplyr::lag(contagios_novos, k)) %>% dplyr::select(obitos_novos, lagk) %>% na.omit() correlacoes <- c(correlacoes, cor(tmp$obitos_novos, tmp$lagk)) } dplyr::tibble(lags, correlacoes) %>% ggplot2::ggplot(ggplot2::aes(x = lags, y = correlacoes)) + ggplot2::geom_vline(xintercept = 0, color = "#324C63", size = 1L) + ggplot2::geom_point(color = "yellow") + ggplot2::geom_line(color = "green") + ggplot2::labs( x = "Número de Lags", y = "Correlação Cruzada", title = "Correlação Cruzada entre Contágios e Óbitos" ) + ggplot2::scale_x_continuous(breaks = seq(0, 50, 2)) + ggplot2::scale_y_continuous(breaks = seq(0, 0.7, 0.1), labels = scales::percent) + tema_bruno() + ggplot2::theme( panel.grid.major.x = ggplot2::element_line( color = "#324C63", size = 0.5, linetype = "dashed" ) ) rm(teste, correlacoes, lags, k, tmp)
Podemos ver, até da maneira como (não) são feitas as notificações no Brasil, que as maiores correlações são múltiplos de semanas inteiras...
Uma vez que temos as quantidades de contágios e de óbitos, podemos calcular a Taxa de Mortalidade (Número de Mortos / Número de Contágios)
É sabido que em países que conseguem adotar a testagem em massa, numa média de toda a população, a taxa de mortalidade fica em torno de 1%.
rm(tabela_ufs, tabela_mun) tabela_ufs <- geobr::read_state( code_state = "all", year = 2020, simplified = FALSE, showProgress = FALSE ) tabela_mun <- geobr::read_municipality( code_muni = "all", year = 2020, simplified = FALSE, showProgress = FALSE )
covid_estados %>% dplyr::arrange(uf, date) %>% dplyr::group_by(uf) %>% dplyr::filter(date == max(date, na.rm = TRUE)) %>% dplyr::mutate(taxa_mortalidade = 100 * taxa_mortalidade) %>% dplyr::ungroup() %>% dplyr::select(-c(contagios_novos_100k:obitos_acumulados_ln)) %>% dplyr::arrange(uf, date) %>% dplyr::left_join( y = tabela_ufs, by = c("uf" = "abbrev_state") ) %>% ggplot2::ggplot() + ggplot2::geom_sf(ggplot2::aes(geometry = geom, fill = taxa_mortalidade), color = "darkcyan") + ggplot2::geom_sf_text(ggplot2::aes(geometry = geom, label = uf), size = 3.5) + ggplot2::scale_fill_gradient2( low = "blue", mid = "white", high = "red" ) + ggplot2::scale_x_continuous(breaks = seq(-75, -30, 5)) + ggplot2::scale_y_continuous(breaks = seq(-35, 5, 5)) + ggplot2::labs( x = "Longitude", y = "Latitude", title = "Taxa de Mortalidade da COVID-19 (%)", subtitle = "Óbitos / Contágios" ) + tema_bruno() + ggplot2::theme( legend.key.size = ggplot2::unit(1, "cm"), legend.title = ggplot2::element_blank(), legend.text = ggplot2::element_text(face = "bold", size = 11) )
covid_brasil %>% ggplot2::ggplot() + ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red", size = 1L) + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m/%Y") + ggplot2::scale_y_continuous(labels = scales::percent) + tema_bruno() + ggplot2::labs( x = "Mês", y = "Taxa de Mortalidade (Óbitos / Contágios)", title = "Taxa de Mortalidade (Consolidada Brasil)" ) + gganimate::transition_reveal(date, keep_last = TRUE)
covid_estados %>% dplyr::filter(regiao == "Sudeste") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE), regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + ggplot2::scale_y_continuous(labels = scales::percent) + tema_bruno() + ggplot2::labs( x = "Mês", y = "Taxa de Mortalidade (Óbitos / Contágios)", title = "Taxas de Mortalidade na Região Sudeste", subtitle = "Estados Ordenados por Taxa de Mortalidade" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Nordeste") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE), regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + ggplot2::scale_y_continuous(labels = scales::percent) + tema_bruno() + ggplot2::labs( x = "Mês", y = "Taxa de Mortalidade (Óbitos / Contágios)", title = "Taxas de Mortalidade na Região Nordeste", subtitle = "Estados Ordenados por Taxa de Mortalidade" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Sul") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE), regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + ggplot2::scale_y_continuous(labels = scales::percent) + tema_bruno() + ggplot2::labs( x = "Mês", y = "Taxa de Mortalidade (Óbitos / Contágios)", title = "Taxas de Mortalidade na Região Sul", subtitle = "Estados Ordenados por Taxa de Mortalidade" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Centro-Oeste") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE), regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + ggplot2::scale_y_continuous(labels = scales::percent) + tema_bruno() + ggplot2::labs( x = "Mês", y = "Taxa de Mortalidade (Óbitos / Contágios)", title = "Taxas de Mortalidade na Região Centro-Oeste", subtitle = "Estados Ordenados por Taxa de Mortalidade" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
covid_estados %>% dplyr::filter(regiao == "Norte") %>% dplyr::mutate( uf = forcats::fct_reorder(.f = uf, .x = taxa_mortalidade, .desc = TRUE), regiao_brasil = forcats::fct_reorder(.f = regiao, .x = taxa_mortalidade, .desc = TRUE) ) %>% ggplot2::ggplot() + ggplot2::geom_line(ggplot2::aes(x = date, y = taxa_mortalidade), color = "red") + ggplot2::scale_x_date(date_breaks = "1 month", date_labels = "%m") + ggplot2::scale_y_continuous(labels = scales::percent) + tema_bruno() + ggplot2::labs( x = "Mês", y = "Taxa de Mortalidade (Óbitos / Contágios)", title = "Taxas de Mortalidade na Região Norte", subtitle = "Estados Ordenados por Taxa de Mortalidade" ) + ggplot2::facet_wrap(ggplot2::vars(uf), scales = "free")
Segue o contágio acumulado por grupo de 100 mil habitantes.
covid_cidades %>% dplyr::filter(regiao == "Sudeste") %>% dplyr::arrange(cod_ibge, date) %>% dplyr::group_by(cod_ibge) %>% dplyr::filter(date == max(date, na.rm = TRUE)) %>% dplyr::ungroup() %>% dplyr::arrange(uf, date) %>% dplyr::left_join( y = tabela_ufs, by = c("uf" = "abbrev_state") ) %>% dplyr::select(geom_uf = geom, dplyr::everything()) %>% dplyr::arrange(cod_ibge, date) %>% dplyr::left_join( y = tabela_mun, by = c("cod_ibge" = "code_muni") ) %>% dplyr::select(geom_mun = geom, dplyr::everything()) %>% ggplot2::ggplot() + ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") + ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) + ggplot2::scale_fill_gradient2( low = "blue", mid = "white", high = "red" ) + ggplot2::scale_x_continuous(limits = c(-54, -38), breaks = seq(-54, -38, 2)) + ggplot2::scale_y_continuous(limits = c(-26, -14), breaks = seq(-26, -14, 2)) + ggplot2::labs( x = "Longitude", y = "Latitude", title = "Contágios Acumulados na Região Sudeste", subtitle = "Por grupo de 100 mil habitantes" ) + tema_bruno() + ggplot2::theme( legend.key.size = ggplot2::unit(1, "cm"), legend.title = ggplot2::element_blank() )
covid_cidades %>% dplyr::filter(regiao == "Nordeste") %>% dplyr::arrange(cod_ibge, date) %>% dplyr::group_by(cod_ibge) %>% dplyr::filter(date == max(date, na.rm = TRUE)) %>% dplyr::ungroup() %>% dplyr::arrange(uf, date) %>% dplyr::left_join( y = tabela_ufs, by = c("uf" = "abbrev_state") ) %>% dplyr::select(geom_uf = geom, dplyr::everything()) %>% dplyr::arrange(cod_ibge, date) %>% dplyr::left_join( y = tabela_mun, by = c("cod_ibge" = "code_muni") ) %>% dplyr::select(geom_mun = geom, dplyr::everything()) %>% ggplot2::ggplot() + ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") + ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) + ggplot2::scale_fill_gradient2( low = "blue", mid = "white", high = "red" ) + # ggplot2::scale_x_continuous(limits = c(-50, -32), breaks = seq(-50, -32, 2)) + # ggplot2::scale_y_continuous(limits = c(-19, -1), breaks = seq(-19, -1, 2)) + ggplot2::labs( x = "Longitude", y = "Latitude", title = "Contágios Acumulados na Região Nordeste", subtitle = "Por grupo de 100 mil habitantes" ) + tema_bruno() + ggplot2::theme( legend.key.size = ggplot2::unit(1, "cm"), legend.title = ggplot2::element_blank() )
covid_cidades %>% dplyr::filter(regiao == "Sul") %>% dplyr::arrange(cod_ibge, date) %>% dplyr::group_by(cod_ibge) %>% dplyr::filter(date == max(date, na.rm = TRUE)) %>% dplyr::ungroup() %>% dplyr::arrange(uf, date) %>% dplyr::left_join( y = tabela_ufs, by = c("uf" = "abbrev_state") ) %>% dplyr::select(geom_uf = geom, dplyr::everything()) %>% dplyr::arrange(cod_ibge, date) %>% dplyr::left_join( y = tabela_mun, by = c("cod_ibge" = "code_muni") ) %>% dplyr::select(geom_mun = geom, dplyr::everything()) %>% ggplot2::ggplot() + ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") + ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) + ggplot2::scale_fill_gradient2( low = "blue", mid = "white", high = "red" ) + # ggplot2::scale_x_continuous(limits = c(-58, -48), breaks = seq(-58, -48, 2)) + # ggplot2::scale_y_continuous(limits = c(-34, -22), breaks = seq(-34, -22, 2)) + ggplot2::labs( x = "Longitude", y = "Latitude", title = "Contágios Acumulados na Região Sul", subtitle = "Por grupo de 100 mil habitantes" ) + tema_bruno() + ggplot2::theme( legend.key.size = ggplot2::unit(1, "cm"), legend.title = ggplot2::element_blank() )
covid_cidades %>% dplyr::filter(regiao == "Centro-Oeste") %>% dplyr::arrange(cod_ibge, date) %>% dplyr::group_by(cod_ibge) %>% dplyr::filter(date == max(date, na.rm = TRUE)) %>% dplyr::ungroup() %>% dplyr::arrange(uf, date) %>% dplyr::left_join( y = tabela_ufs, by = c("uf" = "abbrev_state") ) %>% dplyr::select(geom_uf = geom, dplyr::everything()) %>% dplyr::arrange(cod_ibge, date) %>% dplyr::left_join( y = tabela_mun, by = c("cod_ibge" = "code_muni") ) %>% dplyr::select(geom_mun = geom, dplyr::everything()) %>% ggplot2::ggplot() + ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") + ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) + ggplot2::scale_fill_gradient2( low = "blue", mid = "white", high = "red" ) + # ggplot2::scale_x_continuous(limits = c(-63, -45), breaks = seq(-63, -45, 2)) + # ggplot2::scale_y_continuous(limits = c(-25, -07), breaks = seq(-25, -07, 2)) + ggplot2::labs( x = "Longitude", y = "Latitude", title = "Contágios Acumulados na Região Centro-Oeste", subtitle = "Por grupo de 100 mil habitantes" ) + tema_bruno() + ggplot2::theme( legend.key.size = ggplot2::unit(1, "cm"), legend.title = ggplot2::element_blank() )
covid_cidades %>% dplyr::filter(regiao == "Norte") %>% dplyr::arrange(cod_ibge, date) %>% dplyr::group_by(cod_ibge) %>% dplyr::filter(date == max(date, na.rm = TRUE)) %>% dplyr::ungroup() %>% dplyr::arrange(uf, date) %>% dplyr::left_join( y = tabela_ufs, by = c("uf" = "abbrev_state") ) %>% dplyr::select(geom_uf = geom, dplyr::everything()) %>% dplyr::arrange(cod_ibge, date) %>% dplyr::left_join( y = tabela_mun, by = c("cod_ibge" = "code_muni") ) %>% dplyr::select(geom_mun = geom, dplyr::everything()) %>% ggplot2::ggplot() + ggplot2::geom_sf(ggplot2::aes(geometry = geom_mun, fill = contagios_acumulados_100k), color = "darkcyan") + ggplot2::geom_sf(ggplot2::aes(geometry = geom_uf), alpha = 0, color = "blue", size = 1L) + ggplot2::scale_fill_gradient2( low = "blue", mid = "white", high = "red" ) + # ggplot2::scale_x_continuous(limits = c(-75, -45), breaks = seq(-75, -45, 2)) + # ggplot2::scale_y_continuous(limits = c(-14, +06), breaks = seq(-14, +06, 2)) + ggplot2::labs( x = "Longitude", y = "Latitude", title = "Contágios Acumulados na Região Norte", subtitle = "Por grupo de 100 mil habitantes" ) + tema_bruno() + ggplot2::theme( legend.key.size = ggplot2::unit(1, "cm"), legend.title = ggplot2::element_blank() )
Com o processo construído para ser de fácil atualização e com os dados estruturados, as possibilidades de análise são muitas...
Ainda gostaria de poder explorar algumas questões de séries temporais... Com a sazonalidade visível entre novos contágios e novos óbitos, talvez fosse possível estimar uma projeção de óbitos com base nos contágios. Ainda que este processo seja muito pouco estocástico e dependa muito do (praticamente imprevisível) comportamento humano...
Meu desejo é o de continuar incluindo novas análises e funcionalidades neste pacote. Espero que tenha o tempo necessário para isso.
Atualização dos Dados no GitHub - 25/05/2021.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.