DATASUS - COVID-19 no Brasil - Número de Casos e Óbitos nos Estados, na Região Metropolitana e no Interior

COVID-19 no Brasil: Número de Casos Confirmados de COVID-19 nos Estados
COVID-19 no Brasil: Número de Casos Confirmados de COVID-19 nos Estados

O gráfico acima mostra o número de casos confirmados de COVID-19 nos estados do Brasil, na região metropolitana e no interior. Pode ser observado que São Paulo supera os demais estados no número de casos, tanto na região metropolitana quanto no interior.

COVID-19 no Brasil: Número de Óbitos por COVID-19 nos Estados
COVID-19 no Brasil: Número de Óbitos por COVID-19 nos Estados

O gráfico acima mostra o número de óbitos por COVID-19 nos estados do Brasil, na região metropolitana e no interior. Pode ser observado que São Paulo supera os demais estados no número de óbitos, tanto na região metropolitana quanto no interior, e que a relação dos óbitos entre a região metropolitana e interior do Estado do Rio de Janeiro é muito superior à dos outros estados.

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 dois gráficos mostrados acima. Antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

#
# source('rsus_covid_19_est_int_met_espelho.R')
#
# Programa para gerar gráficos mostrando a quantidade de casos e
# óbitos confirmados de COVID-19 na região metropolitana e no interior
# dos Estados, permitindo observar a interiorização da doença.
#
# 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(ggrepel)
library(RColorBrewer)

# 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()
    )
)

# Usar somente as data válidas
dados <-
    filter(historico, !is.na(data))

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

# Dados dos estados no último dia do arquivo baixado
estados <-
    filter(historico,
           !is.na(estado),
           is.na(codmun),
           estado != 'DF',
           data == dataDados)

# Selecionar apenas os dados necessários
estados <- select(estados, estado, casosAcumulado, obitosAcumulado)

# Adicionar a abrangência
estados <- estados %>% mutate(Local = 'UF')

# Região Metroploitana
metropol <-
    filter(historico,
           interior_metropolitana == 1,
           estado != 'DF',
           data == dataDados)

# Selecionar apenas os dados necessários
metropol <-
    select(metropol, estado, casosAcumulado, obitosAcumulado)

# Total para as regiões metropolitanas
metropol <- aggregate(metropol[, 2:3],
                      by = list(estado = metropol$estado),
                      FUN = sum)

# Adicionar a abrangência
metropol <- metropol %>% mutate(Local = 'Região Metropolitana')

# Separar Região Metropolitana do Interior
interior <- within(merge(estados, metropol, by = "estado"), {
    casosAcumulado <- casosAcumulado.x - casosAcumulado.y
    obitosAcumulado <- obitosAcumulado.x - obitosAcumulado.y
    Local <- "Interior"
})[, c("estado", "Local", "casosAcumulado", "obitosAcumulado")]

# Gráfico dos casos
plot_cases <-
    ggplot(interior, aes(fct_rev(fct_infreq(factor(
        estado
    ))), fill = Local)) +
    labs(
        title = "COVID-19 no Brasil: Número de Casos Confirmados de COVID-19 nos Estados",
        x = "Estado",
        y = "Casos",
        caption = paste(
            "MS - DATASUS - Dados obtidos de",
            "https://covid.saude.gov.br em",
            dataDados
        )
    ) +
    geom_col(aes(y = casosAcumulado)) +
    geom_text(aes(
        y = casosAcumulado,
        label = prettyNum(casosAcumulado, big.mark = ".", decimal.mark =
                              ",")
    ),
    hjust = -.1,
    size = 4) +
    geom_col(data = metropol,
             aes(y = -1 * casosAcumulado)) +
    geom_text(
        data = metropol,
        aes(
            y = -1 * casosAcumulado,
            label = prettyNum(casosAcumulado, big.mark = ".", decimal.mark =
                                  ",")
        ),
        hjust = 1.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.4,
            linetype = 'solid',
            colour = "lightblue"
        ),
        panel.grid.minor = element_line(
            size = 0.4,
            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_fill_brewer(palette = "Pastel1") +
    scale_y_continuous(
        labels = NULL,
        breaks = NULL,
        limits = c(-3e6, 3e6),
        expand = c(0, 0)
    )

# Óbitos
plot_deaths <-
    ggplot(interior, aes(fct_rev(fct_infreq(factor(
        estado
    ))), fill = Local)) +
    labs(
        title = "COVID-19 no Brasil: Número de Óbitos por COVID-19 nos Estados",
        x = "Estado",
        y = "Óbitos",
        caption = paste(
            "MS - DATASUS - Dados obtidos de",
            "https://covid.saude.gov.br em",
            dataDados
        )
    ) +
    geom_col(aes(y = obitosAcumulado)) +
    geom_text(aes(
        y = obitosAcumulado,
        label = prettyNum(
            obitosAcumulado,
            big.mark = ".",
            decimal.mark = ","
        )
    ),
    hjust = -.1,
    size = 4) +
    geom_col(data = metropol,
             aes(y = -1 * obitosAcumulado)) +
    geom_text(
        data = metropol,
        aes(
            y = -1 * obitosAcumulado,
            label = prettyNum(
                obitosAcumulado,
                big.mark = ".",
                decimal.mark = ","
            )
        ),
        hjust = 1.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.4,
            linetype = 'solid',
            colour = "pink"
        ),
        panel.grid.minor = element_line(
            size = 0.4,
            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_fill_brewer(palette = "Pastel1") +
    scale_y_continuous(
        labels = NULL,
        breaks = NULL,
        limits = c(-1e5, 1e5),
        expand = c(0, 0)
    )

# Gravar as imagens dos gráficos no disco
ggsave(
    "~/doctec/static/img/sus/covid-19-estados-reg-metropol-interior-casos.png",
    plot_cases,
    device = png(),
    width = 11,
    height = 6.25,
    dpi = 72
)
ggsave(
    "~/doctec/static/img/sus/covid-19-estados-reg-metropol-interior-obitos.png",
    plot_deaths,
    device = png(),
    width = 11,
    height = 6.25,
    dpi = 72
)

dev.off()
dev.off()