ECDC - 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é atingir o máximo na 30ª semana epidemiológica (19/07/2020 a 25/07/2020), diminuindo depois até a 45ª semana epidemiológica (01/11/2020 a 07/11/2020), quando voltou a aumentar.

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 50ª Semana Epidemiológica de 2020, última do gráfico, foi de 06/12/2020 a 12/12/2020.

A primeira troca de Ministros da Saúde, saída de Luiz Henrique Mandetta e entrada de Nelson Teich, ocorreu em 16/4, durante a 16ª semana epidemiológica, e a saída do Ministro Nelson Teich ocorreu em 15/5, durante a 20ª semana epidemiológica, quando assumiu a pasta interinamente Eduardo Pazuello.

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 (19/07/2020 a 25/07/2020), diminuindo depois até a 45ª semana epidemiológica (01/11/2020 a 07/11/2020), quando voltou a aumentar, acompanhando os casos novos.

Dados

Os dados são baixados da página Download today’s data on the geographic distribution of COVID-19 cases worldwide do European Centre for Disease Prevention and Control (ECDC). Nesta página é mostrado como os dados mais atualizados podem ser lidos diretamente pelo código R, mas também é possível baixar o arquivo CSV e ler pelo programa, para evitar múltiplos downloads, no caso de haver vários programas que acessem estes mesmos dados. O ECDC mudou para um cronograma de relatórios semanais da situação do COVID-19 na UE / EEE, Reino Unido e no restante do mundo em 17 de dezembro de 2020. Portanto, todas as atualizações diárias foram interrompidas a partir de 14 de dezembro.

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. A opção para ler os dados diretamente na Internet está comentada, enquanto a opção para ler o arquivo CSV baixado está ativa. Pode ser usada qualquer uma das duas opões, obtendo-se os mesmos resultados, desde que o arquivo baixado esteja atualizado.

# source('ecdc_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:
# European Centre for Disease Prevention and Control (ECDC)
# Download today’s data on the geographic distribution of COVID-19 cases worldwide
# https://www.ecdc.europa.eu/en/publications-data/download-todays-data-geographic-distribution-covid-19-cases-worldwide
#
# Bibliotecas
library(utils)
library(lubridate)
library(dplyr)
library(ggplot2)
library(ggrepel)
library(gridExtra)
library(stringr)
library(svglite)

# Ler os dados do ECDC no formato CSV
# ecdc <- read.csv("https://opendata.ecdc.europa.eu/covid19/casedistribution/csv", na.strings = "", fileEncoding = "UTF-8-BOM")
ecdc <- read.csv("~/R/dados/ecdc.csv", na.strings = "", fileEncoding = "UTF-8-BOM")

# Manter apenas os dados do Brasil e as colunas que serão usadas
dados <- subset(ecdc, countriesAndTerritories == "Brazil" & cases > 0, select = c("dateRep", "cases", "deaths"))

# Adicionar a coluna data a partir da coluna dateRep, subtraindo 1 dia na data
# porque o ECDC publica os dados no dia seguinte com a data do dia seguinte
dados$data <- dmy(dados$dateRep) - days(1)

# Data dos dados = maior data corrigida encontrada nos dados + 1 dia
dataDados = toString(max(dados$data) + days(1))

# Ordenar os dados pela data
dados <- dados[order(dados$data), ]

# Adicionar a semana epidemiológica aos dados usando a data corrigida
dados$semanaEpi <- epiweek(dados$data)

# Somatório dos casos e óbitos por semana epidemiológica
br <- aggregate(dados[,2:3], by=list(semanaEpi = dados$semanaEpi), FUN=sum)

# Primeira semana epidemiológica
firstweek <- min(br$semanaEpi)

# Última semana epidemiológica
lastweek <- max(br$semanaEpi)

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

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

