Last active
March 28, 2020 14:11
-
-
Save JonasSchroeder/9e3d53e56601b3021f7afb236ad70844 to your computer and use it in GitHub Desktop.
Featured in this medium article: "A Beginner’s Guide to Creating a Corona “Dashboard” (Part 1)" https://medium.com/@jonas.schroeder1991/a-beginners-guide-to-creating-a-corona-dashboard-3553b01d8d44
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Data gathered from European Center for Disease Prevention and Control | |
# https://www.ecdc.europa.eu/en/publications-data/download-todays-data-geographic-distribution-covid-19-cases-worldwide | |
# Note: Number of cases per day may differ from other sources; cases might be moved from one day to another | |
# Author: Jonas Schröder https://medium.com/@jonas.schroeder1991 | |
library(readxl) | |
library(httr) | |
library(tidyverse) | |
library(dplyr) | |
library(ggpubr) | |
# Define date of data pull | |
url <- paste("https://www.ecdc.europa.eu/sites/default/files/documents/COVID-19-geographic-disbtribution-worldwide-", "2020-03-22", ".xlsx", sep = "") | |
# DL and read data set | |
GET(url, authenticate(":", ":", type="ntlm"), write_disk(tf <- tempfile(fileext = ".xlsx"))) | |
data <- read_excel(tf) | |
#------------------------------------------------------------------------------------------------------------------------------ | |
# VISUALIZE GROWTH PER DAY AND COUNTRY | |
#------------------------------------------------------------------------------------------------------------------------------ | |
# China | |
data_china <- filter(data, data$GeoId=="CN") | |
ggplot(data_china, aes(x=DateRep, y=Cases)) + | |
geom_point(color = "darkred") + | |
geom_smooth(method="auto", se=T, color = "darkred") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("China: New Cases per Day") | |
ggplot(data_china) + | |
geom_line(aes(rev(DateRep), cumsum(Cases[order(Cases)])), color = "darkred") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("China: Cummulative Cases") | |
# Spain | |
data_spain <- filter(data, data$GeoId=="ES") | |
data_spain <- filter(data_spain, data_spain$DateRep > "2020-02-20") | |
cpd_spain <- ggplot(data_spain, aes(x=DateRep, y=Cases)) + | |
geom_point(color = "darkorange") + | |
geom_smooth(method="auto", se=T, color = "darkorange") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("Spain: New Cases per Day") | |
ggplot(data_spain) + | |
geom_line(aes(rev(DateRep), cumsum(Cases[order(Cases)])), color = "darkorange") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("Spain: Cummulative Cases") | |
# France | |
data_france <- filter(data, data$GeoId=="FR") | |
data_france <- filter(data_france, data_france$DateRep > "2020-02-20") | |
cpd_france <- ggplot(data_france, aes(x=DateRep, y=Cases)) + | |
geom_point(color = "blue") + | |
geom_smooth(method="auto", se=T, color = "blue") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("France: New Cases per Day") | |
ggplot(data_france) + | |
geom_line(aes(rev(DateRep), cumsum(Cases[order(Cases)])), color = "blue") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("France: Cummulative Cases") | |
# Germany | |
data_germany <- filter(data, data$GeoId=="DE") | |
data_germany <- filter(data_germany, data_germany$DateRep > "2020-02-20") | |
cpd_germany <- ggplot(data_germany, aes(x=DateRep, y=Cases)) + | |
geom_point(color = "black") + | |
geom_smooth(method="auto", se=T, color = "black") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("Germany: New Cases per Day") | |
ggplot(data_germany) + | |
geom_line(aes(rev(DateRep), cumsum(Cases[order(Cases)])), color = "black") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("Germany: Cummulative Cases") | |
# Italy | |
data_italy <- filter(data, data$GeoId=="IT") | |
data_italy <- filter(data_italy, data_italy$DateRep > "2020-02-20") | |
cpd_italy <- ggplot(data_italy, aes(x=DateRep, y=Cases)) + | |
geom_point(color = "darkgreen") + | |
geom_smooth(method="auto", se=T ,color = "darkgreen") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("Italy: New Cases per Day") | |
ggplot(data_italy) + | |
geom_line(aes(rev(DateRep), cumsum(Cases[order(Cases)])), color = "darkgreen") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("Italy: Cummulative Cases") | |
# Country comparison | |
cpd_comparison_1 <- ggplot() + | |
geom_line(data=data_italy, aes(x=DateRep, y=Cases, color="Italy")) + | |
geom_line(data=data_spain, aes(x=DateRep, y=Cases, color="Spain")) + | |
geom_line(data=data_germany, aes(x=DateRep, y=Cases, color="Germany")) + | |
geom_line(data=data_france, aes(x=DateRep, y=Cases, color="France")) + | |
scale_color_manual(values = c( | |
'Italy' = 'darkgreen', | |
'Spain' = 'darkorange', | |
'Germany' = 'black', | |
'France' = 'blue')) + | |
labs(color = 'Country') + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("Country Comparison: New Cases per Day") + | |
theme( | |
legend.position="right", | |
axis.title = element_text(size=12), | |
axis.text = element_text(size=12), | |
plot.title = element_text(size=14), | |
legend.title = element_text(size=12), | |
legend.text = element_text(size=10) | |
) | |
cpd_comparison_2 <- ggplot() + | |
geom_smooth(data=data_italy, aes(x=DateRep, y=Cases), color="darkgreen", method = "loess") + | |
geom_smooth(data=data_spain, aes(x=DateRep, y=Cases), color="darkorange", method = "loess") + | |
geom_smooth(data=data_germany, aes(x=DateRep, y=Cases), color="black", method = "loess") + | |
geom_smooth(data=data_france, aes(x=DateRep, y=Cases), color="blue", method = "loess") + | |
xlab("Date") + | |
ylab("Cases") + | |
ggtitle("New Cases per Day (Interpolated)") + | |
theme( | |
legend.position="right", | |
axis.title = element_text(size=12), | |
axis.text = element_text(size=12), | |
plot.title = element_text(size=14), | |
legend.title = element_text(size=12), | |
legend.text = element_text(size=10) | |
) | |
ggplot() + | |
geom_line(data=data_italy, aes(x=rev(DateRep), y=cumsum(Cases[order(Cases)]), color = "Italy")) + | |
geom_line(data=data_germany, aes(x=rev(DateRep), y=cumsum(Cases[order(Cases)]), color = "Germany")) + | |
geom_line(data=data_spain, aes(x=rev(DateRep), y=cumsum(Cases[order(Cases)]), color = "Spain")) + | |
geom_line(data=data_france, aes(x=rev(DateRep), y=cumsum(Cases[order(Cases)]), color = "France")) + | |
xlab("Date") + | |
ylab("Cases") + | |
scale_color_manual(values = c( | |
'Italy' = 'darkgreen', | |
'Spain' = 'darkorange', | |
'Germany' = 'black', | |
'France' = 'blue')) + | |
theme( | |
legend.position="right", | |
axis.title = element_text(size=12), | |
axis.text = element_text(size=12), | |
plot.title = element_text(size=14), | |
legend.title = element_text(size=12), | |
legend.text = element_text(size=10) | |
) + | |
ggtitle("Country Comparison: Total Number of Cases (Cumulative)") | |
# Merge plots to dashboard | |
part1 <- ggarrange(cpd_italy, cpd_spain, cpd_germany, cpd_france, align="hv") | |
part2 <- ggarrange(cpd_comparison_2, cpd_comparison_1, ncol=2, align="h") | |
ggarrange(part1, part2, nrow=2, heights=c(2,3), align="hv") | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment