2017-12-31

Importar datos desde una URL en R

Problema

¿Cómo podemos importar datos desde una URL en R? Tenemos una URL en la que hay un fichero de texto y queremos importarlo en R sin necesidad de descargarlo antes de importarlo.

Si accedemos a esta dirección, nos aparecerá una ventana emergente indicándonos si queremosa abrirlo o guardarlo.

http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv

Solución

Simplemente indicamos a la función correspondiente, la ruta URL. Además del paquete base, muestro dos ejemplos con dos paquetes muy populares: data.table y readr.

  • Base
  • ad <- read.csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
    head(ad)
    
      X    TV radio newspaper sales
    1 1 230.1  37.8      69.2  22.1
    2 2  44.5  39.3      45.1  10.4
    3 3  17.2  45.9      69.3   9.3
    4 4 151.5  41.3      58.5  18.5
    5 5 180.8  10.8      58.4  12.9
    6 6   8.7  48.9      75.0   7.2
    
  • data.table
  • library(data.table)
    ad <- fread("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
    head(ad)
    
    V1    TV radio newspaper sales
    1:  1 230.1  37.8      69.2  22.1
    2:  2  44.5  39.3      45.1  10.4
    3:  3  17.2  45.9      69.3   9.3
    4:  4 151.5  41.3      58.5  18.5
    5:  5 180.8  10.8      58.4  12.9
    6:  6   8.7  48.9      75.0   7.2
    
  • readr
  • library(readr)
    ad <- read_csv("http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv")
    head(ad)
    
    # A tibble: 6 x 5
         X1    TV radio newspaper sales
              
    1     1 230.1  37.8      69.2  22.1
    2     2  44.5  39.3      45.1  10.4
    3     3  17.2  45.9      69.3   9.3
    4     4 151.5  41.3      58.5  18.5
    5     5 180.8  10.8      58.4  12.9
    6     6   8.7  48.9      75.0   7.2
    

Referencias

2017-12-24

Google Trends en R con gtrendsR

Problema

Deseamos importar y representar gráficamente en R datos de Google Trends. Como el siguiente ejempo en el que mostramos el interés en el tiempo de estos 3 términos de búsqueda.

Solución

Empleamos el paquete gtrendsR. Básicamente consiste de una función, gtrends, que extrae la información de Google Trends.

library("gtrendsR")
palabras_clave <- c("Pho", "Ramen", "Soba")
tendencias <- gtrends(palabras_clave, time = "all")
plot(tendencias)
  • Especificando la categoría y usando ggplot2
  • Abajo, en la sección notas, más información sobre los argumentos.

    id <- categories[grepl("^Cooking", categories$name), ]
    tendencias_gg <- gtrends(palabras_clave, 
                             time = "all", 
                             category = as.numeric(id[, 2]))
    
    library(ggplot2)
    tendencias_gg <- tendencias_gg$interest_over_time
    ggplot(data = tendencias_gg) + geom_line(aes(x = date, y = hits, colour = keyword), size =1)+
      scale_x_date(date_breaks = "1 year", date_labels = "%Y")+
      theme_bw() 
    

    Notas

    Los principales argumentos de gtrends son:

    keyword - Las palabras clave que queremos consulta, con un máximo de 5 cada vez.
    geo - Un vector con los country_codes de los países para la consulta. Por defecto es en todo el mundo (worldwide).
    time - Una cadena de texto con el periodo de tiempo deseado. Por defecto los últimos 5 años.
    gprop - Producto de Google: web (por defecto), noticias (news), imágenes (imágenes), froogle, y youtube.
    category - El id de la categoría a consultar.

    Para consultar los countries_codes y los ids de la categoría.

    data("countries")
    head(countries)
    
     country_code           description sub_code
    1           AD              .ANDORRA         
    2           AD                 Escas    AD-04
    3           AE .UNITED ARAB EMIRATES         
    4           AE             Abu Dhabi    AE-AZ
    5           AE Ahmed Bin Rashid Port    AE-AZ
    6           AE           Al Fujayrah    AE-FU
    
    data("categories")
    head(categories)
    
                                  name   id
    1                   All categories    0
    3             Arts & Entertainment    3
    5 Celebrities & Entertainment News  184
    6               Comics & Animation  316
    8                   Animated Films 1104
    9                    Anime & Manga  317
    
    gtrends crea una lista de 6 data frames:

    names(tendencias)
    
    [1] "interest_over_time" "interest_by_region" "interest_by_dma"   
    [4] "interest_by_city"   "related_topics"     "related_queries"
    
    La función plot representa gráficamente el data frame interest_over_time.

    Referencias

    2017-12-14

    Cómo renombrar sufijos al unir tablas en dplyr

    Problema

    Cuando unimos dos tablas con dplyr, las columnas duplicadas de la primera tabla recibirán por defecto el sufijo .x y las de la segunda tabla el sufijo .y. En el siguiente ejemplo, las columnas mpg.x y mpg.y. ¿Cómo podemos modificar esos sufijos?

    library(dplyr) 
    left_join(mtcars, mtcars[, c("mpg", 'cyl')], by = c("cyl")) %>% head()
    
      mpg.x cyl disp  hp drat   wt  qsec vs am gear carb mpg.y
    1    21   6  160 110  3.9 2.62 16.46  0  1    4    4  21.0
    2    21   6  160 110  3.9 2.62 16.46  0  1    4    4  21.0
    3    21   6  160 110  3.9 2.62 16.46  0  1    4    4  21.4
    4    21   6  160 110  3.9 2.62 16.46  0  1    4    4  18.1
    5    21   6  160 110  3.9 2.62 16.46  0  1    4    4  19.2
    6    21   6  160 110  3.9 2.62 16.46  0  1    4    4  17.8
    

    Solución

    Empleamos el argumento suffix, suministrando un vector de longitud 2 para las dos tablas unidas. En nuestro ejemplo, nombramos las columnas mpg_original (sufijo _original) y mpg_new (sufijo _new).

    left_join(mtcars, mtcars[,c("mpg","cyl")], 
                  by = c("cyl"), 
                  suffix = c("_original", "_new")) %>% head()
    
  • Datos
  • mpg_original cyl disp  hp drat   wt  qsec vs am gear carb mpg_new
    1           21   6  160 110  3.9 2.62 16.46  0  1    4    4    21.0
    2           21   6  160 110  3.9 2.62 16.46  0  1    4    4    21.0
    3           21   6  160 110  3.9 2.62 16.46  0  1    4    4    21.4
    4           21   6  160 110  3.9 2.62 16.46  0  1    4    4    18.1
    5           21   6  160 110  3.9 2.62 16.46  0  1    4    4    19.2
    6           21   6  160 110  3.9 2.62 16.46  0  1    4    4    17.8
    

    Referencias

    2017-12-12

    Abrir ficheros de texto en Excel arrastrándolos y soltándolos

    Problema

    Deseamos abrir rápidamente un fichero de texto (csv o txt), sin necesidad de importarlo desde la pestaña de Datos.

    Solución

    Simplemente arrastramos el fichero y lo soltamos sobre cualquier fichero Excel abierto o el icono de Excel en la barra de tareas. Excel creará automáticamente otro libro temporal con el contenido del fichero de texto.

    Si la extensión del fichero está vinculada a Excel también podemos hacer doble clic sobre el mismo. También si no está vinculado podremos elegir Excel en Abrir con, si lo hemos hecho anteriormente.

    Entradas relacionadas

    2017-12-10

    Ampliar el número de libros recientes mostrados en Excel

    Problema

    Libros recientes en Excel lista por defecto los últimos 25 libros abiertos con Excel. Para acceder al listado, abrimos Excel y hacemos clic an Abrir otro Libros; o bien desde cualquier libro, clic en la Archivo y seleccionamos Abrir. ¿Qué debemos hacer si queremos modificar el número de libros recientes listados?

    Solución

    Inicio, Opciones de Excel, Avanzadas y descendemos hasta la sección Mostrar, donde seleccionaremos el número deseado (50 como máxismo).

    Entradas relacionadas

    2017-11-26

    Diagrama de barras en ggplot - Preservar orden del data frame

    Title

    Problema

    Cuando creamos un diagrama de barras, ggplot2 ordena por defecto el eje x alfabéticamente, de manera que en el gráfico aparecen desordenadas las categorías.

    library("ggplot2") 
    ggplot(df, aes(x = palabra, y= contar, fill = categoria)) + geom_bar(stat = "identity")
    
  • Datos
  •  palabras contar categoria palabra
    1       BI  67452    Defect      BI
    2       Bu  47279    Defect      Bu
    3       Re  38530    Defect      Re
    4      dvd   2554    Defect     dvd
    5    Techn  34044  Digitaal   Techn
    6   Retour  12190  Digitaal  Retour
    7  Digital  22102  Digitaal Digital
    8     Kobo   1234  Digitaal    Kobo
    
    # Data frame
    df <- structure(list(palabras = structure(c(1L, 2L, 6L, 4L, 8L, 7L, 
    3L, 5L), .Label = c("BI", "Bu", "Digital", "dvd", "Kobo", "Re", 
    "Retour", "Techn"), class = "factor"), contar = c(67452, 47279, 
    38530, 2554, 34044, 12190, 22102, 1234), categoria = structure(c(1L, 
    1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("Defect", "Digitaal"), class = "factor")), .Names = c("palabras", 
    "contar", "categoria"), row.names = c(NA, -8L), class = "data.frame")
    

    Solución

    Ordenamos el factor palabra conforme al orden en el que aparecen en el data frame.

    df$palabra <- factor(df$palabra, levels = df$palabra)
    ggplot(df, aes(x = palabra, y= contar, fill = categoria)) + geom_bar(stat = "identity")
    

    Referencias

    2017-11-16

    Cambiar el color y añadir leyenda en un diagrama de barras por subgrupos en ggplot2

    Problema

    Cuando creamos un diagrama de barras por subgrupos (facet_grid), aunque especifiquemos color para el eje x, ggplot2 crea un gráfico monocromático, sin cambiar el color de cada columna.

    library("ggplot2")    
    ggplot(data = diamonds) + 
          geom_bar(mapping = aes(x = color, y = ..prop.., group = 2)) + 
          scale_y_continuous(labels=scales::percent) +
          facet_grid(~cut)
    

    Solución

    Al calcular la proporción por grupo, necesitamos especificar en una aesthetics (aes) diferente el color para alterar el comportamiento por defecto de ggplot2. Una dentro de la función ggplot y otra dentro de geom_bar con fill.

    ggplot(data = diamonds, aes(x = color, y = ..prop.., group = cut)) + 
      geom_bar(aes(fill = factor(..x.., labels = LETTERS[seq(from = 4, to = 10 )]))) + 
      labs(fill = "color") + 
      scale_y_continuous(labels = scales::percent) + 
      facet_grid(~ cut)
    

    Referencias

    Nube de datos