DATASUS - COVID-19 no Brasil: Casos e Óbitos no Mês nas Capitais

COVID-19 no Brasil: Casos e Óbitos no mês nas Capitais
COVID-19 no Brasil: Casos e Óbitos no mês nas Capitais

O gráfico acima mostra os casos e óbitos no mês nas Capitais.

Dados

Os dados são baixados do Painel Coronavírus do Ministério da Saúde / DATASUS.

Programa

Abaixo está mostrado o código do programa, escrito em R, que gera o gráfico mostrado acima. Antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

#
# source('rsus_covid_19_capitais_casos_obitos_periodo.R')
#
# Programa para gerar um gráfico mostrando os casos e óbitos
# da COVID-19 no período nas capitais.
#
# Os dados são baixados do Painel Coronavírus em https://covid.saude.gov.br
#
# Bibliotecas
library(utils)
library(tidyverse)
library(plotly)
library(lubridate)
library(scales)
library(grid)
library(gridExtra)

# Ler os dados baixados do Painel Coronavírus
historico <- read_csv2(
    "~/R/dados/HIST_PAINEL_COVIDBR.csv",
    skip = 1,
    col_names = c(
        "regiao",
        "estado",
        "municipio",
        "coduf",
        "codmun",
        "codRegiaoSaude",
        "nomeRegiaoSaude",
        "data",
        "semanaEpi",
        "populacaoTCU2019",
        "casosAcumulado",
        "casosNovos",
        "obitosAcumulado",
        "obitosNovos",
        "Recuperadosnovos",
        "emAcompanhamentoNovos",
        "interior_metropolitana"
    ),
    col_types = cols(
        regiao = col_character(),
        estado = col_character(),
        municipio = col_character(),
        coduf = col_character(),
        codmun = col_character(),
        codRegiaoSaude = col_character(),
        nomeRegiaoSaude = col_character(),
        data = col_date(format = "%Y-%m-%d"),
        semanaEpi = col_integer(),
        populacaoTCU2019 = col_integer(),
        casosAcumulado = col_integer(),
        casosNovos = col_integer(),
        obitosAcumulado = col_integer(),
        obitosNovos = col_integer(),
        Recuperadosnovos = col_integer(),
        emAcompanhamentoNovos = col_integer(),
        interior_metropolitana = col_integer()
    )
)

# Última data
dataDados = max(historico$data)

# Mês e Ano da última data
mesDados = format(dataDados, "%m")
mesExtenso = format(dataDados, "%B")
anoDados = format(dataDados, "%Y")

# Capitais
capitais <- read_csv("~/R/dados/estado_capital.csv")

# Permanecer apenas com os dados das capitais
historico <- historico %>% inner_join(capitais)

# Permanecer apenas com os dados das capitais no mês/ano da última data
capital <- filter(historico,
                  mesDados == format(data, "%m"),
                  anoDados == format(data, "%Y"))

# Permanecer apenas com as colunas necessárias
capital <- select(capital, municipio, casosNovos, obitosNovos)

# Somar os casos e óbitos do mês
capital <-
    aggregate(capital[, 2:3],
              by = list(Capital = capital$municipio),
              FUN = sum)

# Casos
plot_cases <-
    ggplot(capital, aes(x = reorder(Capital, desc(Capital)))) +
    labs(title = "Casos",
         x = "Capital",
         y = NULL) +
    geom_col(aes(y = casosNovos),
             fill = "#5F559BFF") +
    geom_text(aes(
        y = casosNovos,
        label = prettyNum(casosNovos, big.mark = ".", decimal.mark =
                              ",")
    ),
    hjust = -.1,
    size = 4) +
    coord_flip() +
    guides(fill = guide_legend(title = NULL, reverse = TRUE)) +
    theme_minimal() +
    theme(
        legend.title = element_text(size = 14),
        legend.text = element_text(size = 12),
        legend.direction = "horizontal",
        legend.position = "top",
        panel.grid.major = element_line(
            size = 0,
            linetype = 'solid',
            colour = "lightblue"
        ),
        panel.grid.minor = element_line(
            size = 0,
            linetype = 'solid',
            colour = "lightblue"
        ),
        panel.grid = element_blank(),
        panel.border = element_blank(),
        axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12),
        axis.title.x = element_text(size = 14),
        axis.title.y = element_text(size = 14),
        plot.title = element_text(size = 16),
        plot.margin = unit(c(12, 18, 12, 12), "pt") #top, right, bottom, left
    ) +
    scale_y_continuous(
        labels = NULL,
        breaks = NULL,
        limits = c(0, 6e4),
        expand = c(0, 0)
    )

# Óbitos
plot_deaths <-
    ggplot(capital, aes(x = reorder(Capital, desc(Capital)))) +
    labs(title = "Óbitos",
         x = "Capital",
         y = NULL) +
    geom_col(aes(y = obitosNovos),
             fill = "#A20056FF") +
    geom_text(aes(
        y = obitosNovos,
        label = prettyNum(obitosNovos, big.mark = ".", decimal.mark =
                              ",")
    ),
    hjust = -.1,
    size = 4) +
    coord_flip() +
    guides(fill = guide_legend(title = NULL, reverse = TRUE)) +
    theme_minimal() +
    theme(
        legend.title = element_text(size = 14),
        legend.text = element_text(size = 12),
        legend.direction = "horizontal",
        legend.position = "top",
        panel.grid.major = element_line(
            size = 0,
            linetype = 'solid',
            colour = "pink"
        ),
        panel.grid.minor = element_line(
            size = 0,
            linetype = 'solid',
            colour = "pink"
        ),
        panel.grid = element_blank(),
        panel.border = element_blank(),
        axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12),
        axis.title.x = element_text(size = 14),
        axis.title.y = element_text(size = 14),
        plot.title = element_text(size = 16),
        plot.margin = unit(c(12, 18, 12, 12), "pt") #top, right, bottom, left
    ) +
    scale_y_continuous(
        labels = NULL,
        breaks = NULL,
        limits = c(0, 3e3),
        expand = c(0, 0)
    )

# Gráfico
titulo = paste("COVID-19 no Brasil: Casos e Óbitos no Mês nas Capitais:",
               mesExtenso,
               "de",
               anoDados)
plot <- grid.arrange(
    plot_cases,
    plot_deaths,
    nrow = 1,
    ncol = 2,
    widths = c(1, 1),
    top = textGrob(titulo,
                   gp = gpar(fontsize = 18, font = 2)),
    bottom = paste(
        "MS - DATASUS - Dados obtidos de",
        "https://covid.saude.gov.br em",
        dataDados
    )
)

# Gravar as imagens dos gráficos no disco
ggsave(
    "~/doctec/static/img/sus/rsus_covid_19_capitais_casos_obitos_periodo.png",
    plot,
    device = png(),
    width = 11,
    height = 6.25,
    dpi = 72
)

dev.off()