Coronavirus Dataset

Coronavirus Dataset is provided by RamiKrispin, updated till 31 July 2020

library(coronavirus)
#update_dataset()
#covid19_df <- refresh_coronavirus_jhu()
#head(covid19_df)
#glimpse(covid19_df)
data("coronavirus")
head(coronavirus)
##         date province     country      lat     long      type cases
## 1 2020-01-22          Afghanistan 33.93911 67.70995 confirmed     0
## 2 2020-01-23          Afghanistan 33.93911 67.70995 confirmed     0
## 3 2020-01-24          Afghanistan 33.93911 67.70995 confirmed     0
## 4 2020-01-25          Afghanistan 33.93911 67.70995 confirmed     0
## 5 2020-01-26          Afghanistan 33.93911 67.70995 confirmed     0
## 6 2020-01-27          Afghanistan 33.93911 67.70995 confirmed     0

Top 20 country

Summary of the total confrimed cases by country (top 20):

library(dplyr)
summary_df <- coronavirus %>% 
  filter(type == "confirmed") %>%
  group_by(country) %>%
  summarise(total_cases = sum(cases)) %>%
  arrange(-total_cases)

Update new cases

Summary of new cases during the past 24 hours by country and type (as of 2020-07-31):

library(tidyr)

coronavirus %>% 
  filter(date == max(date)) %>%
  select(country, type, cases) %>%
  group_by(country, type) %>%
  summarise(total_cases = sum(cases)) %>%
  pivot_wider(names_from = type,
              values_from = total_cases) %>%
  arrange(-confirmed)
## # A tibble: 188 x 4
## # Groups:   country [188]
##    country      confirmed death recovered
##    <chr>            <int> <int>     <int>
##  1 US               67023  1259     24005
##  2 India            61242   793     39026
##  3 Brazil           52383  1212     52047
##  4 South Africa     11014   193     16570
##  5 Colombia          9488   295      5692
##  6 Mexico            8458   688      7015
##  7 Peru              6809   205         0
##  8 Argentina         5929   102      3184
##  9 Russia            5468   161      8735
## 10 Iraq              3346    70      1888
## # ... with 178 more rows

Total cases

Plotting the total cases by type worldwide:

library(plotly)

coronavirus %>% 
  group_by(type, date) %>%
  summarise(total_cases = sum(cases)) %>%
  pivot_wider(names_from = type, values_from = total_cases) %>%
  arrange(date) %>%
  mutate(active = confirmed - death - recovered) %>%
  mutate(active_total = cumsum(active),
                recovered_total = cumsum(recovered),
                death_total = cumsum(death)) %>%
  plot_ly(x = ~ date,
                  y = ~ active_total,
                  name = 'Active', 
                  fillcolor = '#1f77b4',
                  type = 'scatter',
                  mode = 'none', 
                  stackgroup = 'one') %>%
  add_trace(y = ~ death_total, 
             name = "Death",
             fillcolor = '#E41317') %>%
  add_trace(y = ~recovered_total, 
            name = 'Recovered', 
            fillcolor = 'forestgreen') %>%
  layout(title = "Distribution of Covid19 Cases Worldwide",
         legend = list(x = 0.1, y = 0.9),
         yaxis = list(title = "Number of Cases"),
         xaxis = list(title = "Source: Johns Hopkins University Center for Systems Science and Engineering"))

## The treemap {.tabset}

Plot the confirmed cases distribution by country with treemap plot:

conf_df <- coronavirus %>% 
  filter(type == "confirmed") %>%
  group_by(country) %>%
  summarise(total_cases = sum(cases)) %>%
  arrange(-total_cases) %>%
  mutate(parents = "Confirmed") %>%
  ungroup() 
  
  plot_ly(data = conf_df,
          type= "treemap",
          values = ~total_cases,
          labels= ~ country,
          parents=  ~parents,
          domain = list(column=0),
          name = "Confirmed",
          textinfo="label+value+percent parent")
