DATASUS - COVID-19 no Brasil - Casos e óbitos por mês e região

COVID-19 no Brasil: Casos por Mês e Região
COVID-19 no Brasil: Casos por Mês e Região

O gráfico acima mostra os casos novos de COVID-19 no Brasil por mês e região. Como pode ser observado, o mês de março de 2021 apresentou o maior número de casos confirmados em um único mês nesta série histórica (2.197.488 casos novos), correspondendo a uma média de ~70.887 casos novos por dia.

A primeira troca de Ministros da Saúde, saída de Luiz Henrique Mandetta e entrada de Nelson Teich, ocorreu em 16/4/2020, durante a 16ª semana epidemiológica de 2020. A saída do Ministro Nelson Teich se deu em 15/5/2020, durante a 20ª semana epidemiológica de 2020, quando assumiu a pasta, no início interinamente, Eduardo Pazuello, que foi substituído por Marcelo Queiroga na 12ª semana epidemiológica de 2021 em 23/3/2021. As vacinas do Butantan e da Fiocruz foram aprovadas em 17/01/2021 pela Anvisa, dia em que a enfermeira Mônica Calazans, de 54 anos, foi a primeira pessoa a ser vacinada no Estado de São Paulo.

COVID-19 no Brasil: Casos por Mês e Região
COVID-19 no Brasil: Casos por Mês e Região

O gráfico acima mostra os óbitos por COVID-19 no Brasil por mês e região. Como pode ser observado, março de 2021, com 66.573 óbitos, mais que dobrou o maior número anterior de óbitos em um mês, ocorrido em julho de 2020, com 32.881 óbitos.

Casos por Mês nas Regiões do Brasil
Mês Centro-Oeste Nordeste Norte Sudeste Sul Total
2020-02 0 0 0 2 0 2
2020-03 470 875 294 3.404 672 5.715
2020-04 2.219 23.643 10.478 39.037 4.286 79.663
2020-05 14.711 154.234 96.980 144.797 18.098 428.820
2020-06 79.800 301.602 154.678 298.645 53.116 887.841
2020-07 153.834 378.473 145.120 432.312 150.705 1.260.444
2020-08 183.797 286.270 129.507 437.594 208.619 1.245.787
2020-09 159.947 178.428 93.557 321.279 149.452 902.663
2020-10 99.160 155.268 71.478 263.714 135.050 724.670
2020-11 71.815 153.003 67.538 261.429 246.488 800.273
2020-12 108.004 264.361 89.520 485.873 392.337 1.340.095
2021-01 130.748 280.529 164.053 638.821 314.607 1.528.758
2021-02 118.948 296.363 143.348 502.740 285.129 1.346.528
2021-03 229.364 449.077 185.064 794.128 539.855 2.197.488
2021-04 185.564 451.243 143.047 818.226 312.184 1.910.264
2021-05 170.948 515.229 114.384 749.323 336.659 1.886.543
2021-06 181.389 502.731 106.100 815.844 405.523 2.011.587
2021-07 145.274 245.101 70.406 592.047 307.886 1.360.714
Total 2.035.992 4.636.430 1.785.552 7.599.215 3.860.666 19.917.855
Óbitos por Mês nas Regiões do Brasil
Mês Centro-Oeste Nordeste Norte Sudeste Sul Total
2020-03 5 22 4 161 9 201
2020-04 74 1.514 708 3.233 171 5.700
2020-05 296 7.330 4.978 10.440 369 23.413
2020-06 1.355 10.412 3.836 13.622 1.055 30.280
2020-07 3.590 9.341 2.324 14.332 3.294 32.881
2020-08 3.908 6.501 1.626 12.784 4.087 28.906
2020-09 3.408 4.077 1.565 10.442 3.079 22.571
2020-10 2.190 2.980 932 7.767 2.063 15.932
2020-11 1.309 2.290 818 6.217 2.602 13.236
2020-12 1.713 3.281 1.234 10.231 5.370 21.829
2021-01 2.153 3.793 4.136 14.533 4.940 29.555
2021-02 2.386 4.986 4.904 13.782 4.380 30.438
2021-03 7.059 12.482 5.456 25.657 15.919 66.573
2021-04 8.683 14.051 5.376 40.612 13.544 82.266
2021-05 5.137 12.214 3.220 29.432 9.007 59.010
2021-06 5.193 11.046 2.332 27.623 9.081 55.275
2021-07 3.412 6.003 1.567 19.747 7.575 38.304
Total 51.871 112.323 45.016 260.615 86.545 556.370
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 dois gráficos mostrando os casos e óbitos da COVID-19 por mês nas regiões do Brasil. Antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

