¿Cómo se complementan R y Python en ciencia de datos?

54

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.

BioHazZzZard
fuente
2
Esto realmente no parece un duplicado de ese hilo. No se trata de cómo usar Python para hacer estadísticas, se trata de cómo Python puede complementar a R (obviamente, R se usaría para hacer los análisis estadísticos).
gung - Restablece a Monica
44
R si eras un estadístico hace 10 años. Python si desea poner su código en producción en algún lugar o reutilizarlo.
djechlin
1
Relacionado: datascience.stackexchange.com/questions/326
Juho Kokkala
3
Debido a la popularidad de este q., Y en respuesta a solicitudes a través de banderas, lo volví a abrir pero lo hice CW.
Scortchi - Restablece a Monica
1
Lo que la mayoría de las respuestas tienden a olvidar es que están comparando el lenguaje Python con la implementación GNU-R. R también tiene otras implementaciones (ver Renjin , escrito en Java, Microsoft R Open , que está compilado con Intel MKL, FastR , pqR , etc.). Estos intentan corregir algunos problemas con GNU-R, una implementación mucho más conservadora. Además, recuerde que R no tiene una definición formal.
Firebug

Respuestas:

45

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. ggplot2es 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 como ff).

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. pandases 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.

Yuval Spiegler
fuente
13
Como alguien que conoce ambos, estoy de acuerdo con esto; Puede haber muchos argumentos estilísticos, pero la mayor diferencia es que una vez que es hora de ejecutar modelos estadísticos causales, Python está subdesarrollado. El paquete statsmodels te ofrece algunos conceptos básicos, pero no se acerca a R, Stata o Sas. Una excepción notable es el análisis del estilo de aprendizaje automático, para el cual el scikitlearn de Python coincide bien. Para todo lo demás, creo que se pueden hacer buenos argumentos de que Python es al menos igual a R y, a menudo, superior. Aprender ambos no es en absoluto un mal uso del tiempo.
Jeff
2
Estoy de acuerdo con la mayoría de esto, pero enfatizaría más los problemas: R no es bueno para conjuntos de datos grandes y no maneja conjuntos de datos dispersos (la mayoría de las bibliotecas no lo admiten) muy bien (que es en lo que muchos realizan el aprendizaje automático) por ejemplo, modelos tipo 'bolsa de palabras' donde la cardinalidad de un factor / variable categórica podría estar en los 1000.
seanv507
10
No para comenzar un argumento en un hilo de comentarios, pero el data.tablepaquete 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.
estrella brillante el
3
Si crees que Python es mejor que R en la recuperación de datos y el análisis de cadenas, entonces has estado usando R muy mal todo el tiempo. Lo mismo vale para "R no es bueno para grandes conjuntos de datos y no maneja muy bien conjuntos de datos dispersos (la mayoría de las bibliotecas no lo admiten)" .
Gented
3
agregando al impulso de Trevor de data.table; También me complace decir que rvestes una EXCELENTE herramienta para manejar la mayoría de las tareas de raspado, y mucho más fácil de poner en marcha quebeautifulsoup
MichaelChirico
21

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:

  1. Obteniendo los datos de algún tipo de fuente (muy probablemente una base de datos SQL / noSQL o archivos .csv).
  2. Analizar los datos en un formato decente y razonable (marco de datos) para que uno pueda hacer operaciones y pensar en ello.
  3. Aplicando algunas funciones a los datos (agrupación, eliminación, fusión, cambio de nombre).
  4. 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).
  5. 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, RmySQLpara R y MySQLdbpara Python funciona sin problemas, no hay mucho que agregar). Cuando se trata de leer archivos .csv externos, el data.tablepaquete para R proporciona la función freadque 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 jclá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, ifelserealizan 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 pandasbiblioteca. 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 matrixo 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 applyo 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.tablepero 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 stringrpaquete 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 SciPyy 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 ggplot2sobre 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 appcaracterí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 myAnalysiscualquier 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.

Gennaro Tedesco
fuente
8
+6, esta es una muy buena respuesta: detallada, precisa y equilibrada.
gung - Restablece a Monica
+1 La mejor respuesta aquí. Es curioso, llegué a R desde Java (aunque no en una ruta directa), y me he aficionado bastante. No creo necesariamente que hacer bucles en R signifique que lo estás haciendo mal. Me he encontrado rascándome la cabeza tratando de evadir el uso de bucles a veces, pero no pude encontrar una forma de evitarlo (como crear nuevos valores variables en un conjunto de datos en función de las condiciones de las filas anteriores y obtener datos de conjuntos de datos secundarios).
Yuval Spiegler
Si solo esta gran cantidad de paquetes R para hacer algo bajo el sol fueran escritos por personas que saben cómo hacer computación estadística / escribir software matemático numérico confiable y robusto / conocer análisis numérico, etc. Algunos de los paquetes R son muy buenos. Una gran cantidad de paquetes R, incluso algunos escritos por autores famosos, son basura total, y muchos de los usuarios ni siquiera se dan cuenta de que están recibiendo basura. Oh, está en CRAN, debe ser bueno, o al menos correcto, o confiable ... ¡INCORRECTO!
Mark L. Stone
"R tiene, 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". Estoy de acuerdo al 100%, a menos que obtener la respuesta correcta sea una de las cosas que el usuario quiere.
Mark L. Stone
8
@ MarkL.Stone ¿Le importaría presentar un ejemplo de paquetes estándar escritos por usuarios famosos que dan resultados incorrectos?
Gented
15
  • 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.

