Voy a tratar de formular una respuesta tocar los puntos principales donde las dos lenguas entran en juego para la ciencia de datos / estadísticas / análisis de datos y similares, como alguien que utiliza tanto.
El flujo de trabajo en el análisis de datos en general consta de los siguientes pasos:
- La captura de los datos de algún tipo de fuente (probablemente un SQL/noSQL o base de datos .los archivos csv).
- El análisis de los datos en una decente y razonable formato (marco de datos), de modo que uno puede hacer las operaciones y de pensar de las mismas.
- La aplicación de algunas funciones a los datos (agrupación, supresión, fusión, cambio de nombre).
- La aplicación de algún tipo de modelo a los datos (regresión, clustering, una red neuronal o de cualquier otro más o menos complicada teoría).
- Implementar / presentación de sus resultados de una manera más o menos técnico de la audiencia.
Obtención de datos
El 99% del tiempo, el proceso de recuperación de los datos se reduce a la consulta de algún tipo de SQL o Impala base de datos: tanto en Python y R específicas de los clientes o de las bibliotecas que hacer el trabajo en ningún momento e igualmente bien (RImpala
, RmySQL
de R y MySQLdb
para Python trabajo sin problemas, no mucho para agregar). Cuando se trata de leer externo .archivos csv, data.table
paquete de R proporciona la función fread
que lee en un enorme y complicado .los archivos csv con cualquier custom opción de análisis en ningún momento, y transforma el resultado directamente en las tramas de datos con los nombres de columna y fila de números.
La organización de las tramas de datos
Queremos que los datos se almacenan en una especie de tabla de modo que podemos acceder a cualquiera de una sola entrada, una fila o una columna con facilidad.
El R paquete data.table
ofrece inmejorables formas de etiqueta, cambiar el nombre, eliminar y acceder a los datos. La sintaxis estándar es muy similar a SQL como dt[i, j, fun_by]
, donde el que está destinado a ser dt[where_condition, select_column, grouped_by (or the like)]
; la costumbre funciones definidas por el usuario se puede poner en allí, así como en la j
cláusula, por lo que son completamente libres para manipular los datos y aplicar cualquier complicados o funciones de lujo en grupos o subconjuntos (como tomar la i-ésima fila, k-ésimo elemento y se suma a la (k-2)-ésimo elemento de la (i-1)-ésima fila si y sólo si la desviación estándar de toda la columna es lo-que-es, agrupados por la última columna del todo). Eche un vistazo a los puntos de referencia y en este otro sorprendente pregunta ASÍ. Ordenar, eliminar y cambiar el nombre de las columnas y filas de hacer lo que tienen que hacer, y el estándar vectorizada R métodos de apply, sapply, lapply, ifelse
realizar vectorizada operaciones en las columnas y marcos de datos por completo, sin bucle a través de cada elemento (recordar que cuando usted está utilizando bucles en R que lo están haciendo mal).
Python's counterweapon es el pandas
biblioteca. Se establece finalmente la estructura pd.DataFrame
(estándar de Python carece, por alguna razón todavía desconocida para mí) que trata los datos por lo que son, es decir, los marcos de datos (en lugar de algunos numpy array, numpy list, numpy matrix
o lo que sea). Las operaciones de agrupación, re-nombrar, clasificar y como se puede conseguir fácilmente y aquí, también, el usuario puede aplicar cualquier función personalizada para un conjunto de datos agrupados o subconjunto de la estructura usando Python apply
o lambda
. Personalmente no me gusta la gramática df[df.iloc(...)]
para acceder a las entradas, pero eso es gusto personal y no hay ningún problema. Puntos de referencia para agrupar las operaciones son todavía un poco peor que el R data.table
pero a menos que usted desea guardar 0,02 segundos para la compilación no hay gran diferencia en el rendimiento.
Las cadenas de
El R camino para el tratamiento de cadenas es el uso de la stringr
paquete que permite que cualquier manipulación de texto, anagrama, expresión regular, por detrás de espacios en blanco o similar con facilidad. También puede ser utilizado en combinación con JSON bibliotecas que desempaquetar JSON diccionarios y unlist sus elementos, de modo que uno tiene un final de trama de datos, donde los nombres de las columnas y los elementos son lo que tienen que ser, sin ningún no-UTF8 carácter o espacio en blanco que hay.
Python Pandas .str.
hace el mismo trabajo de jugar con las expresiones regulares, por detrás o persona tan buena como la de su competidor, por lo que incluso aquí no hay gran diferencia en el sabor.
La aplicación de modelos
Aquí es donde, en mi opinión, las diferencias entre los dos idiomas surgir.
R tiene hoy en día, una inmejorable conjunto de librerías que permiten que el usuario básicamente hacen lo que quieren en una o dos líneas de código. Estándar funcional o polinomio regresiones se realiza en una sola línea y producir salidas cuyos coeficientes son fácilmente legibles, acompañados por sus correspondientes intervalos de confianza y los valores de p de las distribuciones. Asimismo, para la agrupación, del mismo modo en el que el azar bosque de los modelos, así como para dendograms, análisis de componentes principales, la descomposición de valor singular, logística encaja y muchos más. La salida para cada uno de los anteriores más probable es que viene con un determinado trazado de la clase que genera la visualización de lo que acaba de hacer, con colores y burbujas para los coeficientes y parámetros. Pruebas de hipótesis, pruebas estadísticas, Shapiro, prueba de Kruskal-Wallis o similares se pueden realizar en una sola línea de código por medio de las bibliotecas adecuadas.
Python está tratando de mantenerse al día con SciPy
y scikit-learn
. La mayoría de los análisis estándar y están disponibles en modelos, pero son un poco más de código y menos intuitivas para leer (en mi opinión). Más complicado maquinarias faltan, aunque algunos pueden rastrearse en algunas combinaciones de las ya existentes en las bibliotecas. Una cosa que yo prefiero hacerlo en Python en lugar de en R es la bolsa-de-palabra de análisis de texto con bi-gramas, tri-gramas y de órdenes superiores.
La presentación de los resultados
Ambas lenguas tienen hermosas herramientas de trazado, R ggplot2
por encima de todo y la correspondiente Python equivalente. En realidad no tanto para competir, que hacen el trabajo seguro y sonido, aunque creo que si la presentación de los resultados puede que tenga que utilizar otras herramientas—hay de fantasía colorido diseño de las herramientas por ahí y ni Python ni R tienen el propósito de sorprender a la audiencia con lujo de color rojo y verde arrastrar y gotas. R últimamente ha publicado una gran cantidad de mejoras en sus shiny app
características, que básicamente permitirá producir resultados interactivos. Nunca he querido aprender, pero sé que está ahí, y la gente lo usa bien.
Nota de lado
Como nota al margen, me gustaría destacar que la principal diferencia entre los dos lenguajes es que Python es un lenguaje de programación de propósito general, hecho por y para ciencias de la computación, la portabilidad, implementaciones y así sucesivamente y así sucesivamente. Es impresionante en lo que hace y es sencillo de aprender; no hay nadie que no le gusta python. Pero es un lenguaje de programación para hacer la programación.
R, por otro lado, fue inventado por y para los matemáticos, físicos, estadísticos y de datos científicos. Si usted viene desde el fondo todo lo hace perfecto sentido porque refleja perfectamente y reproduce los conceptos utilizados en las estadísticas y las matemáticas. Pero si, por el contrario, vienen de una ciencia de la computación de fondo y desea simular Java o C en R va a ser decepcionado; no tiene "objetos" en el estándar de sentido (bueno, sí, pero no lo que normalmente se piensa que es...), no tienen clases en el estándar de sentido (bueno, sí, pero no lo que normalmente se piensa que es...), no tiene "punteros" o todas las otras ciencias de la computación estructuras - pero sólo porque no lo necesitan. Por último, pero no menos importante: la documentación y los paquetes son fáciles de crear y leer (si usted está utilizando Rstudio); hay un gran y apasionado de la comunidad, y de ahí se toma literalmente cinco segundos en Google "cómo hacer insertar-aleatorio problema en R", cuya primera entrada redirige a una solución para el problema (hecho por alguien más) con el código correspondiente, en ningún momento.
La mayoría de las empresas industriales tienen su infraestructura construida en Python (o Python-entorno amable) que permite una fácil integración de código de Python (sólo import myAnalysis
cualquier lugar y son, básicamente, de hecho). Sin embargo, toda la tecnología moderna, servidor o plataforma fácilmente se ejecuta de fondo R código sin ningún problema así.