R vs Python…vs SPSS y SAS?

Por el título de la entrada la cosa parece como pelea injusta, todos contra R project, pero realmente creo que la pelea es solo entre los dos primeros, es decir; R vs Python.

Siempre que escucho a fanáticos de algún software, sea cual sea, o de una línea de trabajo me da un poco de molestia pero me dispongo a escuchar sus argumentos. Ejemplo, hace años se hablaba de Minería de Datos por todos lados y de su hermana Data Warehouse, todos tenían la idea de que era la solución a casi todos sus problemas y todos querían saber al respecto, se tomaba como la punto de tecnología o de las técnicas a implementar, al final aún existen dichas técnicas y servicios, pero ya no son la moda, pasa también con los lenguajes de programación si uno se casa con uno es preferible casarse con una base como C++  y conocerlo tanto a fondo como para poder moverse a cualquier otro sin problema, pero cuando digo a fondo es saber bien construcción de algoritmo, estructuras de datos y manejo adecuado de construcción de objetos.

Ahora la moda es Big Data, la gente habla de ellos y creé que son casi cosa de magos. Se cree que las predicciones serán hechas con 100% de precisión, lo cual es totalmente absurdo y totalmente falto de sustento. Denota a mi parecer una postura exagerada y sobre cargada de fanatismo con la sensación de que todo es predecible. Lamento matar sus ilusiones, no es así, ni todo es predecible ni todo se solventa con Big Data, se requiere mucho más que eso para muchos problemas técnicas y mucho menos para la mayoría de problemas de algunas empresas.

“Big data is like teenage sex: everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it…” Dan Ariely

El concepto y esta locura de Big Data no es nuevo del todo y como lo he comentado en otras entradas, lo realmente nuevo es hacer equipos multidisciplinarios que puedan no solo almacenar muchos datos de distintos tipos, sino que se puedan explotar, clasificar o diseñar procesos para extraer algo que se planeé analizar. Esto último es más cercano a una postura científica que a una postura de ingeniería o de negocios. Pero lo que sigue y seguirá siendo difícil es tener un buen equipo, no todas las empresas son Google o  Facebook.

Pero el patito feo en esto de Big Data o por lo menos lo que veo que los ingenieros no quieren acercarse mucho es: Data Sciences o Ciencia de Datos.

Si bien en cualquier proyecto o análisis la mayor cantidad de tiempo se invierte en el procesamiento y limpieza de lo datos, no tienen valor extra la información  si no se hace uso de alguna técnica de explotación. Lo que se llama ciencia de datos es más cercana a un puñado de algoritmos, de técnicas y metodologías, pero además se debe tener la curiosidad y libertad de experimentar con la información para tratar de aprovecharla lo mejor posible.

“Data Scientist (n.): Person who is better at statistics than any software engineer and better at software engineering than any statistician”….Josh Wills

En mi poca experiencia con SPSS y SAS, creo que los dos son buenos y no se han quedado atrás en actualizaciones y mejoras al software, pero ¿quién puede contra el mundo?.

La desventaja tanto de SPSS y SAS es que al no ser libres la velocidad con la cual se adaptan o mejoran es lenta, R y Python los han dejado atrás en cosa de nada y basta ver la cantidad de librerías o módulos que existen de estos últimos. Lo difícil es elegir entre ese montón de librerías las mejores para nuestras necesidades, para eso uno va y consulta en artículos de investigación, foros o blog  y sin mucho esfuerzo las mejores persisten.

Ejemplo, para hacer algoritmos de Machine Learning existen muchas en R con distintos algoritmos, pero no una sola con todos, o sea no hay un kit con todo, hay algunas con gran cantidad de algoritmos como e1071 pero no cuentan con todas las técnicas disponibles. Por lo cual es recomendable conocer varias que manejen las mismas técnicas y conocer como fueron diseñadas, cual es el fondo del algoritmos o cual fue el artículo de investigación que dio pie a su creación. Por ejemplo, algunos algoritmos de librerías recientemente creadas hacen uso de un parámetro de regulazación, con esto parámetro y cross-validation uno puede hacer una elección de un “buen modelo”.

