Skip to content

Instantly share code, notes, and snippets.

@jmcastagnetto
Created December 29, 2021 17:41
Show Gist options
  • Save jmcastagnetto/8e73a8dc657087e53b9c62b17d8c60a0 to your computer and use it in GitHub Desktop.
Save jmcastagnetto/8e73a8dc657087e53b9c62b17d8c60a0 to your computer and use it in GitHub Desktop.
COVID19 (Perú): Gráficos de positivos y fallecidos por semana epidemiológica
# Inspirado en https://twitter.com/plenque/status/1475934854269259803
library(tidyverse)
library(lubridate)
pos_url <- "https://github.com/jmcastagnetto/covid-19-peru-limpiar-datos-minsa/raw/main/datos/positivos_covid_aumentado.rds"
pos <- rio::import(pos_url)
pos_semana <- pos %>%
mutate(
sunday_of_week = floor_date(
fecha_resultado,
"weeks",
week_start = 7),
) %>%
group_by(epi_year, epi_week, sunday_of_week) %>%
tally(name = "positivos_semana")
fal_url <- "https://github.com/jmcastagnetto/covid-19-peru-limpiar-datos-minsa/raw/main/datos/fallecidos_covid_aumentado.rds"
fal <- rio::import(fal_url)
fal_semana <- fal %>%
mutate(
sunday_of_week = floor_date(
fecha_fallecimiento,
"weeks",
week_start = 7),
) %>%
group_by(epi_year, epi_week, sunday_of_week) %>%
tally(name = "fallecidos_semana")
comb <- pos_semana %>%
left_join(
fal_semana,
by = c("epi_year", "epi_week", "sunday_of_week")
) %>%
filter(!is.na(epi_year)) %>%
ungroup() %>%
filter(sunday_of_week < max(sunday_of_week)) %>%
mutate(
yw = as.numeric(sprintf("%4d%02d", epi_year, epi_week)),
yw_lbl = sprintf("%4d-S%02d", epi_year, epi_week)
)
factor <- round(max(comb$positivos_semana) / max(comb$fallecidos_semana), -1)
min_yw <- comb %>%
filter(yw == min(yw)) %>%
pull(yw_lbl)
max_yw <- comb %>%
filter(yw == max(yw)) %>%
pull(yw_lbl)
comb <- comb %>%
mutate(
fallecidos_semana_scaled = factor * fallecidos_semana
)
p1 <- ggplot(comb) +
geom_line(aes(x = sunday_of_week, y = positivos_semana), color = "blue") +
geom_line(aes(x = sunday_of_week, y = fallecidos_semana_scaled), color = "red") +
scale_y_continuous(
name = "Casos positivos",
labels = scales::comma,
sec.axis = sec_axis(
name = "Fallecidos",
trans = ~ . / factor,
labels = scales::comma
)
) +
scale_x_date(
name = "",
date_labels = "%b\n%Y",
date_breaks = "1 month"
) +
labs(
title = "COVID-19 (Perú): Casos positivos y fallecidos por semana epidemiológica",
subtitle = glue::glue("Fuente: Datos abiertos del MINSA, de {min_yw} a {max_yw}"),
caption = "@jmcastagnetto, Jesus M. Castagnetto"
) +
theme_minimal(16) +
theme(
plot.background = element_rect(fill = "white"),
axis.title.y.left = element_text(color = "blue", size = 18, face = "bold"),
axis.text.y.left = element_text(color = "blue"),
axis.title.y.right = element_text(color = "red", size = 18, face = "bold"),
axis.text.y.right = element_text(color = "red"),
plot.title.position = "plot",
plot.title = element_text(size = 24),
plot.subtitle = element_text(size = 18, color = "grey40"),
plot.caption = element_text(family = "Inconsolata", size = 16),
plot.margin = unit(rep(.5, 4), "cm")
)
ggsave(
p1,
filename = "covid19-peru-positivos-fallecidos-semanaepi.png",
height = 10,
width = 14
)
p2 <- ggplot(comb) +
geom_point(aes(x = sunday_of_week, y = positivos_semana), color = "blue") +
geom_smooth(aes(x = sunday_of_week, y = positivos_semana), color = "blue", method = "gam") +
geom_point(aes(x = sunday_of_week, y = fallecidos_semana_scaled), color = "red") +
geom_smooth(aes(x = sunday_of_week, y = fallecidos_semana_scaled), color = "red", method = "gam") +
scale_y_continuous(
name = "Casos positivos",
labels = scales::comma,
sec.axis = sec_axis(
name = "Fallecidos",
trans = ~ . / factor,
labels = scales::comma
)
) +
scale_x_date(
name = "",
date_labels = "%b\n%Y",
date_breaks = "1 month"
) +
labs(
title = "COVID-19 (Perú): Casos positivos y fallecidos por semana epidemiológica",
subtitle = glue::glue("Fuente: Datos abiertos del MINSA, de {min_yw} a {max_yw}"),
caption = "Aproximación usando GAM [y ~ s(x, bs = 'cs')] - @jmcastagnetto, Jesus M. Castagnetto"
) +
theme_minimal(16) +
theme(
plot.background = element_rect(fill = "white"),
axis.title.y.left = element_text(color = "blue", size = 18, face = "bold"),
axis.text.y.left = element_text(color = "blue"),
axis.title.y.right = element_text(color = "red", size = 18, face = "bold"),
axis.text.y.right = element_text(color = "red"),
plot.title.position = "plot",
plot.title = element_text(size = 24),
plot.subtitle = element_text(size = 18, color = "grey40"),
plot.caption = element_text(family = "Inconsolata", size = 16),
plot.margin = unit(rep(.5, 4), "cm")
)
ggsave(
p2,
filename = "covid19-peru-positivos-fallecidos-semanaepi-gam.png",
height = 10,
width = 14
)
@jmcastagnetto
Copy link
Author

Gráfico de líneas

covid19-peru-positivos-fallecidos-semanaepi

Gráfico con aproximación usando GAM

covid19-peru-positivos-fallecidos-semanaepi-gam

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment