JHU - COVID-19 no Brasil - Semanas Epidemiológicas

Casos e óbitos por semana epidemiológica

COVID-19 no Brasil: Casos novos por Semana Epidemiológica
COVID-19 no Brasil: Casos novos por Semana Epidemiológica

O gráfico acima mostra os casos novos de COVID-19 no Brasil por semana epidemiológica. Como pode ser observado, o número de casos aumentou até a 30ª semana epidemiológica de 2020 (19/07/2020 a 25/07/2020), diminuindo, depois, até a 45ª semana epidemiológica de 2020 (01/11/2020 a 07/11/2020), quando voltou a aumentar, atingindo o valor máximo histórico na 12ª semana epidemiológica de 2021 (21/03/2021 a 27/03/2021).

Por convenção internacional as semanas epidemiológicas são contadas de Domingo a Sábado. A primeira semana do ano é aquela que contém o maior número de dias de Janeiro, e a última a que contém o maior número de dias de Dezembro. A 12ª semana epidemiológica de 2020, início dos óbitos no Brasil, foi de 15/03/2020 a 21/03/2020. A 53ª semana epidemiológica de 2020, última do ano, foi de 27/12/2020 a 02/01/2021. Na 3ª semana epidemiológica de 2021, de 17/01/2021 a 23/01/2021, as vacinas do Butantan e da Fiocruz foram aprovadas pela Anvisa e a enfermeira Mônica Calazans, de 54 anos, foi a primeira pessoa a ser vacinada no Estado de São Paulo. Note que a última semana epidemiológica do gráfico pode estar incompleta. (*)

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.

COVID-19 no Brasil: Óbitos por Semana Epidemiológica
COVID-19 no Brasil: Óbitos por Semana Epidemiológica

O gráfico acima mostra os óbitos por COVID-19 no Brasil por semana epidemiológica. Como pode ser observado, o número de óbitos aumentou até atingir o máximo na 30ª semana epidemiológica de 2020 (19/07/2020 a 25/07/2020), diminuindo, depois, até a 45ª semana epidemiológica de 2020 (01/11/2020 a 07/11/2020), quando voltou a aumentar, atingindo o valor máximo histórico na 14ª semana epidemiológica de 2021 (04/04/2021 a 10/04/2021). (*)

Nota

(*) Como houve um atraso na divulgação dos dados da 5ª semana epidemiológica de 2021 por parte do Ministério da Saúde, os valores da 5ª semana epidemiológica de 2021 ficaram abaixo, enquanto os da 6ª semana epidemiológica de 2021 ficaram acima, se compararmos os valores divulgados pela JHU com os do Painel Coronavírus, mas a soma das duas semanas é idêntica.

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

#
# source('jhu_brasil_semana_epi_bar.R')
#
# Programa para gerar dois gráficos mostrando os casos e óbitos da
# COVID-19 no Brasil nas semanas epidemiológicas.
# 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))

# Semana epidemiológica
cases <-
  cases %>% mutate(Epi_Week = epiweek(Date))
deaths <-
  deaths %>% mutate(Epi_Week = epiweek(Date))

# Ano da semana epidemiológica
cases <-
  cases %>% mutate(Epi_Year = epiyear(Date))
deaths <-
  deaths %>% mutate(Epi_Year = epiyear(Date))

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

# Concatenar Ano e Semana Epidemiológicos
cases$Epi_Year_Week <-
  sprintf("%s-%02.0f", cases$Epi_Year, cases$Epi_Week)
deaths$Epi_Year_Week <-
  sprintf("%s-%02.0f", deaths$Epi_Year, deaths$Epi_Week)

# Agrupar por semana epidemiológica
cases <-
  cases %>%
  select(Epi_Year_Week, New_Cases) %>%
  group_by(Epi_Year_Week) %>%
  summarise(Week_Cases = sum(New_Cases, na.rm = TRUE))
deaths <-
  deaths %>%
  select(Epi_Year_Week, New_Deaths) %>%
  group_by(Epi_Year_Week) %>%
  summarise(Week_Deaths = sum(New_Deaths, na.rm = TRUE))

# Manter os dados das semanas epidemiológicas com casos/óbitos
cases <- filter(cases, Week_Cases > 0)
deaths <- filter(deaths, Week_Deaths > 0)

# Número máximo de casos acumulados numa semana
max_cases <- max(c(cases$Week_Cases, 7e5))

# Número máximo de óbitos acumulados numa semana
max_deaths <- max(c(deaths$Week_Deaths, 2.5e4))

