Este documento es un intento de analizar el uso de R en México con los logs de repositorio CRAN. Además, es un ejemplo de un documento generado en R Markdown, que estoy tratando de aprender para mantener documentos que integran texto, datos y figuras.

Porque este análisis requiere descargar muchos archivos y generar tablas muy grandes, voy a incluir el código pero no quiero que se corre otra vez en este documento. Incluyo la opción eval = FALSE en el trozo del código.

load("cran_dls.RData")
library(tidyverse)
library(lubridate)

La primera etapa era descargar los logs de descargos de CRAN. Esta etapa resultó en 25 GB de archivos y no es algo que quiero repetir. El script es del sitio de RStudio.

# Here's an easy way to get all the URLs in R
start <- as.Date("2012-10-01")
today <- as.Date("2019-05-23")

all_days <- seq(start, today, by = "day")

year <- as.POSIXlt(all_days)$year + 1900
urls <- paste0('http://cran-logs.rstudio.com/', year, '/', all_days, '.csv.gz')
# You can then use download.file to download into a directory.
for (i in 1:length(urls)) {
      download.file(urls[i], paste0("~/Documents/R/R_examples/cran_logs/", str_sub(urls[i], 35, 44),
                                    ".csv.gz"), "libcurl")
      }

# If you only want to download the files you don't have, try:
# missing_days <- setdiff(all_days, tools::file_path_sans_ext(dir(), TRUE))

Esta etapa es para filtrar los descargos de México (country == “MX”). Necesitaba unas horas.

newstart <- as.Date("2012-10-01")
newend <- as.Date("2019-05-23")
new_days <- seq(newstart, newend, by = "day")
year <- as.POSIXlt(new_days)$year + 1900
new_urls <- paste0('http://cran-logs.rstudio.com/', year, '/', new_days, '.csv.gz')
cran_mex <- tibble()
for (i in 1:length(new_urls)) {
      df <- read_csv(paste0("~/Documents/R/R_examples/cran_logs/", 
                            str_sub(new_urls[i], 35, 44), ".csv.gz"))
      cran_mex <- rbind(cran_mex, filter(df, country == "MX"))
}
# agrupado por mes
cran_mex_ym <- cran_mex %>%
      mutate(md = as.Date(paste0(year(date), "-", month(date), "-01"))) %>%
      group_by(md) %>%
      summarise(count = n())

Crear las gráficas

g <- cran_mex %>%
      group_by(date) %>%
      summarise(count = n()) %>%
      ggplot(aes(x = date, y = count)) +
      geom_point(color = "blue", alpha = 0.5) +
      labs(x = "Fecha", y = "Número de paquetes descargados",
           title = "Paquetes descargados de CRAN en México")
g

g_ym <- cran_mex_ym %>%
      ggplot(aes(x = md, y = count)) +
      geom_point(color = "darkgreen", alpha = 0.5) +
      labs(x = "Fecha", y = "Número de paquetes descargados",
           title = "Paquetes descargados de CRAN en México por mes")
g_ym

Resumen de los paquetes más descargados (solo de CRAN; no incluye los paquetes de Bioconductor)

cran_mex %>%
      group_by(package) %>%
      summarise(count = n()) %>%
      arrange(desc(count))

Cuando tengo tiempo voy a evaluar los datos de Centroamérica y América del Sur. Fue un error no hacerlo cuando generé la tabla de México porque la mayoría del tiempo es usado en cargar los archivos.

c_am <- c("BZ", "GT", "HN", "SV", "NI", "CR", "PA")
s_am <- c("CO", "VE", "EC", "BO", "PE", "CL", "AR", "BR", "UY", "PY", "SR", "GY")
cran_c_am <- tibble()
cran_s_am <- tibble()
for (i in 1:length(new_urls)) {
      df <- read_csv(paste0("~/Documents/R/R_examples/cran_logs/", 
                            str_sub(new_urls[i], 35, 44), ".csv.gz"))
      cran_c_am <- rbind(cran_c_am, filter(df, country %in% c_am))
      cran_s_am <- rbind(cran_s_am, filter(df, country %in% s_am))
}

g_c_am <- cran_c_am %>%
      group_by(date, country) %>%
      summarise(count = n()) %>%
      ggplot(aes(x = date, y = count, color = as.factor(country))) +
      geom_point(alpha = 0.5) +
      labs(x = "Fecha", y = "Número de paquetes descargados",
           title = "Paquetes descargados de CRAN en Centroamérica")

g_c_am
g_s_am <- cran_s_am %>%
      group_by(date, country) %>%
      summarise(count = n()) %>%
      ggplot(aes(x = date, y = count, color = as.factor(country))) +
      geom_point(alpha = 0.5) +
      labs(x = "Fecha", y = "Número de paquetes descargados",
           title = "Paquetes descargados de CRAN en América del Sur")

g_s_am
save.image(file = "cran_dls.RData")