# Casos Novos de COVID-19 por Semana Epidemiológica
plot_cases <- ggplot(br, aes(x = semanaEpi, y = cases, fill=factor(2))) +
	labs(
		title = "COVID-19 no Brasil: Casos novos por Semana Epidemiológica",
		x = "Semana Epidemiológica",
		y = "Casos",
		caption = paste("Dados baixados do ECDC (https://www.ecdc.europa.eu/en) em", dataDados)
	) +
	geom_rect(
		xmin = -Inf,
		xmax = 16,
		ymin = -Inf,
		ymax = Inf,
		fill = "#FFFFFC",
		alpha = 0.1
	) +
	geom_rect(
		xmin = 16,
		xmax = 20,
		ymin = -Inf,
		ymax = Inf,
		fill = "#FCFFFF",
		alpha = 0.1
	) +
	geom_rect(
		xmin = 20,
		xmax = Inf,
		ymin = -Inf,
		ymax = Inf,
		fill = "#FCFFFC",
		alpha = 0.1
	) +
	scale_fill_manual(
		values = c("pink"),
		drop = FALSE
	) +
    geom_bar(
        stat = "identity",
        fill = "#5F559BFF"
    ) +
	geom_text(
		aes(
			x = semanaEpi,
			y = cases + 1000,
			angle = 90,
			hjust = "left",
			label = prettyNum(cases, big.mark=".", decimal.mark=","),
			fill = NULL
			),
		size = 2.5,
		data = br
	) +
	annotate(
		geom="text",
		x = -Inf,
		y = max_cases,
		color = "#AD002AFF",
		hjust = "left",
		vjust = "bottom",
		size = 3.0,
		label = "Luiz Henrique\nMandetta ⟶"
	) +
	annotate(
		geom="text",
		x = 16,
		y = max_cases,
		color = "#AD002AFF",
		hjust = "left",
		vjust = "bottom",
		size = 3.0,
		label = "Nelson\nTeich ⟶"
	) +
	annotate(
		geom="text",
		x = 20,
		y = max_cases,
		color = "#AD002AFF",
		hjust = "left",
		vjust = "bottom",
		size = 3.0,
		label = "Eduardo\nPazuello ⟶"
	) +
	guides(fill = guide_legend(title = NULL)) +
	theme_minimal() +
	theme(
		axis.text.x = element_text(size = 7),
		axis.text.y = element_text(size = 10),
		axis.title  = element_text(size = 12)
	) +
	scale_x_continuous(
		breaks = seq(firstweek, lastweek, by = 1),
		minor_breaks = F
	) +
	ylim(0, max_cases * 1.05)

# Óbitos Novos de COVID-19 por Semana Epidemiológica e Região

plot_deaths <- ggplot(br, aes(x = semanaEpi, y = deaths, fill=factor(2))) +
	labs(
		title = "COVID-19 no Brasil: Óbitos por Semana Epidemiológica",
		x = "Semana Epidemiológica",
		y = "Óbitos",
		caption = paste("Dados baixados do ECDC (https://www.ecdc.europa.eu/en) em", dataDados)
	) +
	geom_rect(
		xmin = -Inf,
		xmax = 16,
		ymin = -Inf,
		ymax = Inf,
		fill = "#FFFFFC",
		alpha = 0.1
	) +
	geom_rect(
		xmin = 16,
		xmax = 20,
		ymin = -Inf,
		ymax = Inf,
		fill = "#FCFFFF",
		alpha = 0.1
	) +
	geom_rect(
		xmin = 20,
		xmax = Inf,
		ymin = -Inf,
		ymax = Inf,
		fill = "#FCFFFC",
		alpha = 0.1
	) +
	scale_fill_manual(
		values = c("pink"),
		drop = FALSE
	) +
    geom_bar(
        stat = "identity",
        fill = "#A20056FF"
    ) +
	geom_text(
		aes(
			x = semanaEpi,
			y = deaths + 25,
			angle = 90,
			hjust = "left",
			label = prettyNum(deaths, big.mark=".", decimal.mark=","),
			fill = NULL
			),
		size = 2.5,
		data = br
	) +
	annotate(
		geom="text",
		x = -Inf,
		y = max_deaths,
		color = "#AD002AFF",
		hjust = "left",
		vjust = "top",
		size = 3.0,
		label = "Luiz Henrique\nMandetta ⟶"
	) +
	annotate(
		geom="text",
		x = 16,
		y = max_deaths,
		color = "#AD002AFF",
		hjust = "left",
		vjust = "top",
		size = 3.0,
		label = "Nelson\nTeich ⟶"
	) +
	annotate(
		geom="text",
		x = 20,
		y = max_deaths,
		color = "#AD002AFF",
		hjust = "left",
		vjust = "top",
		size = 3.0,
		label = "Eduardo\nPazuello ⟶"
	) +
	guides(fill = guide_legend(title = NULL)) +
	theme_minimal() +
	theme(
		axis.text.x = element_text(size = 7),
		axis.text.y = element_text(size = 10),
		axis.title  = element_text(size = 12)
	) +
	scale_x_continuous(
		breaks = seq(firstweek, lastweek, by = 1),
		minor_breaks = F
	) +
	ylim(0, max_deaths)

# Gravar as imagens dos gráficos no disco
ggsave("../img/ecdc_brasil_semana_epi_bar_cases.svg", plot_cases, device=svg(), width = 7.5, height = 5)
ggsave("../img/ecdc_brasil_semana_epi_bar_deaths.svg", plot_deaths, device=svg(), width = 7.5, height = 5)

Referências