# Casos Novos de COVID-19 por Semana Epidemiológica
plot_cases <-
  ggplot(cases, aes(x = Epi_Year_Week, y = Week_Cases, fill = factor(2))) +
  labs(
    title = "COVID-19 no Brasil: Casos novos por Semana Epidemiológica",
    subtitle = paste(
      "Fonte: Johns Hopkins University Center for",
      "Systems Science and Engineering (JHU CCSE)"
    ),
    x = "Semana Epidemiológica",
    y = "Casos",
    caption = paste(
      "Dados baixados do HDX",
      "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) em",
      dataDados
    )
  ) +
  scale_fill_manual(values = c("pink"),
                    drop = FALSE) +
  geom_bar(stat = "identity",
           fill = "#5F559BFF") +
  geom_text(
    aes(
      x = Epi_Year_Week,
      y = Week_Cases + 1000,
      angle = 90,
      hjust = "left",
      label = prettyNum(Week_Cases, big.mark = ".", decimal.mark = ","),
      fill = NULL
    ),
    size = 3.6
  ) +
  annotate(
    geom = "text",
    x = -Inf,
    y = 7.5e5,
    color = "#AD002AFF",
    hjust = "left",
    vjust = "top",
    size = 4.0,
    label = "Mandetta\n⟶"
  ) +
  annotate(
    geom = "text",
    x = "2020-16",
    y = 7.5e5,
    color = "#AD002AFF",
    hjust = "left",
    vjust = "top",
    size = 4.0,
    label = "Teich\n⟶"
  ) +
  annotate(
    geom = "text",
    x = "2020-20",
    y = 7.5e5,
    color = "#AD002AFF",
    hjust = "left",
    vjust = "top",
    size = 4.0,
    label = "Pazuello\n⟶"
  ) +
  annotate(
    geom = "text",
    x = "2021-12",
    y = 7.5e5,
    color = "#AD002AFF",
    hjust = "left",
    vjust = "top",
    size = 4.0,
    label = "Queiroga\n⟶"
  ) +
  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.10)

# Óbitos causados pela COVID-19 por Semana Epidemiológica

plot_deaths <-
  ggplot(deaths, aes(x = Epi_Year_Week, y = Week_Deaths, fill = factor(2))) +
  labs(
    title = "COVID-19 no Brasil: Óbitos por Semana Epidemiológica",
    subtitle = paste(
      "Fonte: Johns Hopkins University Center for",
      "Systems Science and Engineering (JHU CCSE)"
    ),
    x = "Semana Epidemiológica",
    y = "Óbitos",
    caption = paste(
      "Dados baixados do HDX",
      "(https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases) em",
      dataDados
    )
  ) +
  scale_fill_manual(values = c("pink"),
                    drop = FALSE) +
  geom_bar(stat = "identity",
           fill = "#A20056FF") +
  geom_text(
    aes(
      x = Epi_Year_Week,
      y = Week_Deaths + 25,
      angle = 90,
      hjust = "left",
      label = prettyNum(Week_Deaths, big.mark = ".", decimal.mark = ","),
      fill = NULL
    ),
    size = 3.6
  ) +
  annotate(
    geom = "text",
    x = -Inf,
    y = max_deaths,
    color = "#AD002AFF",
    hjust = "left",
    vjust = "top",
    size = 4.0,
    label = "Mandetta\n⟶"
  ) +
  annotate(
    geom = "text",
    x = "2020-16",
    y = max_deaths,
    color = "#AD002AFF",
    hjust = "left",
    vjust = "top",
    size = 4.0,
    label = "Teich\n⟶"
  ) +
  annotate(
    geom = "text",
    x = "2020-20",
    y = max_deaths,
    color = "#AD002AFF",
    hjust = "left",
    vjust = "top",
    size = 4.0,
    label = "Pazuello\n⟶"
  ) +
  annotate(
    geom = "text",
    x = "2021-12",
    y = max_deaths,
    color = "#AD002AFF",
    hjust = "left",
    vjust = "top",
    size = 4.0,
    label = "Queiroga\n⟶"
  ) +
  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_semana_epi_bar_cases.png",
  plot_cases,
  device = png(),
  width = 12.5,
  height = 6.25,
  dpi = 72
)
ggsave(
  "~/doctec/static/img/jhu/jhu_brasil_semana_epi_bar_deaths.png",
  plot_deaths,
  device = png(),
  width = 12.5,
  height = 6.25,
  dpi = 72
)

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