LS0tDQp0aXRsZTogIkdlbmVyYWwgVmlldyBhYm91dCB0aGUgQ09WSUQgcGFuZGVtaWMgdGlsbCAzMSBKdWx5IDIwMjAiDQphdXRob3I6ICJUcmFuIFF1YW5nIFF1eSAtIElDVFUiDQpzdWJ0aXRsZTogUiBmb3IgRGF0YSBWaXN1YWxpemF0aW9uDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgaGlnaGxpZ2h0OiBweWdtZW50cw0KICAgIHRoZW1lOiBmbGF0bHkNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KYGBge3Igc2V0dXAsaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpDQpgYGANCg0KIyMgQ29yb25hdmlydXMgRGF0YXNldCB7LnRhYnNldH0NCg0KQ29yb25hdmlydXMgRGF0YXNldCBpcyBwcm92aWRlZCBieSBSYW1pS3Jpc3BpbiwgdXBkYXRlZCB0aWxsIDMxIEp1bHkgMjAyMA0KDQoNCmBgYHtyfQ0KbGlicmFyeShjb3JvbmF2aXJ1cykNCiN1cGRhdGVfZGF0YXNldCgpDQojY292aWQxOV9kZiA8LSByZWZyZXNoX2Nvcm9uYXZpcnVzX2podSgpDQojaGVhZChjb3ZpZDE5X2RmKQ0KI2dsaW1wc2UoY292aWQxOV9kZikNCmRhdGEoImNvcm9uYXZpcnVzIikNCmhlYWQoY29yb25hdmlydXMpDQoNCmBgYA0KIyMgVG9wIDIwIGNvdW50cnkgey50YWJzZXR9DQoNClN1bW1hcnkgb2YgdGhlIHRvdGFsIGNvbmZyaW1lZCBjYXNlcyBieSBjb3VudHJ5ICh0b3AgMjApOg0KDQoNCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCnN1bW1hcnlfZGYgPC0gY29yb25hdmlydXMgJT4lIA0KICBmaWx0ZXIodHlwZSA9PSAiY29uZmlybWVkIikgJT4lDQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQ0KICBzdW1tYXJpc2UodG90YWxfY2FzZXMgPSBzdW0oY2FzZXMpKSAlPiUNCiAgYXJyYW5nZSgtdG90YWxfY2FzZXMpDQoNCmBgYA0KDQojIyBVcGRhdGUgbmV3IGNhc2VzIHsudGFic2V0fQ0KDQpTdW1tYXJ5IG9mIG5ldyBjYXNlcyBkdXJpbmcgdGhlIHBhc3QgMjQgaG91cnMgYnkgY291bnRyeSBhbmQgdHlwZSAoYXMgb2YgMjAyMC0wNy0zMSk6DQoNCg0KYGBge3J9DQpsaWJyYXJ5KHRpZHlyKQ0KDQpjb3JvbmF2aXJ1cyAlPiUgDQogIGZpbHRlcihkYXRlID09IG1heChkYXRlKSkgJT4lDQogIHNlbGVjdChjb3VudHJ5LCB0eXBlLCBjYXNlcykgJT4lDQogIGdyb3VwX2J5KGNvdW50cnksIHR5cGUpICU+JQ0KICBzdW1tYXJpc2UodG90YWxfY2FzZXMgPSBzdW0oY2FzZXMpKSAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHR5cGUsDQogICAgICAgICAgICAgIHZhbHVlc19mcm9tID0gdG90YWxfY2FzZXMpICU+JQ0KICBhcnJhbmdlKC1jb25maXJtZWQpDQoNCmBgYA0KDQojIyBUb3RhbCBjYXNlcyB7LnRhYnNldH0NCg0KUGxvdHRpbmcgdGhlIHRvdGFsIGNhc2VzIGJ5IHR5cGUgd29ybGR3aWRlOg0KDQpgYGB7cn0NCmxpYnJhcnkocGxvdGx5KQ0KDQpjb3JvbmF2aXJ1cyAlPiUgDQogIGdyb3VwX2J5KHR5cGUsIGRhdGUpICU+JQ0KICBzdW1tYXJpc2UodG90YWxfY2FzZXMgPSBzdW0oY2FzZXMpKSAlPiUNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHR5cGUsIHZhbHVlc19mcm9tID0gdG90YWxfY2FzZXMpICU+JQ0KICBhcnJhbmdlKGRhdGUpICU+JQ0KICBtdXRhdGUoYWN0aXZlID0gY29uZmlybWVkIC0gZGVhdGggLSByZWNvdmVyZWQpICU+JQ0KICBtdXRhdGUoYWN0aXZlX3RvdGFsID0gY3Vtc3VtKGFjdGl2ZSksDQogICAgICAgICAgICAgICAgcmVjb3ZlcmVkX3RvdGFsID0gY3Vtc3VtKHJlY292ZXJlZCksDQogICAgICAgICAgICAgICAgZGVhdGhfdG90YWwgPSBjdW1zdW0oZGVhdGgpKSAlPiUNCiAgcGxvdF9seSh4ID0gfiBkYXRlLA0KICAgICAgICAgICAgICAgICAgeSA9IH4gYWN0aXZlX3RvdGFsLA0KICAgICAgICAgICAgICAgICAgbmFtZSA9ICdBY3RpdmUnLCANCiAgICAgICAgICAgICAgICAgIGZpbGxjb2xvciA9ICcjMWY3N2I0JywNCiAgICAgICAgICAgICAgICAgIHR5cGUgPSAnc2NhdHRlcicsDQogICAgICAgICAgICAgICAgICBtb2RlID0gJ25vbmUnLCANCiAgICAgICAgICAgICAgICAgIHN0YWNrZ3JvdXAgPSAnb25lJykgJT4lDQogIGFkZF90cmFjZSh5ID0gfiBkZWF0aF90b3RhbCwgDQogICAgICAgICAgICAgbmFtZSA9ICJEZWF0aCIsDQogICAgICAgICAgICAgZmlsbGNvbG9yID0gJyNFNDEzMTcnKSAlPiUNCiAgYWRkX3RyYWNlKHkgPSB+cmVjb3ZlcmVkX3RvdGFsLCANCiAgICAgICAgICAgIG5hbWUgPSAnUmVjb3ZlcmVkJywgDQogICAgICAgICAgICBmaWxsY29sb3IgPSAnZm9yZXN0Z3JlZW4nKSAlPiUNCiAgbGF5b3V0KHRpdGxlID0gIkRpc3RyaWJ1dGlvbiBvZiBDb3ZpZDE5IENhc2VzIFdvcmxkd2lkZSIsDQogICAgICAgICBsZWdlbmQgPSBsaXN0KHggPSAwLjEsIHkgPSAwLjkpLA0KICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk51bWJlciBvZiBDYXNlcyIpLA0KICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlNvdXJjZTogSm9obnMgSG9wa2lucyBVbml2ZXJzaXR5IENlbnRlciBmb3IgU3lzdGVtcyBTY2llbmNlIGFuZCBFbmdpbmVlcmluZyIpKQ0KDQpgYGANCiMjIFRoZSB0cmVlbWFwIHsudGFic2V0fQ0KDQpQbG90IHRoZSBjb25maXJtZWQgY2FzZXMgZGlzdHJpYnV0aW9uIGJ5IGNvdW50cnkgd2l0aCB0cmVlbWFwIHBsb3Q6DQoNCg0KYGBge3J9DQpjb25mX2RmIDwtIGNvcm9uYXZpcnVzICU+JSANCiAgZmlsdGVyKHR5cGUgPT0gImNvbmZpcm1lZCIpICU+JQ0KICBncm91cF9ieShjb3VudHJ5KSAlPiUNCiAgc3VtbWFyaXNlKHRvdGFsX2Nhc2VzID0gc3VtKGNhc2VzKSkgJT4lDQogIGFycmFuZ2UoLXRvdGFsX2Nhc2VzKSAlPiUNCiAgbXV0YXRlKHBhcmVudHMgPSAiQ29uZmlybWVkIikgJT4lDQogIHVuZ3JvdXAoKSANCiAgDQogIHBsb3RfbHkoZGF0YSA9IGNvbmZfZGYsDQogICAgICAgICAgdHlwZT0gInRyZWVtYXAiLA0KICAgICAgICAgIHZhbHVlcyA9IH50b3RhbF9jYXNlcywNCiAgICAgICAgICBsYWJlbHM9IH4gY291bnRyeSwNCiAgICAgICAgICBwYXJlbnRzPSAgfnBhcmVudHMsDQogICAgICAgICAgZG9tYWluID0gbGlzdChjb2x1bW49MCksDQogICAgICAgICAgbmFtZSA9ICJDb25maXJtZWQiLA0KICAgICAgICAgIHRleHRpbmZvPSJsYWJlbCt2YWx1ZStwZXJjZW50IHBhcmVudCIpDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=