R vs R……..realmente es dplyr vs data.table

Un juego de velocidad!

Parte de lo importante para analizar datos es el procesamiento o pre-procesamiento. En general eso se hace haciendo uso de una base de datos y de todo un proceso antes de capturar o de re-estructurar los datos.

Ya una vez que se obtienen la información de manera ordenada, supongamos filas y columnas; lo que uno desea es calcular algo respecto a los valores que se tienen o aplicar alguna función. Pensando que las columnas son las variables que se analizan y que el número de filas es el tamaño o cantidad de datos de cada variable, entonces cuando uno tienen una tabla de unas 200 filas y 5 columnas no parece nada complicado, es realmente una tabla pequeña. Pero cuando uno tiene una tabla con 200,000 000 filas y 5 columnas el proceso requiere considerablemente más tiempo, ahora pensando en una tabla mucho mayor con más columnas para revisar, la situación puede ser totalmente complicada como para hacerla en una pequeña computadora.

Ejemplo, si uno quiere detectar tópicos por medio de algoritmos de Machine Learning en la base que liberó wikipedia, la cual  es pequeña y requiere aproximadamente 11.6 G, para un computadora normal con buenas condiciones ( buen procesador, tarjeta Nvidia y buena memoria RAM) el proceso requiere entre 6 y 7 horas. La ventaja es que la base ya está ordenada y casi lista para implementar el algoritmo, pero la situación y el tiempo de procesar la información para tenerla lista es mucho más del tiempo estimado para aplicar el algoritmo.

Entonces algo importante, no es solo la implementación de algoritmos sobre una base, sino tener buenas  herramientas de procesamiento de datos.

En esta entrada trato de dar una comparación sobre dos librerías de R  y dejo información de la comparación con Pandas de Python.

Ejemplo 1.-Ejemplo de un data.frame de tamaño mil millones de filas y 6 columnas.

El código es el siguiente:

#Se cargan las librerías

require(dplyr)
require(data.table)

set.seed(1L)

N = 1e9L
# Número de filas 1,000,000,000

getDT

El proceso de tomar los datos para definir la tabla puede tardar bastante tiempo, comparado con la operación de operar sobre las tablas con las dos librerías.

Ejemplo 2.- Este otro ejemplo compara 3 librería, plyr, dplyr y data.table. Las dos primeras librerías están relacionadas, dplyr es la actualización de plyr. Lo que se espera es que plyr es lenta comparada con las otras dos, pero esto deja ver la velocidad por la cual se procesan los dato con estas librerías.

#Código para comparar el procesamiento de datos en R
######################
#Original de Jake Russ
#blog:http://www.r-statistics.com/2013/09/a-speed-test-comparison-of-plyr-data-table-and-dplyr/

#Se crean la tabla de datos
set.seed(42)
types

Estas son dos pequeñas pruebas para comparar el tiempo que requiere cada librería para realizar operaciones similares en una misma tabla de datos o data.frame.

Una prueba detallada de la eficiencia de data.table con respecto a dplyr se puede ver en el siguiente post:

 http://www.brodieg.com/?p=7

Lo que se puede concluir es que la diferencia entre las dos librerías resulta notoria cuando el tamaño de los data.frame resultan ser considerablemente muy muy grandes, lo cual no es el caso en la mayoría de ocasiones. Pero los beneficios en tiempo  con data.table son muy considerables. Por otro lado la sintaxis de la librería dplyr es mucho más agradable que la de data.table, pero eso está en gusto de cada uno.

Un ejemplo notorio de cuando data.table resulta mejor que dplyr, se puede ver en la siguiente liga:

http://stackoverflow.com/questions/11054208/lapply-and-do-call-running-very-slowly

R vs Python

La siguiente gráfica muestra la comparación entre el uso de las librerías dplyr, data.table y pandas (de Python) en un pequeño estudio, tratando de dar iguales condiciones de procesamiento para las tres librerías.

grouping.1E7

Comparación de librerías.

Tanto el código como todos los detalles de ejercicio se pueden consultar en la siguiente liga:

https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping

En conclusión es importante conocer las dos librerías, (dplyr y data.table) y depende mucho del problema afrontar para definir cual de las dos usar. Existen buenas referencias en la red para aprender a manejar las dos, en especial data.table recientemente a tomado relevancia pero es menos conocida, desconozco las razones pero sospecho que al ser dplyr parte del ecosistema de procesamiento de datos desarrollado por Hadley Wickham ha hecho que sea mucho más popular. Otra cosa que observo es que al final Pandas, la librería de Python, sale bien parada ante las otras dos por lo cual no está de más conocer mejor el procesamiento de datos en Python y más aún que ahora se puede hacer usos de ellas en Julia.

Nota: Un ejemplo para comparar las dos librerías con una idea interesante, simular posibles rutas de 10,000 autos, se puede ver en la referencia [4].

Referencias:

1.-http://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html

2.-http://www.brodieg.com/?p=7

3.-https://github.com/szilard/benchm-dplyr-dt

4.-http://freakonometrics.hypotheses.org/19645

5.-https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping

6.-https://www.datacamp.com/

Un comentario sobre “R vs R……..realmente es dplyr vs data.table

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s