En Python por otro lado, existen proyectos robustos con muchas técnicas en un solo módulo, la ventaja o desventaja entre ellos radica en conocer si fue diseñado el módulo para hacer uso de redes neuronales o como un kit con algunos algoritmos estándar.

Al final creo que para muchos proyectos R project puede ser suficiente con la limitante de que no es un lenguaje de programación serio, en eso Python está muy por delante. Así que cada uno puede aprender un poco de los dos y valorar qué se queda de uno. Pero eso no dice que no se puede hacer software en R, todo lo contrario; se pueden construir paquetes para que estén en producción en algún sistema y se han hecho poco a poco mejoras para que sea más cercano a un lenguaje de programación rentable.

Dejo dos infografías, la primera de la batalla entre SPSS, SAS y R. Presionen sobre la imagen para ver a detalle!

infograph

Siendo un poco pesado en general SAS y SPSS hay dejado de ser las herramientas usadas en el mundo de los Data Sciences, por lo menos en E.E.U.U. Si uno consulta en general en todas las vacantes, en los foros, en los blog, se habla poco de SAS y SPSS. De estos dos solo SAS se mantienen debido a que tiene fuertes relaciones comerciales con muchas empresas y contando con una amplia gama de productos, eso le ha permitido mantenerse en uso.

La segunda es el duelo entre R vs Python. Sobre este comparto una infografía, la cual contienen un resumen de las ventajas y desventajas de cada uno.Presionen sobre la imagen para ver los detalles!

R-vs-Python-216-2

Pero haciendo un ejercicio en R, hago la prueba de cual es el lenguaje que tienen más preguntas en StackOverflow. Este sitio es una plataforma donde uno puede preguntar o compartir un problema y cualquier persona que tenga alguna idea responde a dicho problema o comparte alguna referencia. Como tal tienen una base de datos de la cual se puede extraer información para analizar tendencias.

Este análisis se realizó en la referencia [1], comparto el código y explico lo que hace, de cierto modo lo que indica es cual de los dos lenguajes generan más demanda de dudas y pensando que esto se puede deber a un mayor uso.

Tendencias de preguntas.

#Código
#Se extraer los datos desde una dirección

url <- "https://data.stackexchange.com/stackoverflow/csv/437426"
dat <- read.csv(url)

head(dat)
#Month TagName Questions
#1 2008-08-01 00:00:00 python 129
#2 2008-09-01 00:00:00 python 545
#3 2008-09-01 00:00:00 r 6
#4 2008-10-01 00:00:00 python 518
#5 2008-11-01 00:00:00 python 455
#6 2008-11-01 00:00:00 r 1

dim(dat)
#164 3

str(dat)
#'data.frame': 164 obs. of 3 variables:
# $ Month : Factor w/ 83 levels "2008-08-01 00:00:00",..: 1 2 2 3 4 4 5 5 6 6 ...
#$ TagName : Factor w/ 2 levels "python","r": 1 1 2 1 1 2 1 2 1 2 ...
#$ Questions: int 129 545 6 518 455 1 446 1 634 8 ...


#Se considera como fecha o datos de fecha 
dat$Month <- as.Date(dat$Month)
head(dat)


# Gráficas de los datos por mes

library(ggplot2)
p1 <- ggplot(dat, aes(x = Month, y = Questions, group = TagName, colour = TagName)) + 
 geom_line(size = 1) + 
 theme_gray(20)+
 ggtitle('Comparación de cantidad de preguntas por lenguaje')+
 xlab('Meses')+
 ylab('Preguntas')
#Damos la gráfica
print(p1)


# Tendencia y cambiando a escala de valores en el eje Y

p2 <- ggplot(dat, aes(x = Month, y = Questions, group = TagName, colour = TagName)) + 
 geom_line(size = 1) + 
 geom_smooth(method = "loess") +
 theme_gray(16) +
 scale_y_log10()
