Skip to content

Instantly share code, notes, and snippets.

@thoughtfulbloke
Last active May 8, 2020 23:31
Show Gist options
  • Save thoughtfulbloke/35720e9436a1257d85f8876f3820f933 to your computer and use it in GitHub Desktop.
Save thoughtfulbloke/35720e9436a1257d85f8876f3820f933 to your computer and use it in GitHub Desktop.
library(dplyr)
library(lubridate)
library(ggplot2)
library(ggthemes)
# European Centre for Disease Control and Prevention
EUcdc <- read.csv("https://opendata.ecdc.europa.eu/covid19/casedistribution/csv",
stringsAsFactors = FALSE, fileEncoding = "UTF-8-BOM")
highlight_countries <- c("New_Zealand", "United_Kingdom", "United_States_of_America",
"Taiwan", "Sweden", "Vietnam", "Australia")
highlight <- EUcdc %>%
mutate(ReportDate = dmy(dateRep, tz="UTC")) %>%
filter(ReportDate > dmy("30-1-2020", tz="UTC"),
countriesAndTerritories %in% highlight_countries) %>%
arrange(countriesAndTerritories, ReportDate) %>%
group_by(countriesAndTerritories) %>%
mutate(total_cases = cumsum(cases),
total_deaths = cumsum(deaths),
days = as.integer(difftime(ReportDate, dmy("30-1-2020", tz="UTC"), units="day"))) %>%
ungroup() %>%
filter(total_cases > 29) %>%
arrange(countriesAndTerritories, ReportDate) %>%
group_by(countriesAndTerritories) %>%
mutate(reports=n()) %>%
ungroup() %>%
filter(reports > 10) %>%
group_by(countriesAndTerritories) %>%
summarise(days_to_20cases = days[1],
max_cases = max(cases),
current_cases = (cases[n()] + cases[n()-1] + cases[n()-2] + cases[n()-3] +
cases[n()-4] + cases[n()-5] + cases[n()-6])/7,
current_7daysmooth_vs_max_cases = current_cases/ max_cases)
EUcdc %>%
mutate(ReportDate = dmy(dateRep, tz="UTC")) %>%
filter(ReportDate > dmy("30-1-2020", tz="UTC")) %>%
arrange(countriesAndTerritories, ReportDate) %>%
group_by(countriesAndTerritories) %>%
mutate(total_cases = cumsum(cases),
total_deaths = cumsum(deaths),
days = as.integer(difftime(ReportDate, dmy("30-1-2020", tz="UTC"), units="day"))) %>%
ungroup() %>%
filter(total_cases > 29) %>%
arrange(countriesAndTerritories, ReportDate) %>%
group_by(countriesAndTerritories) %>%
mutate(reports=n()) %>%
ungroup() %>%
filter(reports > 10) %>%
group_by(countriesAndTerritories) %>%
summarise(days_to_20cases = days[1],
max_cases = max(cases),
current_cases = (cases[n()] + cases[n()-1] + cases[n()-2] + cases[n()-3] +
cases[n()-4] + cases[n()-5] + cases[n()-6])/7,
current_7daysmooth_vs_max_cases = current_cases/ max_cases) %>%
ggplot(aes(x=days_to_20cases, y=current_7daysmooth_vs_max_cases)) +
geom_point(colour="#AAAAAA",alpha=0.5) + theme_minimal() +
geom_point(data=highlight, aes(x=days_to_20cases, y=current_7daysmooth_vs_max_cases,
colour=countriesAndTerritories)) +
scale_colour_colorblind() + xlab("days to 30 cases starting from Jan 30") +
ylab("current daily cases (smoothed 7 day lag) as proportion of max daily cases")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment