# Basic knitr options
library(knitr)
opts_chunk$set(comment = NA, 
               # echo = FALSE, 
               warning = FALSE, 
               message = FALSE, 
               error = TRUE, 
               cache = FALSE,
               fig.width = 8.64,
               fig.height = 4.86,
               fig.path = 'figures/')
## Load libraries
library(covid19)
library(ggplot2)
library(lubridate)
library(dplyr)
library(ggplot2)

# Define vector of countries
countries <- c('China','Korea, South',
               'Italy',
               'Spain',
               'UK',
               'Germany',
               'South Africa',
               'Ghana',
               'Kenya')

All countries

Cumulative cases

"Start date" of 150 cases

Logarithmic:

plot_day_zero(countries = countries, day0 = 150)

Linear:

plot_day_zero(countries = countries, day0 = 150, ylog = F)

"Start date" of 25 cases

Logarithmic:

plot_day_zero(countries = countries, day0 = 25)

Linear:

plot_day_zero(countries = countries, day0 = 25, ylog = F)

Cumulative deaths

"Start date" of 50 deaths

Logarithmic:

plot_day_zero(countries = countries, day0 = 50, deaths = T)

Linear:

plot_day_zero(countries = countries, day0 = 50, ylog = F, deaths = T)

"Start date" of 15 deaths

Logarithmic:

plot_day_zero(countries = countries, day0 = 15, deaths = T)

Linear:

plot_day_zero(countries = countries, day0 = 15, ylog = F, deaths = T)

"Start date" of 5 deaths

Logarithmic:

plot_day_zero(countries = countries, day0 = 25, 5, deaths = T)

Linear:

plot_day_zero(countries = countries, day0 = 5, ylog = F, deaths = T)

Only Spain

Cumulative cases by population

pd <- df %>% filter(country == 'Spain')
pd <- pd %>% left_join(world_pop)
pd$value <- pd$confirmed_cases / pd$pop * 100000
pd <- pd %>% filter(value > 0)

ggplot(data = pd,
       aes(x = date,
           y = value)) +
  theme_simple() +
  geom_line() +
  geom_point() +
  labs(x = '',
       y = '',
       title = 'Spain: Confirmed COVID-19 cases per 100,000 population',
       subtitle = paste0('Data as of ', max(pd$date))) +
  theme(axis.title = element_blank(),
        axis.text = element_text(size = 20)) +
  geom_text(data = pd %>% filter(date == max(date)),
            aes(x = date - 2,
                y = value,
                label = round(value, digits = 1)),
            alpha = 0.7)

Cumulative deaths by population

pd <- df %>% filter(country == 'Spain')
pd <- pd %>% left_join(world_pop)
pd$value <- pd$deaths / pd$pop * 100000
pd <- pd %>% filter(value > 0)

ggplot(data = pd,
       aes(x = date,
           y = value)) +
  theme_simple() +
  geom_line() +
  geom_point() +
  labs(x = '',
       y = '',
       title = 'Spain: Confirmed COVID-19 cases per 100,000 population',
       subtitle = paste0('Data as of ', max(pd$date))) +
  theme(axis.title = element_blank(),
        axis.text = element_text(size = 20)) +
  geom_text(data = pd %>% filter(date == max(date)),
            aes(x = date - 1,
                y = value,
                label = round(value, digits = 1)),
            alpha = 0.7)

Cumulative deaths by population comparison with Italy

pd <- df %>% filter(country %in% c('Spain', 'Italy'))
pd <- pd %>% left_join(world_pop)
pd$value <- pd$deaths / pd$pop * 100000
pd <- pd %>% filter(value > 0)

cols <- (c('black', 'red'))

ggplot(data = pd,
       aes(x = date,
           y = value)) +
  theme_simple() +
  geom_line(aes(color = country)) +
  scale_y_log10() +
  geom_point(aes(color = country)) +
  labs(x = '',
       y = '',
       title = 'Spain: COVID-19 deaths per 100,000 population',
       subtitle = paste0('Data as of ', max(pd$date))) +
  theme(axis.title = element_blank(),
        axis.text = element_text(size = 20)) +
  geom_text(data = pd %>% filter(date == max(date)),
            aes(x = date - 1,
                y = value,
                label = round(value, digits = 1)),
            alpha = 0.7) +
  scale_color_manual(name = '',
                     values = cols)

Cumulative deaths NOT by population comparison with Italy

pd <- df %>% filter(country %in% c('Spain', 'Italy'))
pd$value <- pd$deaths
pd <- pd %>% filter(value > 0)

cols <- (c('black', 'red'))