#
# source('rsus_covid_19_ano_mes_casos_obitos_regiao.R')
#
# Programa para gerar dois gráficos mostrando os casos e óbitos por
# ano, mês e região.
# As imagens dos gráficos são gravadas em disco.
# Os dados são baixados do Painel Coronavírus em https://covid.saude.gov.br
#
# Bibliotecas
library(tidyverse)
library(lubridate)
library(ggsci)
library(knitr)

# 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(),
    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
dados <- filter(dados,!is.na(estado), is.na(codmun), !is.na(data))

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

# Selecionar apenas os dados necessários
dados <- select(dados, data, regiao, casosNovos, obitosNovos)

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

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

# Concatenar Ano e Semana
dados <-
  dados %>% mutate(anoMesEpi = sprintf("%s-%02.0f", anoEpi, mesEpi))

# Ficar apenas com as colunas a serem usadas
dados <- select(dados, anoMesEpi, regiao, casosNovos, obitosNovos)

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

# Manter apenas os dados dos meses com casos/óbitos
casos <- filter(casos, casosMes > 0)
obitos <- filter(obitos, obitosMes > 0)

# Somatório dos casos e óbitos por mês
br_casos <-
  aggregate(casos[, 3],
            by = list(anoMesEpi = casos$anoMesEpi),
            FUN = sum)
br_obitos <-
  aggregate(obitos[, 3],
            by = list(anoMesEpi = obitos$anoMesEpi),
            FUN = sum)

# Número máximo de casos acumulados num mês
max_cases <- max(c(br_casos$casosMes, 2.5e6))

# Número máximo de óbitos acumulados num mês
max_deaths <- max(c(br_obitos$obitosMes, 1e5))

# Casos Novos de COVID-19 por Mẽs e Região
plot_cases <-
  ggplot(casos, aes(x = anoMesEpi, y = casosMes, fill = regiao)) +
  labs(
    title = "COVID-19 no Brasil: Casos por Mês e Região",
    x = "Mês",
    y = "Casos",
    caption = paste(
      "Dados baixados do Painel Coronavírus (https://covid.saude.gov.br) em",
      dataDados
    )
  ) +
  geom_bar(position = "stack",
           stat = "identity") +
  geom_text(
    aes(
      x = anoMesEpi,
      y = casosMes + 5000,
      angle = 90,
      hjust = "left",
      label = prettyNum(casosMes, big.mark = ".", decimal.mark =
                          ","),
      fill = NULL
    ),
    size = 4.0,
    data = br_casos
  ) +
  guides(fill = guide_legend(title = "Região")) +
  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 = 45,
      hjust = 1
    ),
    axis.text.y = element_text(size = 11),
    axis.title.x = element_text(size = 16),
    axis.title.y = element_text(size = 16),
    plot.title = element_text(size = 20),
    plot.subtitle =  element_text(size = 18),
    plot.margin = unit(c(6, 12, 6, 6), "pt") #top, right, bottom, left
  ) +
  scale_x_discrete() +
  ylim(0, max_cases * 1.20) +
  scale_fill_npg()