hxd1011
fuente
2
Buena respuesta, pero usted escribió 'Jason' en lugar de 'JSON', me dio una buena risa
par
Realmente no soy miembro de las comunidades de estadísticas o de "aprendizaje automático", pero creo que la disponibilidad de paquetes avanzados es algo específica de la comunidad. Puedo creer que muchas técnicas estadísticas nuevas y de vanguardia vienen con el código R. Pero cuando veo documentos de visión artificial / aprendizaje automático / redes neuronales que vienen con códigos ("de alto nivel") ... parecen ser Matlab o Python.
GeoMatt22
1
+1 para discutir cómo los idiomas influyen en la forma en que uno piensa. Una ventaja masiva de R es, porque está construido por estadísticos para estadísticos, cómo fomenta el pensamiento en términos de modelado. Divulgación: soy fluido en R, pero solo incursiono en Python.
Ashe
Um ... ¿qué tal scikit-learn? scikit-learn.org/stable
buque de guerra
10

Los 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:

  • confiando en la confiabilidad de su código lo suficiente como para ponerlo en producción (por lo que cualquier modelo de aprendizaje automático que sirva a los usuarios en tiempo real)
  • asegurando que su código pueda continuar funcionando mientras se modifica y reutiliza (marcos de prueba de unidad, por ejemplo)
  • un enfoque en la legibilidad, en beneficio de los demás y de usted mismo en tan solo 6 meses
  • un énfasis profundo en la organización del código, para facilitar el control de versiones, retrocesos a versiones de trabajo anteriores y desarrollo simultáneo por parte de múltiples partes
  • prefiriendo herramientas y tecnologías con mejor documentación, e idealmente con la propiedad de que no funcionarán en absoluto a menos que las use correctamente (esta fue mi mayor queja con Matlab: busco en Google una pregunta y tengo que leer sus foros bastante terribles buscando una respuesta)

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.

djechlin
fuente
¿No sería Julia, cuando crezca, una mejor alternativa que Python?
kjetil b halvorsen
1
@kjetilbhalvorsen "cuando crezca" es más un "si", es muy difícil suplantar un lenguaje establecido, y es básicamente una elección personal si quieres estar en tecnología de vanguardia a riesgo de que nunca se adopte con firmeza. En mi opinión, Python tiene el impulso ahora. Sin embargo, no estoy muy familiarizado con Julia, así que esta es una opinión bastante genérica.
djechlin
1
Excepto por la primera viñeta, no puedo ver cómo Python es inherentemente superior en ninguno de los otros cuatro puntos.
Firebug
44
"Python puede hacer todo lo que R puede" es falso. "suficiente de lo que R puede hacer que los programadores dedicados estén trabajando para llenar los vacíos" , eso sería cierto para cualquier cosa en el mundo: se puede hacer que cualquier cosa haga algo mientras alguien trabaje en ello.
Gented
2
@djechlin Totalmente no. Su ejemplo de fiabilidad fue "cualquier modelo de aprendizaje automático que sirva a los usuarios en tiempo real". Python es mejor en esto porque admite la implementación mucho más fácilmente que R, y solo eso. Las pruebas unitarias, la legibilidad, la organización y la documentación no son cualidades inherentes. Puede implementar sus propias pruebas, hacer que su código sea más fácil de leer, organizarlo y la documentación de R es realmente fácil de entender.
Firebug
8

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.

Robin Gertenbach
fuente
4

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.

JBeazer
fuente
3

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.

BStange
fuente
2

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.

Gena Kukartsev
fuente
2

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.

Kodiólogo
fuente
8
Esa guía aRrgh es la crítica más despistada que he leído sobre R (y he leído muchas).
Firebug
10
"La documentación es inanely mala", eso no tiene idea. La fortaleza de R es su simplicidad para los no programadores y su vasta documentación. "Debido a que incluso el nombre de R es estúpido, es realmente difícil buscar cosas en Google de una manera útil. Lo siento. ¡Bienvenido a R!", Eso no tiene idea. Nunca encontré ningún problema al tratar de encontrar documentación para los paquetes más oscuros. "Cambias el nombre de las columnas de forma escalofriante, asignándolas a nombres (marco). ¿Sabes cómo y por qué esto funciona? Por favor, infórmame", vamos, ni siquiera lo está intentando.
Firebug
8
¿Cómo es R más difícil de google que C? Google es inteligente. Se entera de que está interesado en el lenguaje de programación R. R es criticado principalmente por personas con experiencia en otros lenguajes de programación. Lo sentimos, pero no fue desarrollado como una alternativa a estos idiomas. Fue desarrollado por y para estadísticos. Como resultado, algunas decisiones de diseño no fueron óptimas, pero decir que hay fallas serias es un poco fuerte. Cada lenguaje de programación tiene sus fortalezas y debilidades.
Roland
55
Crear un paquete es realmente muy fácil. Solo se complica si cumple con las reglas (correctamente) aplicadas por CRAN. Puede importar selectivamente desde paquetes si crea un paquete. El reciclaje de vectores es en realidad una fortaleza. No hay inconsistencias entre la lista de subconjuntos y los vectores. Algunos de los demás pueden considerarse defectos.
Roland
66
R claramente tiene verrugas, algunas de la inexcusable variedad "wat" (stringsAsFactors). Pero también tiene bibliotecas estadísticas que no tienen paralelo, ni remotamente, en ningún otro idioma. La programación requerida para crear estas bibliotecas es más seria de lo que la gran mayoría de nosotros tendrá que hacer. Como una declaración general, "R no es un lenguaje serio" está en algún lugar entre uvas despistadas, irremediablemente parroquiales, analfabetas y agrias. Y digo esto como alguien que desea que R sea básicamente Python con las bibliotecas de R.
Paul