Trataré de formular una respuesta tocando los puntos principales donde los dos idiomas entran en juego para la ciencia de datos / estadísticas / análisis de datos y similares, como alguien que usa ambos.
El flujo de trabajo en el análisis de datos generalmente consta de los siguientes pasos:
- Obteniendo los datos de algún tipo de fuente (muy probablemente una base de datos SQL / noSQL o archivos .csv).
- Analizar los datos en un formato decente y razonable (marco de datos) para que uno pueda hacer operaciones y pensar en ello.
- Aplicando algunas funciones a los datos (agrupación, eliminación, fusión, cambio de nombre).
- Aplicando algún tipo de modelo a los datos (regresión, agrupamiento, una red neuronal o cualquier otra teoría más o menos complicada).
- Implementar / presentar sus resultados a un público más o menos técnico.
Recuperacion de datos
El 99% de las veces, el proceso de obtención de datos se reduce a consultar algún tipo de base de datos SQL o Impala: tanto Python como R tienen clientes o bibliotecas específicas que hacen el trabajo en muy poco tiempo e igualmente bien ( RImpala
, RmySQL
para R y MySQLdb
para Python funciona sin problemas, no hay mucho que agregar). Cuando se trata de leer archivos .csv externos, el data.table
paquete para R proporciona la función fread
que lee en archivos .csv enormes y complicados con cualquier opción de análisis personalizado en poco tiempo, y transforma el resultado directamente en marcos de datos con nombres de columna y números de fila.
Organizando los marcos de datos
Queremos que los datos se almacenen en algún tipo de tabla para que podamos acceder a cualquier entrada, fila o columna con facilidad.
El paquete Rdata.table
proporciona formas inmejorables para etiquetar, renombrar, eliminar y acceder a los datos. La sintaxis estándar es muy parecida a SQL como dt[i, j, fun_by]
, donde se pretende que sea dt[where_condition, select_column, grouped_by (or the like)]
; las funciones personalizadas definidas por el usuario se pueden incluir allí, así como en la j
cláusula, para que sea completamente libre de manipular los datos y aplicar cualquier función complicada o elegante en grupos o subconjuntos (como tomar la fila i-ésima, k-ésima) y sume al elemento (k-2) -th de la fila (i-1) -th si y solo si la desviación estándar de toda la columna es lo que es, agrupada por la última columna por completo). Eche un vistazo a los puntos de referencia y a esta otra increíble pregunta sobre SO. La clasificación, la eliminación y el cambio de nombre de columnas y filas hacen lo que tienen que hacer, y los métodos R vectorizados estándar apply, sapply, lapply, ifelse
realizan operaciones vectorizadas en columnas y marcos de datos por completo, sin recorrer cada elemento (recuerde que siempre que use bucles en R lo están haciendo mal mal).
La contra arma de Python es la pandas
biblioteca. Finalmente proporciona la estructura pd.DataFrame
(que Python estándar carece, por alguna razón aún desconocida para mí) que trata los datos por lo que son, es decir, marcos de datos (en lugar de algunos numpy array, numpy list, numpy matrix
o lo que sea). Se pueden realizar fácilmente operaciones como agrupar, renombrar, ordenar y similares, y aquí, también, el usuario puede aplicar cualquier función personalizada a un conjunto de datos o subconjunto del marco usando Python apply
o lambda
. Personalmente, no me gusta la gramática df[df.iloc(...)]
para acceder a las entradas, pero eso es solo un gusto personal y no hay ningún problema. Los puntos de referencia para las operaciones de agrupación siguen siendo ligeramente peores que R, data.table
pero a menos que desee guardar 0.02 segundos para la compilación, no hay una gran diferencia en el rendimiento.
Instrumentos de cuerda
La forma R de tratar las cadenas es usar el stringr
paquete que permite cualquier manipulación de texto, anagrama, expresión regular, espacios en blanco finales o similares con facilidad. También se puede usar en combinación con bibliotecas JSON que desempaquetan diccionarios JSON y anulan la lista de sus elementos, para que uno tenga un marco de datos final donde los nombres de columna y los elementos sean lo que tienen que ser, sin ningún carácter que no sea UTF8 o espacio en blanco ahí.
El Pandas de Python .str.
hace el mismo trabajo al jugar con expresiones regulares, al final o tan bien como su competidor, por lo que incluso aquí no hay una gran diferencia en el sabor.
Aplicando modelos
Aquí es donde, en mi opinión, surgen diferencias entre los dos idiomas.
Rtiene, a partir de hoy, un conjunto inmejorable de bibliotecas que permiten al usuario hacer esencialmente lo que quiera en una o dos líneas de código. Las regresiones funcionales o polinomiales estándar se realizan en líneas simples y producen resultados cuyos coeficientes son fácilmente legibles, acompañados de sus correspondientes intervalos de confianza y distribuciones de valores p. Del mismo modo para la agrupación, del mismo modo para modelos de bosque aleatorios, del mismo modo para dendogramas, análisis de componentes principales, descomposiciones de valores singulares, ajustes logísticos y muchos más. La salida para cada uno de los anteriores probablemente viene con una clase de trazado específica que genera visualizaciones de lo que acaba de hacer, con colores y burbujas para coeficientes y parámetros. Pruebas de hipótesis, pruebas estadísticas, Shapiro,
Python está tratando de mantenerse al día con SciPy
y scikit-learn
. La mayoría de los análisis y modelos estándar también están disponibles, pero son un poco más largos para codificar y menos intuitivos para leer (en mi opinión). Faltan mecanismos más complicados, aunque algunos se remontan a algunas combinaciones de las bibliotecas ya existentes. Una cosa que prefiero hacer en Python en lugar de en R es el análisis de texto de bolsa de palabras con bi-gramos, tri-gramos y órdenes superiores.
Presentando los resultados
Ambos lenguajes tienen hermosas herramientas de trazado, R ggplot2
sobre todo y el equivalente de Python correspondiente. En realidad, no hay mucho para competir, hacen el trabajo sano y salvo, aunque creo que si presenta los resultados puede que tenga que usar otras herramientas: existen herramientas de diseño coloridas y elegantes, y ni Python ni R están destinados a sorprender al audiencia con elegantes arrastrar y soltar en rojo y verde. R ha publicado recientemente muchas mejoras en sus shiny app
características, que básicamente le permiten producir salidas interactivas . Nunca quise aprenderlo, pero sé que está allí y la gente lo usa bien.
Nota al margen
Como nota al margen, me gustaría enfatizar que la principal diferencia entre los dos lenguajes es que Python es un lenguaje de programación de propósito general, creado por y para ciencias de la computación, portabilidad, implementaciones, etc. Es asombroso en lo que hace y es fácil de aprender; No hay nadie a quien no le guste Python. Pero es un lenguaje de programación para hacer programación.
R, por otro lado, fue inventado por y para matemáticos, físicos, estadísticos y científicos de datos. Si vienes de ese contexto, todo tiene mucho sentido porque refleja y reproduce perfectamente los conceptos utilizados en estadística y matemáticas. Pero si, en cambio, usted proviene de una formación en informática y desea simular Java o C en R, se sentirá decepcionado; no tiene "objetos" en el sentido estándar (bueno, los tiene, pero no lo que uno normalmente piensa que son ...), no tiene clases en el sentido estándar (bueno, los tiene, pero no lo que uno normalmente piensa que son ...), no tiene "punteros" ni todas las demás estructuras informáticas, sino simplemente porque no las necesita. Por último pero no menos importante: la documentación y los paquetes son fáciles de crear y leer (si está utilizando Rstudio); hay una comunidad grande y apasionada, y Google lleva literalmente cinco segundos "cómo hacer un problema de inserción aleatoria en R" cuya primera entrada lo redirige a una solución al problema (hecho por otra persona) con el código correspondiente En poco tiempo.
La mayoría de las empresas industriales tienen su infraestructura construida en Python (o un entorno amigable con Python) que permite una fácil integración del código de Python (en import myAnalysis
cualquier lugar y ya está hecho). Sin embargo, cualquier tecnología moderna o servidor o plataforma ejecuta fácilmente el código R de fondo sin ningún problema también.