DATASUS - COVID-19 no Brasil: Evolução dos Casos e Óbitos Acumulados nos 5 Estados com mais casos confirmados

COVID-19 no Brasil: Evolução dos Casos Acumulados nos 5 Estados com mais casos confirmados
COVID-19 no Brasil: Evolução dos Casos Acumulados nos 5 Estados com mais casos confirmados

O gráfico acima mostra a evolução dos casos acumulados de COVID-19 nos 5 Estados com mais casos confirmados.

COVID-19 no Brasil: Evolução dos Óbitos Acumulados nos 5 Estados com mais casos confirmados
COVID-19 no Brasil: Evolução dos Óbitos Acumulados nos 5 Estados com mais casos confirmados

O gráfico acima mostra a evolução dos óbitos acumulados de COVID-19 nos 5 Estados com mais casos confirmados.

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_estado_evolucao.R')
#
# Programa para gerar gráficos mostrando a evolução dos casos e óbitos
# acumulados de COVID-19 nos 5 Estados com mais casos confirmados.
#
# 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(
        "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()
    )
)

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

# Última data
dataDados = toString(max(estados$data))

# Valores máximos para cada estado
estadosMaxCasosAcumulado <-
    estados %>%
    group_by(Estado) %>%
    summarise(maxCasosAcumulado = max(casosAcumulado, na.rm = TRUE))

# Os 5 estados com mais casos acumulados
estadosMaxCasosAcumulado <-
    top_n(estadosMaxCasosAcumulado, 5, maxCasosAcumulado)

# Manter apenas os 5 estados com mais casos acumulados
estados <-
    filter(estados, Estado %in% estadosMaxCasosAcumulado$Estado)

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

# Gerar o gráfico de casos acumulados
dados <- filter(estados, casosAcumulado > 0)

casos <-
    ggplot(dados, aes(data, casosAcumulado, col = Estado)) +
    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 = "Evolução dos casos nos 5 estados com mais casos de COVID-19",
        x = "Data",
        y = "Casos Acumulados",
        colour  = "Estado",
        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, 6, 6, 6), "pt") #top, right, bottom, left
    ) +
    guides(color = guide_legend(override.aes = list(fill = NA)))

# Gerar o gráfico de óbitos acumulados
dados <- filter(estados, obitosAcumulado > 0)

obitos <-
    ggplot(dados, aes(data, obitosAcumulado, col = Estado)) +
    scale_y_log10(breaks = breaks,
                  minor_breaks = minor_breaks,
                  limits = c(1, 2e5)) +
    scale_x_date(breaks = date_breaks("4 weeks"),
                 labels = date_format("%d/%n/\n%Y")) +
    labs(
        title = "Evolução dos óbitos nos 5 estados com mais casos de COVID-19",
        x = "Data",
        y = "Óbitos Acumulados",
        colour  = "Estado",
        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, 6, 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-estado-evolucao-casos.png",
    casos,
    device = png(),
    width = 12.5,
    height = 6.25,
    dpi = 72
)
ggsave(
    "~/doctec/static/img/sus/covid-19-estado-evolucao-obitos.png",
    obitos,
    device = png(),
    width = 12.5,
    height = 6.25,
    dpi = 72
)

dev.off()
dev.off()