ggplot(data = pd,
       aes(x = date,
           y = value)) +
  theme_simple() +
  geom_line(aes(color = country)) +
  scale_y_log10() +
  geom_point(aes(color = country)) +
  labs(x = '',
       y = '',
       title = 'Spain: COVID-19 deaths',
       subtitle = paste0('Data as of ', max(pd$date))) +
  theme(axis.title = element_blank(),
        axis.text = element_text(size = 20)) +
  geom_text(data = pd %>% filter(date == max(date)),
            aes(x = date - 1,
                y = value,
                label = round(value, digits = 1)),
            alpha = 0.7) +
  scale_color_manual(name = '',
                     values = cols)

Cumulative deaths by population comparison with Europe

the_countries <- sort(unique(c('Spain', 'Italy', 'France', 'Germany', 'Switzerland',
                                   'Denmark', 'Netherlands', 'Norway', 'Sweden')))
pd <- df %>% filter(country %in% the_countries)
pd <- pd %>% left_join(world_pop)
pd$value <- pd$deaths / pd$pop * 100000
pd <- pd %>% filter(value > 0)

# cols <- rev(c('black', 'red'))
cols <- colorRampPalette(RColorBrewer::brewer.pal(n = 8, 'Set1'))(length(unique(pd$country)))

ggplot(data = pd,
       aes(x = date,
           y = value)) +
  theme_simple() +
  geom_line(aes(color = country), size = 2) +
  geom_point(aes(color = country)) +
  labs(x = '',
       y = '',
       title = 'Spain: Confirmed COVID-19 deaths per 100,000 population',
       subtitle = paste0('Data as of ', max(pd$date))) +
  theme(axis.title = element_blank(),
        axis.text = element_text(size = 20)) +
  geom_text(data = pd %>% filter(date == max(date)),
            aes(x = date +3,
                color = country,
                y = value,
                label =paste0(country, ": ",  round(value, digits = 2))),
            alpha = 0.9) +
  scale_color_manual(name = '',
                     values = cols) +
  scale_y_log10() +
  theme(legend.position = 'none') +
  xlim(min(pd$date),
       max(pd$date) +5)

Spain's CCAAs

Cumulative cases

"Start date" of 50 cases

Logarithmic:

plot_day_zero_esp(ccaa = sort(unique(esp_df$ccaa)),
                  day0 = 50)

Linear:

plot_day_zero_esp(ccaa = sort(unique(esp_df$ccaa)),
                  day0 = 50,
                  ylog = F)

Cumulative deaths

"Start date" of 5 deaths

Logarithmic:

plot_day_zero_esp(ccaa = sort(unique(esp_df$ccaa)),
                  day0 = 5,
                  deaths = T)

Linear:

plot_day_zero_esp(ccaa = sort(unique(esp_df$ccaa)),
                  day0 = 5,
                  deaths = T,
                  ylog = F)

CCAAs, deaths adjusted by population

adj <- esp_df %>% filter(date == max(date))
pop <- covid19::esp_pop
joined <- left_join(adj, pop)
# make vars
joined <- joined %>%
  mutate(cases_per_k = (cases / pop) * 100000,
         deaths_per_k = (deaths / pop) * 100000)

joined$value <- joined$deaths_per_k
joined <- joined %>% arrange(value)
joined$p <- joined$value / sum(joined$value) * 100
# joined$ccaa <- factor(joined$ccaa, 
#                       levels = joined$ccaa)
text_size <- 10
ggplot(data = joined,
       aes(x = ccaa,
           y = value)) + 
  geom_bar(stat = 'identity',
           fill = 'black') +
  theme_simple() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
  labs(x = '',
       y = 'Deaths',
       title = 'COVID-19 deaths in Spain (per 100,000)',
       # subtitle = 'Data as of evening of Sunday, March 15',
       caption = 'github.com/databrew/covid19 | joe@databrew.cc') +
  theme(legend.position = 'top',
        legend.text = element_text(size = text_size * 2),
        axis.title = element_text(size = text_size * 2),
        plot.title = element_text(size = text_size * 2.3),
        axis.text.x = element_text(size = text_size * 1.5)) +
  geom_text(data = joined,
            aes(x = ccaa,
                y = value,
                label = paste0(deaths, ' deaths\n(',
                               round(value, digits = 1), ' per\n100,000)')),
                # label = paste0(deaths, '\n(',
                #                round(p, digits = 1), '%)')),
            size = text_size * 0.25,
            nudge_y = 0.35)
# ggsave('~/Desktop/spain.png')

CCAAs, cases adjusted by population

adj <- esp_df %>% filter(date == max(date))
pop <- covid19::esp_pop
joined <- left_join(adj, pop)
# make vars
joined <- joined %>%
  mutate(cases_per_k = (cases / pop) * 100000,
         deaths_per_k = (deaths / pop) * 100000)

joined$value <- joined$cases_per_k
joined <- joined %>% arrange(value)
joined$p <- joined$value / sum(joined$value) * 100
# joined$ccaa <- factor(joined$ccaa, 
#                       levels = joined$ccaa)
text_size <- 10
ggplot(data = joined,
       aes(x = ccaa,
           y = value)) + 
  geom_bar(stat = 'identity',
           fill = 'black') +
  theme_simple() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
  labs(x = '',
       y = 'Cases',
       title = 'COVID-19 cases in Spain (per 100,000 people)',
       # subtitle = 'Data as of evening of Sunday, March 15',
       caption = 'github.com/databrew/covid19 | joe@databrew.cc') +
  theme(legend.position = 'top',
        legend.text = element_text(size = text_size * 2),
        axis.title = element_text(size = text_size * 2),
        plot.title = element_text(size = text_size * 2.3),
        axis.text.x = element_text(size = text_size * 1.5)) +
  geom_text(data = joined,
            aes(x = ccaa,
                y = value,
                label = paste0(cases, ' cases\n(',
                               round(value, digits = 1), ' per\n100,000)')),
                # label = paste0(deaths, '\n(',
                #                round(p, digits = 1), '%)')),
            size = text_size * 0.25,
            nudge_y = 12)
# ggsave('~/Desktop/spain.png')

CCAAs, UCI by population

adj <- esp_df %>% filter(date == max(date))
pop <- covid19::esp_pop
joined <- left_join(adj, pop)
# make vars
joined <- joined %>%
  mutate(cases_per_k = (cases / pop) * 100000,
         deaths_per_k = (deaths / pop) * 100000,
         uci_per_k = (uci / pop) * 100000)

joined$value <- joined$uci_per_k
joined <- joined %>% arrange(value)
joined$p <- joined$value / sum(joined$value) * 100
# joined$ccaa <- factor(joined$ccaa, 
#                       levels = joined$ccaa)
text_size <- 10
ggplot(data = joined,
       aes(x = ccaa,
           y = value)) + 
  geom_bar(stat = 'identity',
           fill = 'black') +
  theme_simple() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
  labs(x = '',
       y = 'Cases',
       title = 'COVID-19: intensive care patients per 100,000',
       # subtitle = 'Data as of evening of Sunday, March 15',
       caption = 'github.com/databrew/covid19 | joe@databrew.cc') +
  theme(legend.position = 'top',
        legend.text = element_text(size = text_size * 2),
        axis.title = element_text(size = text_size * 2),
        plot.title = element_text(size = text_size * 2.3),
        axis.text.x = element_text(size = text_size * 1.5)) +
  geom_text(data = joined,
            aes(x = ccaa,
                y = value,
                label = paste0(uci, '\nadmissions per\n(',
                               round(value, digits = 1), ' per\n100,000)')),
                # label = paste0(deaths, '\n(',
                #                round(p, digits = 1), '%)')),
            size = text_size * 0.25,
            nudge_y = 0.4)
# ggsave('~/Desktop/spain.png')

Spain and Italy

National comparison

Start date of 150 cases, cases, logarithmic scale

plot_day_zero(countries = c('Spain', 'Italy'))

Start date of 150 cases, cases, linear scale

plot_day_zero(countries = c('Spain', 'Italy'), ylog = F)

Start date of 50 deaths, deahs, logarithmic scale

plot_day_zero(countries = c('Spain', 'Italy'), deaths = T, day0 = 50)

Start date of 150 cases, cases, linear scale

plot_day_zero(countries = c('Spain', 'Italy'), deaths = T, day0  = 50, ylog = F)

Spain

Ratio of deaths to cases

pd <- esp_df %>%
  filter(date == '2020-03-15') %>%
  dplyr::select(ccaa, deaths, cases) %>%
  mutate(deaths_per_case = deaths / cases * 1000)
text_size = 10
ggplot(data = pd,
       aes(x = ccaa,
           y = deaths_per_case)) +
    geom_bar(stat = 'identity',
           fill = 'black') +
  theme_simple() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
  labs(x = '',
       y = 'Deaths per 1.000 confirmed cases',
       title = 'COVID-19: deaths per 1.000 cases',
       # subtitle = 'Data as of evening of Sunday, March 15',
       caption = 'github.com/databrew/covid19 | joe@databrew.cc') +
  theme(legend.position = 'top',
        legend.text = element_text(size = text_size * 2),
        axis.title = element_text(size = text_size * 2),
        plot.title = element_text(size = text_size * 2.3),
        axis.text.x = element_text(size = text_size * 1.5)) +
  geom_text(data = pd,
            aes(x = ccaa,
                y = deaths_per_case,
                label = paste0(deaths, ' deaths\n(', round(deaths_per_case, digits = 1), 
                                ' per\n1.000)')),
                # label = paste0(deaths, '\n(',
                #                round(p, digits = 1), '%)')),
            size = text_size * 0.35,
            nudge_y = 5)


databrew/covid19 documentation built on Aug. 24, 2020, 10:39 a.m.