JHU - COVID-19 no Brasil - Casos e óbitos por mês

COVID-19 no Brasil: Casos por Mês
COVID-19 no Brasil: Casos por Mês

O gráfico acima mostra os casos novos de COVID-19 no Brasil por mês. 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: Óbitos por Mês
COVID-19 no Brasil: Óbitos por Mês

O gráfico acima mostra os óbitos por COVID-19 no Brasil por mês. Como pode ser observado, abril de 2021, com 82.266 óbitos, mais que dobrou o número máximo de óbitos em um mês ocorrido em 2020, que foi de 32.881 óbitos em julho.

Dados

Os dados são obtidos da página Novel Coronavirus (COVID-19) Cases Data, da Humanitarian Data Exchange (HDX), que contém os dados epidemiológicos desde 22 de janeiro de 2020. Os dados são compilados pelo Centro de Ciência e Engenharia de Sistemas da Universidade Johns Hopkins (JHU CCSE) a partir de várias fontes.

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 região no Brasil nas semanas epidemiológicas. Antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

#
# source('jhu_brasil_ano_mes_casos_obitos.R')
#
# Programa para gerar dois gráficos mostrando os casos e óbitos da
# COVID-19 no Brasil nos meses do ano.
# As imagens dos gráficos são gravadas em disco.
# Os dados são obtidos do:
# HDX - HUMANITARIAN DATA EXCHANGE
# Novel Coronavirus (COVID-19) Cases Data
# https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases
# Novel Corona Virus (COVID-19) epidemiological data since 22 January 2020.
# The data is compiled by the Johns Hopkins University Center for
# Systems Science and Engineering (JHU CCSE) from various sources.
#
# Bibliotecas
library(tidyverse)
library(lubridate)
library(gridExtra)
library(pracma)
library(ggsci)
library(ggrepel)
library(scales)
library(grid)

# Ler os dados baixados (casos confirmados)
jhu_cases <- read_csv(
  "~/R/dados/time_series_covid19_confirmed_global_narrow.csv",
  skip = 2,
  col_names = c(
    "Province_State",
    "Country_Region",
    "Lat",
    "Lon",
    "Date",
    "Total_Cases",
    "ISO_3166_1_Alpha_3_Codes",
    "Region_Code",
    "Sub_region_Code",
    "Intermediate_Region_Code"
  ),
  col_types = cols(
    Province_State = col_character(),
    Country_Region = col_character(),
    Lat = col_double(),
    Lon = col_double(),
    Date = col_date(),
    Total_Cases = col_integer(),
    ISO_3166_1_Alpha_3_Codes = col_character(),
    Region_Code = col_character(),
    Sub_region_Code = col_character(),
    Intermediate_Region_Code = col_character()
  )
)

# Ler os dados baixados (óbitos)
jhu_deaths <- read_csv(
  "~/R/dados/time_series_covid19_deaths_global_narrow.csv",
  skip = 2,
  col_names = c(
    "Province_State",
    "Country_Region",
    "Lat",
    "Lon",
    "Date",
    "Total_Deaths",
    "ISO_3166_1_Alpha_3_Codes",
    "Region_Code",
    "Sub_region_Code",
    "Intermediate_Region_Code"
  ),
  col_types = cols(
    Province_State = col_character(),
    Country_Region = col_character(),
    Lat = col_double(),
    Lon = col_double(),
    Date = col_date(),
    Total_Deaths = col_integer(),
    ISO_3166_1_Alpha_3_Codes = col_character(),
    Region_Code = col_character(),
    Sub_region_Code = col_character(),
    Intermediate_Region_Code = col_character()
  )
)

# Data dos dados
dataDados <- toString(max(jhu_cases$Date))

# Manter apenas os dados do Brasil
cases <-
  jhu_cases %>% filter(Country_Region == "Brazil")
deaths <-
  jhu_deaths %>% filter(Country_Region == "Brazil")

# Ficar apenas com as colunas a serem usadas
cases <- select(cases, Country_Region, Date, Total_Cases)
deaths <- select(deaths, Country_Region, Date, Total_Deaths)

# Ordenar pela data
cases <- arrange(cases, Date)
deaths <- arrange(deaths, Date)

# Casos e óbitos diários
cases <-
  cases %>% mutate(New_Cases = Total_Cases - lag(Total_Cases))
deaths <-
  deaths %>% mutate(New_Deaths = Total_Deaths - lag(Total_Deaths))

# Mês
cases <-
  cases %>% mutate(Epi_Month = as.numeric(format(Date, "%m")))
deaths <-
  deaths %>% mutate(Epi_Month = as.numeric(format(Date, "%m")))

# Ano
cases <-
  cases %>% mutate(Epi_Year = as.numeric(format(Date, "%Y")))
deaths <-
  deaths %>% mutate(Epi_Year = as.numeric(format(Date, "%Y")))

# Ficar apenas com as colunas a serem usadas
cases <- select(cases, New_Cases, Epi_Month, Epi_Year)
deaths <- select(deaths, New_Deaths, Epi_Month, Epi_Year)

# Concatenar Ano e Mês
cases <-
  cases %>% mutate(Epi_Year_Month = sprintf("%s-%02.0f", Epi_Year, Epi_Month))
deaths <-
  deaths %>% mutate(Epi_Year_Month = sprintf("%s-%02.0f", Epi_Year, Epi_Month))

# Agrupar por ano e mês
cases <-
  cases %>%
  select(Epi_Year_Month, New_Cases) %>%
  group_by(Epi_Year_Month) %>%
  summarise(Month_Cases = sum(New_Cases, na.rm = TRUE))
deaths <-
  deaths %>%
  select(Epi_Year_Month, New_Deaths) %>%
  group_by(Epi_Year_Month) %>%
  summarise(Month_Deaths = sum(New_Deaths, na.rm = TRUE))

# Manter os dados dos meses com casos/óbitos
cases <- filter(cases, Month_Cases > 0)
deaths <- filter(deaths, Month_Deaths > 0)

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

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

# Casos Novos de COVID-19 por mês
plot_cases <-
  ggplot(cases, aes(x = Epi_Year_Month, y = Month_Cases, fill = factor(2))) +
  labs(
    title = "COVID-19 no Brasil: Casos Novos por Mês",
    subtitle = paste(
      "Fonte: Johns Hopkins University Center for",
      "Systems Science and Engineering (JHU CCSE)"
    ),
    x = "Mês",
    y = "Casos",
    caption = paste(
      "Dados baixados do HDX",
      "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) até",
      dataDados
    )
  ) +
  scale_fill_manual(values = c("pink"),
                    drop = FALSE) +
  geom_bar(stat = "identity",
           fill = "#5F559BFF") +
  geom_text(
    aes(
      x = Epi_Year_Month,
      y = Month_Cases + 5000,
      angle = 90,
      hjust = "left",
      label = prettyNum(Month_Cases, big.mark = ".", decimal.mark = ","),
      fill = NULL
    ),
    size = 3.6
  ) +
  guides(fill = guide_legend(title = NULL)) +
  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 = 60,
      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 = 17),
    plot.margin = unit(c(6, 12, 6, 6), "pt") #top, right, bottom, left
  ) +
  scale_x_discrete() +
  ylim(0, max_cases * 1.20)

# Óbitos causados pela COVID-19 por mês

plot_deaths <-
  ggplot(deaths, aes(x = Epi_Year_Month, y = Month_Deaths, fill = factor(2))) +
  labs(
    title = "COVID-19 no Brasil: Óbitos por Mês",
    subtitle = paste(
      "Fonte: Johns Hopkins University Center for",
      "Systems Science and Engineering (JHU CCSE)"
    ),
    x = "Mês",
    y = "Óbitos",
    caption = paste(
      "Dados baixados do HDX",
      "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) até",
      dataDados
    )
  ) +
  scale_fill_manual(values = c("pink"),
                    drop = FALSE) +
  geom_bar(stat = "identity",
           fill = "#A20056FF") +
  geom_text(
    aes(
      x = Epi_Year_Month,
      y = Month_Deaths + 500,
      angle = 90,
      hjust = "left",
      label = prettyNum(Month_Deaths, big.mark = ".", decimal.mark = ","),
      fill = NULL
    ),
    size = 3.6
  ) +
  guides(fill = guide_legend(title = NULL)) +
  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 = 60,
      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 = 17),
    plot.margin = unit(c(6, 12, 6, 6), "pt") #top, right, bottom, left
  ) +
  scale_x_discrete() +
  ylim(0, max_deaths)

# Gravar as imagens dos gráficos no disco
ggsave(
  "~/doctec/static/img/jhu/jhu_brasil_ano_mes_casos.png",
  plot_cases,
  device = png(),
  width = 12.5,
  height = 6.25,
  dpi = 72
)
ggsave(
  "~/doctec/static/img/jhu/jhu_brasil_ano_mes_obitos.png",
  plot_deaths,
  device = png(),
  width = 12.5,
  height = 6.25,
  dpi = 72
)

dev.off()
dev.off()
Referências