DATASUS - COVID-19 no Brasil: Síntese de casos, óbitos, incidência, mortalidade e letalidade por região

COVID-19 no Brasil: Síntese de casos, óbitos, incidência, mortalidade e letalidade por região
COVID-19 no Brasil: Síntese de casos, óbitos, incidência, mortalidade e letalidade por região

O gráfico acima mostra os casos, óbitos, incidência (casos por 100.000 habitantes), mortalidade (óbitos por 100.000 habitantes) e a letalidade (óbitos/casos), 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 o gráficos mostrado acima. Antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

#
# source('rsus_covid_19_regioes_incidencia_mortalidade.R')
#
# Programa para gerar gráficos mostrando os casos, óbitos,
# incidência (casos por 100.000 habitantes),
# mortalidade (óbitos por 100.000 habitantes) e a
# letalidade (óbitos/casos), 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(tidyverse)
library(lubridate)
library(ggsci)
library(ggrepel)
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()
    )
)

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

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

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

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

# Acumular por região
dados <-
    aggregate(dados[, 2:4],  by = list(regiao = dados$regiao), FUN = sum)

# Letalidade
dados <-
    dados %>% mutate(letalidade = obitosAcumulado / casosAcumulado * 100.00)

# Incidência
dados <-
    dados %>% mutate(incidencia = casosAcumulado / populacaoTCU2019 * 100000.)

# Mortalidade
dados <-
    dados %>% mutate(mortalidade = obitosAcumulado / populacaoTCU2019 * 100000.)

# Casos por 100.000 de habitantes (incidência)

dados$pos = (cumsum(c(0, dados$incidencia)) + c(dados$incidencia / 2, .01))[1:nrow(dados)]

incid <-
    ggplot(dados, aes(1, incidencia, fill = regiao)) +
    geom_col(
        color = 'black',
        position = position_stack(reverse = TRUE),
        show.legend = FALSE
    ) +
    geom_text(
        aes(
            x = 1.2,
            label = formatC(
                incidencia,
                big.mark = ".",
                decimal.mark = ",",
                digits = 1,
                format = "f"
            )
        ),
        size = 3.0,
        position = position_stack(reverse = TRUE, vjust = 0.5)
    ) +
    geom_text(aes(x = 1.7,
                  y = pos,
                  label = regiao),
              size = 3.0,
              show.legend = FALSE) +
    coord_polar('y') +
    theme(
        plot.title = element_text(size = 12),
        plot.margin = unit(c(12, 0, 0, 0), "pt"),
        #top, right, bottom, left
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.background = element_rect(fill = "white", colour = "white")
    ) +
    labs(x = NULL,
         y = NULL,
         title = "Incidência por cem mil habitantes")

# Óbitos por 100.000 de habitantes  (mortalidade)

dados$pos = (cumsum(c(0, dados$mortalidade)) + c(dados$mortalidade / 2, .01))[1:nrow(dados)]

mort <-
    ggplot(dados, aes(1, mortalidade, fill = regiao)) +
    geom_col(
        color = 'black',
        position = position_stack(reverse = TRUE),
        show.legend = FALSE
    ) +
    geom_text(
        aes(
            x = 1.2,
            label = formatC(
                mortalidade,
                big.mark = ".",
                decimal.mark = ",",
                digits = 1,
                format = "f"
            )
        ),
        size = 3.0,
        position = position_stack(reverse = TRUE, vjust = 0.5)
    ) +
    geom_text(aes(x = 1.7,
                  y = pos,
                  label = regiao),
              size = 3.0,
              show.legend = FALSE) +
    coord_polar('y') +
    theme(
        plot.title = element_text(size = 12),
        plot.margin = unit(c(12, 0, 0, 0), "pt"),
        #top, right, bottom, left
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.background = element_rect(fill = "white", colour = "white")
    ) +
    labs(x = NULL,
         y = NULL,
         title = "Mortalidade por cem mil habitantes")

# Casos acumulados

dados$pos = (cumsum(c(0, dados$casosAcumulado)) + c(dados$casosAcumulado / 2, .01))[1:nrow(dados)]

tot_cases <-
    ggplot(dados, aes(1, casosAcumulado, fill = regiao)) +
    geom_col(
        color = 'black',
        position = position_stack(reverse = TRUE),
        show.legend = FALSE
    ) +
    geom_text(
        aes(
            x = 1.2,
            label = prettyNum(casosAcumulado, big.mark = ".", decimal.mark =
                                  ","),
        ),
        size = 3.0,
        position = position_stack(reverse = TRUE, vjust = 0.5)
    ) +
    geom_text(aes(x = 1.7,
                  y = pos,
                  label = regiao),
              size = 3.0,
              show.legend = FALSE) +
    coord_polar('y') +
    theme(
        plot.title = element_text(size = 12),
        plot.margin = unit(c(12, 0, 0, 0), "pt"),
        #top, right, bottom, left
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.background = element_rect(fill = "white", colour = "white")
    ) +
    labs(x = NULL,
         y = NULL,
         title = "Casos")

# Óbitos acumulados

dados$pos = (cumsum(c(0, dados$obitosAcumulado)) + c(dados$obitosAcumulado / 2, .01))[1:nrow(dados)]

tot_deaths <-
    ggplot(dados, aes(1, obitosAcumulado, fill = regiao)) +
    geom_col(
        color = 'black',
        position = position_stack(reverse = TRUE),
        show.legend = FALSE
    ) +
    geom_text(
        aes(
            x = 1.2,
            label = prettyNum(
                obitosAcumulado,
                big.mark = ".",
                decimal.mark = ","
            ),
        ),
        size = 3.0,
        position = position_stack(reverse = TRUE, vjust = 0.5)
    ) +
    geom_text(aes(
        x = 1.7,
        y = pos,
        label = sprintf("%s\n(%.1f%%)", regiao, letalidade)
    ),
    size = 3.0,
    show.legend = FALSE) +
    coord_polar('y') +
    theme(
        plot.title = element_text(size = 12),
        plot.margin = unit(c(12, 0, 0, 0), "pt"),
        #top, right, bottom, left
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.background = element_rect(fill = "white", colour = "white")
    ) +
    labs(x = NULL,
         y = NULL,
         title = "Óbitos (Letalidade %)")

# Juntar os quatro gráficos em uma única imagem
plot <- grid.arrange(
    incid,
    mort,
    tot_cases,
    tot_deaths,
    nrow = 2,
    ncol = 2,
    top = textGrob(
        "COVID-19 no Brasil: Síntese de casos, óbitos, incidência, mortalidade e letalidade",
        gp = gpar(fontsize = 16, font = 2)
    ),
    bottom = paste(
        "MS - DATASUS - Dados obtidos de: https://covid.saude.gov.br - Data: ",
        dataDados
    )
)

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

dev.off()