print(p2)

Las gráficas que se obtienen son las siguientes:

Python_vs_R

 

Python_vs_R_2

Se aprecia en ambas gráficas que python tienen mayor volumen de preguntas, lo que sería importante revisar es si forman parte del mismo tipo de contexto, es decir; debido a que Python es un lenguaje de propósito general puede general preguntas de índole totalmente distinta a las que pueden ser comparadas con el campo de trabajo de R. Por ejemplo, preguntas sobre web, sobre script para explorar páginas, sobre python para CUDA, etc.

Pero lo que si se aprecia en la segunda gráfica es que la tendencia de preguntas de R tiene a crecer con mayor velocidad que las de Python conforme avanza el tiempo, esto indica que el interés sobre R crece más rápido.

Y por último les comparto un análisis sobre los software para Data Analysis realizado por Robert Muenchen.

Presiona link  para que puedan ver la información.

http://r4stats.com/articles/popularity/

 

Referencias:

1.-http://blog.revolutionanalytics.com/2015/07/in-celebration-of-100000-r-questions-on-stackoverflow.html

6 comentarios sobre “R vs Python…vs SPSS y SAS?

  1. Muy buen articulo y las citas que usa en medio de él me parecen muy indicadas, como estadistico soy fan #1 de R , pero no puedo negar que Python a tenido un gran crecimiento.y es menester tener conocimiento de ambos en este momento.

    1. Hola, gracias por el comentario. Si efectivamente, creo que uno ahora debe ser políglota en temas de software. Hay cosas muy bien hechas en R que han estado imitando en otras plataformas, como los tan amados DataFrame ahora son parte clave de Spark. Pero si uno se queda solo con R, la cosa según yo creo y veo, se limita. Creo que la ventaja de aprender primero Python es que puedes tener una visión de programación desde un grato lenguaje y luego tomar la perspectiva de análisis de datos desde R, la cual es igual tanto para hacer análisis de datos con Python o Scala desde Spark. Reitero, gracias por el comentario. Saludos.

  2. La verdad a mi en particular no me gusta R ya que es increíblemente lento (más que python), la computadora literalmente se congela cuando le pasas cantidades grandes de datos, también carece de muchas bibliotecas (no se dice “librería”) para poder preprocesar datos eficientemente. Deberías cubrir los temas con python, R es para gente que no tiene un background en ciencias de la computación.

    1. Gracias por el comentario, concuerdo contigo respecto a lo lento que es R. Depende mucho de para que lo vas a usar, es tan simple de aprender o de ver como funciona que basta con copiar y pegar código en la consola, al final es un DSL enfocado a que se haga programación funcional y fue pensado para hacer estadística. Por lo cual siempre es bueno tener en cuenta que no es un lenguaje de propósito general. En cuanto a procesar datos, creo que tanto las funciones base, operadores y librerías como data.table,dplyr y plyr son bastas, de igual forma depende mucho del tipo de procesamiento que pretendes hacer, en muchos casos yo prefiero dplyr por que es muy legible pero si los archivos son de tamaño mayor a 1 Gb es preferible data.table. Y bueno por último trato de cubrir lo temas que puedo con las dos tecnologías, al final la intención es aportar un poco y que sea por medio del software más simple sin tener muchos conocimientos de programación o ciencias de la computación. P.D. Les llamo librerías por mera conchudes, pero efectivamente son bibliotecas.

    1. En efecto hay como una “división” entre la gente que usa R vs Python. Lo que en mi caso me ha pasado es que gente más cercana a la academia tiene inclinación por R (no todos) y la gente más cercana a sistemas tienen inclinación por Python( tampoco todos). Creo que cada uno tienen sus pros y contras, la parte funcional de R es fundamental y la “versatilidad y limpieza ” de Python es clave para escribir código rápido. Pero en la práctica uno puede usar medianamente los dos y apoyarse entre uno y otro, según el reto. Saludos!

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