Seguimiento de los nuevos casos diarios de coronavirus en «tiempo real» con R

El código usado en

es

library(reshape2)
library(ggplot2)
library(plyr)

url <- "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv"
cvirus <- read.table(url, sep = ",", header = T)

cvirus$Lat <- cvirus$Long <- NULL
cvirus$Province.State <- NULL

cvirus <- melt(cvirus, id.vars = "Country.Region")

colnames(cvirus) <- c("país", "fecha", "casos")
cvirus$fecha <- as.Date(as.character(cvirus$fecha), format = "X%m.%d.%y")

tmp <- cvirus[cvirus$país %in% c("Italy", "Spain", "France", "Germany", "South Korea", "UK"),]

foo <- function(x){
    x <- x[order(x$fecha),]
    data.frame(fecha = x$fecha[-1], casos = diff(x$casos))
}

res <- ddply(tmp, .(país), foo)

res$país <- reorder(res$país, res$casos, function(x) -max(x))

res <- res[res$fecha > as.Date("2020-02-15"),]

ggplot(res, aes(x = fecha, y = casos)) +
    geom_point(size = 0.5) + geom_line(alpha = 0.3) +
    facet_wrap(~país, scales = "free_y") +
    ggtitle("Coronavirus: new daily cases") +
    theme_bw()

ggsave("/tmp/new_daily_cases.png", width = 12, height = 8, units = "cm")

9 comentarios sobre “Seguimiento de los nuevos casos diarios de coronavirus en «tiempo real» con R

  1. Martín Rampoldi 11 marzo, 2020 20:09

    Si no entiendo mal, a la función foo le falta agrupar por fechas.
    Se hace evidente si agregamos a China entre los paises a graficar.

    foo <- function(x){
    x <- x[order(x$fecha),]
    x % group_by(fecha) %>% summarise(casos=sum(casos))
    data.frame(fecha = x$fecha[-1], casos = diff(x$casos))
    }

  2. Carlos J. Gil Bellosta 12 marzo, 2020 15:46

    El problema es que van cambiado los datos y su formato día a día. Cada vez toca retocar el código. Lo que igual funciona un día, deja de funcionar el siguiente. Considera mi código una plantilla sobre la que realizar las pertinentes correcciones.

  3. Daniel Gomez 12 marzo, 2020 17:17

    Algo han tenido que cambiar
    falla en res <- ddply(tmp, .(país), foo)

    Error in r[i1] – r[-length(r):-(length(r) – lag + 1L)] :
    non-numeric argument to binary operator

  4. Carlos J. Gil Bellosta 13 marzo, 2020 5:28

    Sí, no son consistentes con el formato de los datos, el nombre de los países, cómo gestionan determinados «territorios», etc. ¡Qué se le va a hacer!

  5. diego 13 marzo, 2020 11:56

    el codigo sobre qué plataforma es?
    gracias

  6. Alberto 19 marzo, 2020 1:16

    La variable url se va actualizando día a día con la página a la que está asociada ahí? Ya que soy estudiante y estoy aprendiendo y trasteando mediante este código.

    Un saludo y muy interesante el código que ha realizado.

  7. luc castermans 19 marzo, 2020 16:33

    #below code works, but not yet equavalent to the original code

    library(tidyverse)
    library(lubridate)

    df_raw <- read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv&quot😉

    df %
    rename(«country» = `Country/Region`) %>%
    mutate(Lat = NULL,
    Long = NULL,
    `Province/State` = NULL) %>%
    gather(key =»date», value = «nbr», «1/22/20″:»3/18/20») %>%
    separate(date, c(«m», «d», «y»), «/») %>%
    mutate(y = paste0(20, y), # year is 2 digits, make it 4
    date = dmy(paste0(d, «-«, m, «-«, y)),
    d = NULL,
    m = NULL,
    y = NULL,
    country = as.factor(country)) %>%
    filter(country %in% c(«Italy», «Spain», «France», «Germany», «Korea, South», «UK»)) %>%
    arrange(date)

    df %>%
    ggplot(aes(date, nbr, colour = country)) +
    geom_point() +
    facet_grid(. ~ country) +
    labs(x = NULL) +
    theme_bw() +
    theme(legend.position = ‘none’)

  8. Luc Castermans 20 marzo, 2020 11:45

    # below code is further using ggplot 3.3.0 methods and produces close to original output.

    library(tidyverse)
    library(lubridate)

    df_raw <- read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv&quot😉

    df %
    rename(«country» = `Country/Region`) %>%
    mutate(Lat = NULL,
    Long = NULL,
    `Province/State` = NULL) %>%
    pivot_longer(-country, names_to = «date», values_to = «nbr») %>%
    separate(date, c(«m», «d», «y»), «/») %>%
    mutate(y = paste0(20, y), # year is 2 digits, make it 4
    date = dmy(paste0(d, «-«, m, «-«, y)),
    d = NULL,
    m = NULL,
    y = NULL,
    country = as.factor(country)) %>%
    filter(country %in% c(«Italy», «Spain», «France», «Germany», «Korea, South», «UK»)) %>%
    group_by(country, date) %>%
    summarise(n = sum(nbr)) %>%
    pivot_wider(names_from = country, values_from = n) %>%
    mutate_at(vars(France:Spain), funs(. – lag(.))) %>%
    pivot_longer(-date, names_to = «country», values_to = «nbr») %>%
    filter(!is.na(nbr))

    df %>%
    filter(date >= as.Date(«2020-02-15»)) %>%
    ggplot(aes(date, nbr, colour = country)) +
    geom_point() +
    geom_line() +
    facet_grid(. ~ country) +
    labs(x = NULL,
    y = NULL) +
    theme_bw() +
    theme(legend.position = ‘none’)

  9. Luc Castermans 20 marzo, 2020 11:55

    # now fully equivalent to original code

    library(tidyverse)
    library(lubridate)

    df_raw <- read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv&quot😉

    df %
    rename(«country» = `Country/Region`) %>%
    mutate(Lat = NULL,
    Long = NULL,
    `Province/State` = NULL) %>%
    pivot_longer(-country, names_to = «date», values_to = «nbr») %>%
    separate(date, c(«m», «d», «y»), «/») %>%
    mutate(y = paste0(20, y), # year is 2 digits, make it 4
    date = dmy(paste0(d, «-«, m, «-«, y)),
    d = NULL,
    m = NULL,
    y = NULL,
    country = as.factor(country)) %>%
    filter(country %in% c(«Italy», «Spain», «France», «Germany», «Korea, South», «United Kingdom»)) %>%
    group_by(country, date) %>%
    summarise(n = sum(nbr)) %>%
    pivot_wider(names_from = country, values_from = n) %>%
    mutate_at(vars(France:Spain), funs(. – lag(.))) %>%
    pivot_longer(-date, names_to = «country», values_to = «nbr») %>%
    filter(!is.na(nbr))

    df %>%
    filter(date >= as.Date(«2020-02-15»)) %>%
    ggplot(aes(date, nbr)) +
    geom_point() +
    geom_line() +
    facet_wrap(~country, scales = «free_y») +
    labs(x = NULL,
    y = NULL) +
    theme_bw() +
    theme(legend.position = ‘none’)

Los comentarios están desabilitados.