DATASUS - COVID-19 no Brasil: Casos e Óbitos Mensais nas Capitais Rio de Janeiro e São Paulo

COVID-19 no Brasil: Casos e Óbitos Mensais nas Capitais Rio de Janeiro e São Paulo
COVID-19 no Brasil: Casos e Óbitos Mensais nas Capitais Rio de Janeiro e São Paulo

O gráfico acima mostra os casos e óbitos por COVID-19, a cada mês, nas capitais Rio de Janeiro e São Paulo nos anos de 2020 e 2021. Pode ser observado que, embora a cidade de São Paulo tenha tido mais casos novos que a cidade do Rio de Janeiro em todos os meses, o Rio de Janeiro teve mais óbitos que São Paulo nos meses de maio, junho, outubro, novembro e dezembro de 2020, e janeiro e fevereiro de 2021. Deve ser levado em conta nessa comparação, que a cidade do Rio de Janeiro tem pouco mais da metade da população da cidade de São Paulo.

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_rio_sao_paulo_capitais.R')
#
# Programa para gerar gráficos mostrando os acumulados mensais de
# casos e óbitos de COVID-19 nas capitais Rio de Janeiro e São Paulo.
#
# Os dados são baixados do Painel Coronavírus em https://covid.saude.gov.br
#
# Bibliotecas
library(tidyverse)
library(lubridate)
library(ggsci)
library(grid)
library(gridExtra)

# Ler os dados baixados do Painel Coronavírus
dados <- 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()
    )
)

# Data dos dados
dataDados = toString(max(dados$data))

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

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

# Permanecer apenas com os dados das capitais Rio de Janeiro e São Paulo
dados <-
    filter(dados, municipio %in% c("Rio de Janeiro", "São Paulo"))

# Mês
dados <-
    dados %>% mutate(mes = as.numeric(format(data, "%m")))

# Ano
dados <-
    dados %>% mutate(ano = as.numeric(format(data, "%Y")))

# Concatenar Ano e Semana
dados <-
    dados %>% mutate(anoMes = sprintf("%s-%02.0f", ano, mes))

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

# Agrupar por ano e mês
casos <-
    dados %>%
    select(anoMes, municipio, casosNovos) %>%
    group_by(anoMes, municipio) %>%
    summarise_at(vars(casosNovos), list(casosMes = sum))
obitos <-
    dados %>%
    select(anoMes, municipio, obitosNovos) %>%
    group_by(anoMes, municipio) %>%
    summarise_at(vars(obitosNovos), list(obitosMes = sum))

# Gráfico dos casos
plot_cases <-
    ggplot(casos, aes(x = anoMes,
                      y = casosMes,
                      fill = municipio)) +
    labs(x = "Meses",
         y = "Casos") +
    geom_bar(position = position_dodge(),
             stat = "identity") +
    geom_text(
        aes(label = prettyNum(
            casosMes,
            big.mark = ".",
            decimal.mark = ","
        )),
        hjust = 0,
        vjust = 0.5,
        color = "black",
        position = position_dodge(1),
        size = 4,
        angle = 90
    ) +
    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.5,
            linetype = 'solid',
            colour = "lightblue"
        ),
        axis.text.x = element_text(
            size = 11,
            angle = 90,
            vjust = 0.5
        ),
        axis.text.y = element_text(size = 11),
        axis.title.x = element_text(size = 14),
        axis.title.y = element_text(size = 14),
        plot.title = element_text(size = 16),
        plot.margin = unit(c(6, 12, 6, 6), "pt") #top, right, bottom, left
    ) +
    guides(fill = guide_legend(title = "Capitais")) +
    scale_y_continuous(limits = c(0, 1.2e5))

# Gráfico dos óbitos
plot_deaths <-
    ggplot(obitos, aes(x = anoMes,
                       y = obitosMes,
                       fill = municipio)) +
    labs(x = "Meses",
         y = "Óbitos") +
    geom_bar(position = position_dodge(),
             stat = "identity") +
    geom_text(
        aes(label = prettyNum(
            obitosMes,
            big.mark = ".",
            decimal.mark = ","
        )),
        hjust = 0,
        vjust = 0.5,
        color = "black",
        position = position_dodge(1),
        size = 4,
        angle = 90
    ) +
    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.5,
            linetype = 'solid',
            colour = "pink"
        ),
        axis.text.x = element_text(
            size = 11,
            angle = 90,
            vjust = 0.5
        ),
        axis.text.y = element_text(size = 11),
        axis.title.x = element_text(size = 14),
        axis.title.y = element_text(size = 14),
        plot.title = element_text(size = 16),
        plot.margin = unit(c(6, 12, 6, 6), "pt") #top, right, bottom, left
    ) +
    guides(fill = guide_legend(title = "Capitais")) +
    scale_y_continuous(limits = c(0, 6e3))

# Juntar os dois gráficos
plot <-
    grid.arrange(
        plot_cases,
        plot_deaths,
        nrow = 1,
        ncol = 2,
        widths = c(1, 1),
        top = textGrob(
            "COVID-19 no Brasil: Casos e Óbitos Mensais nas Capitais",
            gp = gpar(fontsize = 18, font = 2)
        ),
        bottom = paste(
            "MS - DATASUS - Dados obtidos de",
            "https://covid.saude.gov.br em",
            dataDados
        )
    )

# Gravar a imagem do gráfico no disco
ggsave(
    "~/doctec/static/img/sus/rsus_covid_19_rio_sao_paulo_capitais.png",
    plot,
    device = png(),
    width = 11,
    height = 6.1875,
    dpi = 72
)

dev.off()