# Óbitos por COVID-19 por Mês e Região
plot_deaths <-
  ggplot(obitos, aes(x = anoMesEpi, y = obitosMes, fill = regiao)) +
  labs(
    title = "COVID-19 no Brasil: Óbitos por Mês e Região",
    x = "Mês",
    y = "Óbitos",
    caption = paste(
      "Dados baixados do Painel Coronavírus (https://covid.saude.gov.br) em",
      dataDados
    )
  ) +
  geom_bar(position = "stack",
           stat = "identity") +
  geom_text(
    aes(
      x = anoMesEpi,
      y = obitosMes + 500,
      angle = 90,
      hjust = "left",
      label = prettyNum(obitosMes, big.mark = ".", decimal.mark =
                          ","),
      fill = NULL
    ),
    size = 4.0,
    data = br_obitos
  ) +
  guides(fill = guide_legend(title = "Região")) +
  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 = 45,
      hjust = 1
    ),
    axis.text.y = element_text(size = 11),
    axis.title.x = element_text(size = 16),
    axis.title.y = element_text(size = 16),
    plot.title = element_text(size = 20),
    plot.subtitle =  element_text(size = 18),
    plot.margin = unit(c(6, 12, 6, 6), "pt") #top, right, bottom, left
  ) +
  scale_x_discrete() +
  ylim(0, max_deaths) +
  scale_fill_npg()

# Gravar as imagens dos gráficos no disco (16:9 ~72*11:72*6.25=792x450)
ggsave(
  "~/doctec/static/img/sus/rsus_covid_19_ano_mes_casos_regiao.png",
  plot_cases,
  device = png(),
  width = 11,
  height = 6.25,
  dpi = 72
)
ggsave(
  "~/doctec/static/img/sus/rsus_covid_19_ano_mes_obitos_regiao.png",
  plot_deaths,
  device = png(),
  width = 11,
  height = 6.25,
  dpi = 72
)

dev.off()
dev.off()

# Tabela de casos

casos <- arrange(casos, regiao)

tblCasos <-
  pivot_wider(casos[, c(1, 2, 3)],
              names_from = regiao,
              values_from = casosMes)

tblCasos <- arrange(tblCasos, anoMesEpi)

tblCasos <- data.frame(replace(tblCasos, is.na(tblCasos), 0))

tblCasos$Total <-
  tblCasos$Centro.Oeste + tblCasos$Nordeste + tblCasos$Norte + tblCasos$Sudeste + tblCasos$Sul

totCasos <- data.frame(Mês = "Total", t(colSums(tblCasos[, -1])))

colnames(tblCasos) <- names(totCasos)

tblCasos <- rbind(tblCasos, totCasos)

# {r echo = FALSE, results = 'asis'}
knitr::opts_chunk$set(results = 'asis')
kable(
  tblCasos,
  caption = "Casos por Mês nas Regiões do Brasil",
  col.names = c(
    'Mês',
    'Centro-Oeste',
    'Nordeste',
    'Norte',
    'Sudeste',
    'Sul',
    'Total'
  ),
  align = "crrrrrr",
  format.args = list(
    big.mark = ".",
    decimal.mark = ",",
    scientific = FALSE
  )
)

# Tabela de óbitos

obitos <- arrange(obitos, regiao)

tblObitos <- pivot_wider(obitos[, c(1, 2, 3)],
                         names_from = regiao,
                         values_from = obitosMes)

tblObitos <- data.frame(arrange(tblObitos, anoMesEpi))

tblObitos$Total <-
  tblObitos$Centro.Oeste + tblObitos$Nordeste + tblObitos$Norte + tblObitos$Sudeste + tblObitos$Sul

totObitos <-
  data.frame(Mês = "Total", t(colSums(tblObitos[, -1])))

colnames(tblObitos) <- names(totObitos)

tblObitos <- rbind(tblObitos, totObitos)

# {r echo = FALSE, results = 'asis'}
knitr::opts_chunk$set(results = 'asis')
kable(
  tblObitos,
  caption = "Óbitos por Mês nas Regiões do Brasil",
  col.names = c(
    'Mês',
    'Centro-Oeste',
    'Nordeste',
    'Norte',
    'Sudeste',
    'Sul',
    'Total'
  ),
  align = "crrrrrr",
  format.args = list(
    big.mark = ".",
    decimal.mark = ",",
    scientific = FALSE
  )
)
Referências