En muchos tutoriales o manuales, la narrativa parece implicar que R y python coexisten como componentes complementarios del proceso de análisis. Para mi ojo inexperto, sin embargo, parece que ambos idiomas hacen lo mismo.
Entonces, mi pregunta es si realmente hay nichos especializados para los dos idiomas o si es solo una preferencia personal si usar uno u otro.
Respuestas:
Son complementarios. Es cierto que ambos pueden hacer lo mismo, pero esto se puede decir de la mayoría de los idiomas. Cada uno tiene sus fortalezas y debilidades. La perspectiva común parece ser que Python es mejor para la recopilación y preparación de datos, así como para el análisis textual. R se considera mejor para el análisis de datos, ya que es un lenguaje estadístico en primer lugar.
R tiene una gran variedad de paquetes para cualquier cosa que se te ocurra, pero su elemento básico es el análisis estadístico: desde el chi-cuadrado básico hasta el análisis factorial y los modelos de peligro, es fácil y robusto. Algunos de los nombres más importantes en estadísticas crean paquetes R, y tiene una comunidad animada para ayudarlo con todas sus necesidades.
ggplot2
es un estándar en visualización de datos (gráficos, etc.). R es un lenguaje vectorizado y construido para recorrer los datos de manera eficiente. También almacena todos los datos en la RAM, que es un arma de doble filo: es ágil en conjuntos de datos más pequeños (aunque algunos podrían discutir conmigo), pero no puede manejar bien los datos grandes (aunque tiene paquetes para evitar esto) , tales comoff
).Python es considerablemente más fácil de aprender que R, especialmente para aquellos que tienen experiencia previa en programación. R es simplemente ... raro. Python es excelente en la recuperación de datos, y es el lenguaje que se utiliza para el raspado web (con lo sorprendente
beautifulsoup
). Python es conocido por su fortaleza en el análisis de cadenas y la manipulación de texto.pandas
es una gran biblioteca para la manipulación, fusión, transformación, etc. de datos, y es rápida (y probablemente inspirada en R).Python es genial cuando necesitas hacer algo de programación. Esto no es sorprendente, ya que es un lenguaje de propósito general. R, sin embargo, con todas sus extensiones, fue construido por estadísticos para estadísticos. Entonces, aunque Python puede ser más fácil y mejor y más rápido en muchas aplicaciones, R sería la plataforma de referencia para el análisis estadístico.
fuente
data.table
paquete en R está específicamente diseñado para un trabajo eficiente en torno a grandes conjuntos de datos, y se conecta bien al procesamiento distribuido.data.table
; También me complace decir quervest
es una EXCELENTE herramienta para manejar la mayoría de las tareas de raspado, y mucho más fácil de poner en marcha quebeautifulsoup
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:
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 yMySQLdb
para Python funciona sin problemas, no hay mucho que agregar). Cuando se trata de leer archivos .csv externos, eldata.table
paquete para R proporciona la funciónfread
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 R
data.table
proporciona formas inmejorables para etiquetar, renombrar, eliminar y acceder a los datos. La sintaxis estándar es muy parecida a SQL comodt[i, j, fun_by]
, donde se pretende que seadt[where_condition, select_column, grouped_by (or the like)]
; las funciones personalizadas definidas por el usuario se pueden incluir allí, así como en laj
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ándarapply, 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 estructurapd.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 algunosnumpy 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 Pythonapply
olambda
. Personalmente, no me gusta la gramáticadf[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
yscikit-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 susshiny 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.fuente
Python es un lenguaje de programación general: por lo tanto, es bueno para realizar muchas otras tareas además del análisis de datos. Por ejemplo, si queremos automatizar la ejecución de nuestro modelo en el servidor de producción, entonces python es una muy buena opción. Otros ejemplos incluyen conectarse a hardware / sensores para leer datos, interactuar con bases de datos (datos relacionales o no estructurados como JSON), analizar datos, programación de red (TCP / IP), interfaz gráfica de usuario, interactuar con shell, etc. (Bueno, ¿Por qué un científico de datos querría hacer tantos de estos tipos de tareas, que tienen poco que ver con los modelos predictivos? Creo que las personas tienen diferentes definiciones ¿Qué es un científico de datos?En algunas organizaciones, analizar los datos y hacer el análisis descriptivo con el tablero es lo suficientemente bueno para los negocios y los datos no son lo suficientemente maduros para hacer modelos predictivos. Por otro lado, en muchas pequeñas empresas, la gente puede esperar que los científicos de datos hagan mucha ingeniería de software. Conocer Python te hará independiente de otros ingenieros de software).
R tiene muchos paquetes estadísticos que son mucho mejores que python o MATLAB. Al usar R, uno realmente puede pensar en el nivel de modelo en lugar del nivel de detalle de implementación. Esta es una gran ventaja en el desarrollo de modelos estadísticos. Por ejemplo, muchas personas están implementando manualmente redes neuronales en python; hacer ese trabajo puede no ayudar a entender por qué funcionan las redes neuronales, sino simplemente seguir la receta para duplicar el trabajo de otros para verificar si funciona. Si estamos trabajando en R, podemos centrarnos fácilmente en las matemáticas detrás del modelo, en lugar de los detalles de implementación.
En muchos casos, las personas los usan juntos. Construir software es fácil de hacer en python, y construir modelos es mejor en R. Si queremos entregar un modelo en producción pero no un documento, es posible que necesitemos ambos. Si su empresa tiene muchos ingenieros de software, es posible que necesite más R. Y si su empresa tiene muchos científicos de investigación, es posible que necesite más python.
fuente
scikit-learn
? scikit-learn.org/stableLos programadores de todo tipo subestiman la cantidad de opciones de idioma que son culturales . Los desarrolladores web como Node.js. A los científicos les gusta Python. Como ingeniero de software políglota que puede manejar la fluidez de Javascript y la rigidez de Java de todos modos, me he dado cuenta de que no hay ninguna razón intrínseca para que estos lenguajes sean malos en los trabajos de los demás, solo la enorme cantidad de paquetes, documentación, comunidades, libros, etc. que los rodea.
(Por razones intrínsecas, un idioma aleatorio es mejor que otro idioma, vea los próximos comentarios a esta respuesta).
Mi predicción personal es que Python es el camino hacia el futuro porque puede hacer todo lo que R puede hacer, o más bien, lo suficiente para que los programadores dedicados estén trabajando para llenar los vacíos, y es un lenguaje de ingeniería de software mucho mejor. La ingeniería de software es una disciplina que se ocupa de:
Además, francamente, Python es más fácil de aprender.
Los científicos y los estadísticos se darán cuenta de que son partes interesadas de una buena práctica de ingeniería de software, no una profesión independiente y sin compromiso. Solo mi opinión, pero los documentos que prueben la fragilidad del código académico respaldarán esto.
Esta respuesta es toda mi opinión, pero usted hizo una pregunta muy obvia, y dado que ha sido bien recibida hasta ahora, sentí que merecía una opinión sin pretensiones, razonablemente informada (¡espero!) En respuesta. Hay un argumento serio para Python sobre R en todos los ámbitos y sería negligente tratar de publicar respuestas no partidistas cuando la realidad en sí misma sea partidista.
fuente
Soy un usuario de R pero creo que Python es el futuro (no creo que sea la sintaxis)
Python es el futuro
El beneficio de Python es que otras personas ya han mencionado el soporte mucho más amplio y, para los programadores, una sintaxis más lógica.
Además, la capacidad de traducir los resultados de su análisis en un sistema de producción es mucho más sencilla.
Tal vez sea porque Python es de propósito general y R no lo es, pero incluso levanto las cejas cuando veo una tubería R producida.
Pero no solo eso, incluso para aplicaciones avanzadas, Python se está poniendo al día rápidamente (Scikit-learn, PyBrain, Tensorflow, etc.) y aunque R sigue siendo la lengua franca en el mundo académico sobre cómo implementar métodos estadísticos, Python se ha vuelto enorme en el sector profesional debido a El advenimiento de bibliotecas especializadas avanzadas.
Pero R no es malo A
muchas personas parece gustarles subirse al carro "R tiene mala sintaxis".
¡Deseo proponer que la sintaxis de R sea algo bueno!
Las funciones de asignación, la evaluación diferida, la evaluación no estándar y las fórmulas son enormes beneficios cuando se usa R.
Simplemente ahorra mucho tiempo para no tener que preocuparse por escapar de los nombres de variables a los que se hace referencia en su resumen o cómo construir la lógica de lo que se modela contra qué o mirando los nombres con
names()
y luego asignando nuevos nombres agregando<- c("A", "B", "C")
.Cuando las personas se quejan de la sintaxis extraña de R, la ven como un lenguaje de programación, no como una herramienta de ciencia de datos.
Como alguien que viene de R y ama a Dplyr, encuentro la sintaxis de los pandas un poco torpe en comparación.
Sí, es un poco más flexible, pero para la mayoría de las tareas, se necesitan muchas más teclas para ejecutar un comando simple que en R que simplemente están ahí para satisfacer el analizador de Python, no para expresar su idea.
En resumen
Por supuesto, es aconsejable conocer ambos, y mientras Python está llegando allí, las opciones de diseño específicas del dominio de R simplemente lo simplifican para el trabajo ad hoc. El gran inconveniente de R es que es difícil abandonar su dominio, lo que básicamente debes hacer una vez que tratas de implementar tus hallazgos de manera sostenible.
fuente
Si considera que R es más una herramienta estadística y no un lenguaje de programación, es realmente genial. Tiene mucha más flexibilidad que Stata o SPSS, pero también puede hacer todo lo que pueda. Aprendí Stata durante la universidad, y R fue bastante fácil de ver porque ya tenía la perspectiva de la herramienta estadística y no una experiencia pura de lenguaje de programación que otros podrían tener.
Creo que la frustración con R entra en juego cuando aquellos que son programadores intentan aprender y comprender R; pero es una gran herramienta para aquellos que vienen a R a través de un fondo estadístico.
Python es genial si ya eres un gran programador; pero para mí, como principiante en programación y estadísticas recién salido de la universidad, R era una opción mucho mejor. Realmente es solo la preferencia de cuál se ajusta a su conjunto de habilidades e intereses más.
fuente
Agregando a algunas de las respuestas anteriores:
En mi experiencia, no hay nada más fácil que usar dplyr + tidyr, ggplot y Rmarkdown de R para pasar de datos en bruto a resultados presentables. Python ofrece mucho, y lo uso cada vez más, pero seguro que me encanta la forma en que los paquetes de Hadley se unen.
fuente
Python tiene una amplia adopción fuera de la ciencia, por lo que se beneficia de todo eso. Como señala "An Angry Guide to R", R fue desarrollada por una comunidad, que tenía hasta el primer orden cero desarrolladores de software.
Diría que hoy R tiene dos fortalezas principales: algunos paquetes altamente especializados muy maduros en algunas áreas, y un tejedor de paquetes de investigación reproducible de última generación.
Python parece ser más adecuado para todo lo demás.
Esta es una opinión, por supuesto, como casi todo en este hilo. Estoy un poco sorprendido de que este hilo siga vivo.
fuente
Como se describe en otras respuestas, Python es un buen lenguaje de programación de propósito general, mientras que R tiene fallas serias como lenguaje de programación pero tiene un conjunto más rico de bibliotecas de análisis de datos. En los últimos años, Python se ha puesto al día con R con el desarrollo de bibliotecas maduras de análisis de datos como scikit-learn, mientras que R nunca se solucionará. En la práctica, uso Python (en realidad, Hy ) para casi todo y solo recurro a R para métodos relativamente esotéricos como la regresión cuantil (cuya implementación en los modelos de estadísticas de Python parece estar rota). Hay varias formas de llamar a R desde Python; PypeR es lo suficientemente simple como para que funcione en entornos tan hostiles como un servidor de Windows.
Editar : animo a cualquiera que quiera discutir más sobre esto para hablar con los autores del ensayo vinculado en lugar de comentar sobre esta respuesta.
fuente