DATASUS - COVID-19 no Brasil: Evolução dos Casos e Óbitos Acumulados nas Regiões

COVID-19 no Brasil: Evolução dos Casos Acumulados nas Regiões
COVID-19 no Brasil: Evolução dos Casos Acumulados nas Regiões

O gráfico acima mostra a evolução dos casos acumulados de COVID-19 em todas as cinco regiões do Brasil (Norte, Nordeste, Sul, Sudeste e Centro-Oeste).

COVID-19 no Brasil: Evolução dos Óbitos Acumulados nas Regiões
COVID-19 no Brasil: Evolução dos Óbitos Acumulados nas Regiões

O gráfico acima mostra a evolução dos óbitos acumulados de COVID-19 em todas as cinco regiões do Brasil (Norte, Nordeste, Sul, Sudeste e Centro-Oeste).

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

#
# source('rsus_covid_19_regioes_evolucao.R')
#
# Programa para gerar gráficos mostrando a evolução dos casos e óbitos
# acumulados de COVID-19 em todas as cinco regiões do Brasil
# (Norte, Nordeste, Sul, Sudeste e Centro-Oeste).
#
# 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(gridExtra)

# Ler os dados baixados do Painel Coronavírus
historico <- read_csv2(
    "~/R/dados/HIST_PAINEL_COVIDBR.csv",
    skip = 1,
    col_names = c(
        "Região",
        "estado",
        "municipio",
        "coduf",
        "codmun",
        "codRegiaoSaude",
        "nomeRegiaoSaude",
        "data",
        "semanaEpi",
        "populacaoTCU2019",
        "casosAcumulado",
        "casosNovos",
        "obitosAcumulado",
        "obitosNovos",
        "Recuperadosnovos",
        "emAcompanhamentoNovos",
        "interior_metropolitana"
    ),
    col_types = cols(
        Região = 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(historico$data))

# Permanecer apenas com os dados dos estados
estados <- filter(historico,!is.na(estado), is.na(codmun))

# Acumular os totais dos estados por dia nas regiões
casos <-
    estados %>%
    select(data, Região, casosAcumulado) %>%
    group_by(data, Região) %>%
    summarise_at(vars(casosAcumulado), list(casosRegiao = sum))
obitos <-
    estados %>%
    select(data, Região, obitosAcumulado) %>%
    group_by(data, Região) %>%
    summarise_at(vars(obitosAcumulado), list(obitosRegiao = sum))

# Escala vertical (y) logarítimica base 10
breaks <- 10 ^ (-10:10)
minor_breaks <- rep(1:9, 21) * (10 ^ rep(-10:10, each = 9))

# Remover os dias sem casos/obitos
casos <- filter(casos, casosRegiao > 0)
obitos <- filter(obitos, obitosRegiao > 0)

# Gerar o gráfico de casos acumulados
plot_casos <-
    ggplot(casos, aes(data, casosRegiao, col = Região)) +
    scale_y_log10(breaks = breaks,
                  minor_breaks = minor_breaks,
                  limits = c(1, 1e7)) +
    scale_x_date(breaks = date_breaks("4 weeks"),
                 labels = date_format("%d/%m/\n%Y")) +
    labs(
        title = "COVID-19 no Brasil: Evolução dos Casos Acumulados nas Regiões",
        x = "Data",
        y = "Casos Acumulados",
        colour  = "Região",
        caption = paste(
            "MS - DATASUS - Dados obtidos de",
            "https://covid.saude.gov.br em",
            dataDados
        )
    ) +
    geom_smooth(method = "gam",
                formula = y ~ s(x, bs = "cs")) +
    #   geom_point() +
    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"
        ),
        panel.grid.minor = element_line(
            size = 0.3,
            linetype = 'solid',
            colour = "lightblue"
        ),
        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 = 20),
        plot.subtitle = element_text(size = 18),
        plot.caption = element_text(size = 12),
        plot.margin = unit(c(6, 12, 6, 6), "pt") #top, right, bottom, left
    ) +
    guides(color = guide_legend(override.aes = list(fill = NA)))

# Gerar o gráfico de óbitos acumulados
plot_obitos <-
    ggplot(obitos, aes(data, obitosRegiao, col = Região)) +
    scale_y_log10(breaks = breaks,
                  minor_breaks = minor_breaks,
                  limits = c(1, 1e6)) +
    scale_x_date(breaks = date_breaks("4 weeks"),
                 labels = date_format("%d/%m/\n%Y")) +
    labs(
        title = "COVID-19 no Brasil: Evolução dos Óbitos Acumulados nas Regiões",
        x = "Data",
        y = "Óbitos Acumulados",
        colour  = "Região",
        caption = paste(
            "MS - DATASUS - Dados obtidos de",
            "https://covid.saude.gov.br em",
            dataDados
        )
    ) +
    geom_smooth(method = "gam",
                formula = y ~ s(x, bs = "cs")) +
    #   geom_point() +
    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"
        ),
        panel.grid.minor = element_line(
            size = 0.3,
            linetype = 'solid',
            colour = "pink"
        ),
        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 = 20),
        plot.subtitle = element_text(size = 18),
        plot.caption = element_text(size = 12),
        plot.margin = unit(c(6, 12, 6, 6), "pt") #top, right, bottom, left
    ) +
    guides(color = guide_legend(override.aes = list(fill = NA)))

# Gravar as imagens dos gráficos no disco
ggsave(
    "~/doctec/static/img/sus/covid-19-regiao-evolucao-casos.png",
    plot_casos,
    device = png(),
    width = 12.5,
    height = 6.25,
    dpi = 72
)
ggsave(
    "~/doctec/static/img/sus/covid-19-regiao-evolucao-obitos.png",
    plot_obitos,
    device = png(),
    width = 12.5,
    height = 6.25,
    dpi = 72
)

dev.off()
dev.off()