R vs Python para análisis de datos [cerrado]


60

He estado programando durante aproximadamente un año y estoy realmente interesado en el análisis de datos y el aprendizaje automático. Estoy participando en un par de cursos en línea y estoy leyendo un par de libros.

Todo lo que estoy haciendo usa R o Python y estoy buscando sugerencias sobre si debo concentrarme en un idioma (y si es así, cuál) o continuar con ambos; ¿se complementan entre sí?

- Debo mencionar que uso C # en la escuela pero estoy familiarizado con Python a través del autoaprendizaje.


Este es quizás un enlace interesante: coursera.org/course/compdata
Giorgio

Respuestas:


39

Utilizo Python (para el análisis de datos del curso, incluidos numpy y scipy) y R uno al lado del otro. Sin embargo, uso R exclusivamente para realizar análisis de datos y Python para tareas de programación más genéricas (por ejemplo, control de flujo de trabajo de un modelo de computadora).

En términos de operaciones básicas, digamos que las operaciones en matrices y el tipo, R y Python + numpy son muy comparables. Es en la gran biblioteca de funciones estadísticas que R tiene una ventaja. Además, matplotlib no parece ser tan bueno como ggplot2, pero no he usado tanto matplotlib. Además, me enfocaría primero en un idioma y llegaría a ser bueno en los detalles de eso. Parece que le interesa principalmente el análisis de datos, no la ingeniería de software. Escogería a R y me apegaría a eso. Dicho esto, creo que elegir Python + numpy + scipy + scikit es definitivamente y una excelente elección, es solo que siento que R es un poco más excelente.

También miraría a su alrededor lo que están utilizando sus colegas y otras personas en su campo. Si todos usan, por ejemplo, Python, tendría sentido atenerse a eso para aprender más fácilmente de ellos e intercambiar código.

Descargo de responsabilidad: tenga en cuenta que soy un gran usuario de R, por lo que mi opinión puede ser parcial, aunque he tratado de mantener mi respuesta lo más objetiva posible. Además, no he usado Python + numpy ampliamente, aunque conozco a colegas que hacen todos sus análisis de datos en él.

ps: este enlace puede ser interesante: http://seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps: o esta cita de esta publicación :

Uso R y Python para toda mi investigación (con Rcpp o Cython según sea necesario), pero preferiría evitar escribir en C o C ++ si puedo evitarlo. R es un lenguaje maravilloso, en gran parte debido a la increíble comunidad de usuarios. Fue creado por estadísticos, lo que significa que el análisis de datos se encuentra en el corazón mismo del lenguaje; Considero que esta es una característica importante del lenguaje y una gran razón por la que no se reemplazará en el corto plazo. Python es generalmente un mejor lenguaje general, especialmente cuando considera su combinación de programación funcional con orientación a objetos. Combinado con Scipy / Numpy, Pandas y statsmodels, esto proporciona una combinación poderosa. Pero Python todavía carece de una comunidad seria de estadísticos / matemáticos.


3
Al decir que R es más fuerte que Python, ¿te refieres a Python + numpy / blaze + scipy o Python simple?
9000

55
Me refiero a Python + numpy sí, de lo contrario la elección sería aún más fácil. Creo que en términos de operaciones básicas, digamos que las operaciones en matrices y el tipo, R y Python + numpy son muy comparables. Es en la gran biblioteca de funciones estadísticas que R tiene una ventaja. Además, matplotlib no parece ser tan bueno como ggplot2, pero no he usado tanto matplotlib.
Paul Hiemstra

Dicho esto, creo que elegir Python + numpy + scipy + scikit es definitivamente una excelente opción, es solo que siento que R es un poco más excelente.
Paul Hiemstra

@PaulHiemstra - Usted hace algunos comentarios agradables en sus comentarios que probablemente mejorarían su respuesta, si la pregunta se vuelve a abrir y tiene esa oportunidad.
psr

@psr lo edité en mis comentarios, aparentemente no es necesario que la pregunta esté abierta si quiero editarla (tal vez solo yo pueda editarla ...).
Paul Hiemstra

36

Antecedentes: soy científico de datos en una startup en Austin, y vengo de la escuela de posgrado (Física). Yo uso Python día a día para el análisis de datos, pero uso R un poco. También uso C # /. NET y Java (casi a diario), utilicé C ++ en gran medida en la escuela de posgrado.

Creo que el principal problema con el uso de Python para numéricos (sobre R) es el tamaño de la comunidad de usuarios. Como el lenguaje ha existido desde siempre, muchas personas han hecho cosas que probablemente querrás hacer. Esto significa que, cuando se enfrenta a un problema difícil, puede descargar el paquete y ponerse a trabajar. Y R "simplemente funciona": le da un conjunto de datos y sabe qué estadísticas de resumen son útiles. Le das algunos resultados y sabe qué tramas quieres. Todas las tramas comunes que te gustaría hacer están allí, incluso algunas bastante esotéricas que tendrás que buscar en Wikipedia. Tan bueno como scipy / numpy / pandas / statsmodels / etc. son para Python, no están al nivel de la biblioteca estándar de R.

La principal ventaja de Python sobre R es que es un lenguaje de programación real en la familia C. Se escala fácilmente, por lo que es concebible que cualquier cosa que tenga en su caja de arena se pueda usar en la producción. Python tiene la Orientación de Objeto incorporada, a diferencia de R, donde se siente como una idea de último momento (porque lo es). También hay otras cosas que Python hace muy bien: el enhebrado y el procesamiento paralelo son bastante fáciles, y no estoy seguro de si ese es el caso en R. Y aprender Python también le brinda una poderosa herramienta de secuencias de comandos. También hay IDEs realmente buenos (gratis) para Python, mucho mejores si está dispuesto a pagar (menos de $ 100), y no estoy seguro de que este sea el caso de R: el único IDE de R que conozco es R Studio, que es bastante bueno, pero no es tan bueno como PyDev + Eclipse, en mi experiencia.

Agregaré esto como una patada: ya que todavía estás en la escuela, deberías pensar en trabajos. Encontrará más ofertas de trabajo para desarrolladores Python altamente calificados que para desarrolladores R altamente calificados. En Austin, los trabajos para los desarrolladores de Django se están cayendo del cielo. Si conoce R realmente bien, hay algunos lugares donde podrá capitalizar esa habilidad (Revolution Analytics, por ejemplo), pero muchas tiendas parecen usar Python. Incluso en el campo del análisis de datos / ciencia de datos, más personas parecen estar recurriendo a Python.

Y no subestimes que puedes trabajar con / para personas que solo conocen (digamos) Java. Esas personas podrán leer su código Python con bastante facilidad. Este no será necesariamente el caso si haces todo tu trabajo en R. (Esto viene de la experiencia).

Finalmente, esto puede sonar superficial, pero creo que la documentación de Python y las convenciones de nomenclatura (a las que se adhiere religiosamente) resulta mucho mejor que el utilitario R doc. Esto se debatirá arduamente, estoy seguro, pero el énfasis en Python es la legibilidad. Eso significa que los argumentos de las funciones de Python tienen nombres que puedes leer, y eso significa algo. En R, los nombres de argumentos a menudo se truncan --- He encontrado esto menos cierto en Python. Esto puede sonar pedante, pero me vuelve loco escribir cosas como 'xlab' cuando podría nombrar fácilmente un argumento 'x_label' (solo un ejemplo) --- esto tiene un gran efecto cuando intenta aprender un nuevo módulo / paquete API. Leer R doc es como leer páginas de manual de Linux --- si eso es lo que hace flotar tu barco, entonces más poder para ti.

Dicho todo esto, sugeriría lo siguiente (que también es mi flujo de trabajo típico): dado que conoce Python, úselo como su primera herramienta. Cuando encuentre que falta Python, aprenda suficiente R para hacer lo que quiera, y luego:

  1. Escriba scripts en R y ejecútelos desde Python usando el módulo de subproceso, o
  2. Instala el módulo RPy.

Use Python para lo que Python es bueno y complete los espacios en blanco con uno de los anteriores. Este es mi flujo de trabajo normal: generalmente uso R para trazar cosas y Python para levantar objetos pesados.

En resumen: debido al énfasis de Python en la legibilidad (busque en Google "Pythonic"), la disponibilidad de IDE buenos y gratuitos, el hecho de que esté en la familia de lenguajes C, la mayor posibilidad de que pueda capitalizar el conjunto de habilidades y el mejor estilo de documentación del lenguaje, sugeriría hacer de Python su opción y confiar en R solo cuando sea necesario.


Ok, esta es (de lejos) mi respuesta más popular en un sitio de pila, y ni siquiera es la # 1 :) Espero que esto haya ayudado a algunas personas en el camino.

En cualquier caso, he llegado a la siguiente conclusión después de varios años en el campo:

Esta es probablemente la pregunta incorrecta que hacer.

Preguntar "debería aprender esta tecnología en particular" es una mala pregunta. ¿Por qué?

  1. Cambios tecnológicos. Siempre tendrás que aprender otra tecnología. Si vas a trabajar en Twitter, ellos ejecutan Scala. Algunos lugares son tiendas de Python. A algunos lugares no les importa. No vas a ser contratado porque conoces o no una pieza de tecnología en particular; si no puedes aprender una nueva tecnología, puedes (y deberías) despedirlo. Es como si saliera una nueva llave de tubo, y usted es un fontanero, y no puede entender cómo funciona la nueva llave de tubo, probablemente sea un fontanero bastante malo.
  2. Dada la opción de "Aprendo esta tecnología" o "Dedico más tiempo a resolver problemas reales", siempre debe elegir este último, sin excepción.

Como científico de datos, su trabajo es resolver problemas . Esa única sabiduría se pierde casi siempre en cada conferencia o reunión a la que asistes: cada charla de "big data" que he visto se ha centrado en la tecnología, no en la resolución de problemas. La resolución real del problema generalmente se relega a unas pocas diapositivas al final:

[Talk title = "Aprendizaje profundo en Cool New Startup"] ... [45 minutos de diagramas y techno-babel durante los cuales desconecto y reviso mi teléfono] ... Y, después de implementar nuestro clúster Hadoop y [Ben zonas fuera de nuevo] podemos ejecutar nuestra rutina de aprendizaje profundo, [despertar: ¡es por eso que vine!] cuyos detalles son propietarios. Preguntas?

Esto da una mala impresión de que el campo se trata de tecnología, y simplemente no es cierto. Si eres realmente bueno en Scala, Python o R, pero eres realmente malo para resolver problemas , serás un pésimo científico de datos .

Paco Nathan estuvo en Austin hace unos meses en una conferencia de "big data" de un día de duración, y dijo algo como "La química no se trata de tubos de ensayo". Eso lo resume bastante bien: la ciencia de datos no se trata de Scala, Hadoop, Spark o cualquier otra tecnología que aparezca. Al final del día, quiero contratar personas que piensen, no personas que sean expertas en usar Stack Overflow para aprender kits de herramientas.

Del mismo modo, si vas a una entrevista de trabajo y no te contratan solo porque no conoces un lenguaje de programación, entonces esa compañía apesta . No entienden lo que significa "científico de datos", y probablemente sea mejor para usted si no funcionara.

Finalmente, si sus habilidades para resolver problemas son marginales (sea honesto consigo mismo), o si realmente disfruta el lado tecnológico de las cosas, o aprender tecnología es lo que realmente ama (nuevamente, sea honesto), entonces aprenda mucha tecnología. Siempre podrá encontrar roles de tipo "ingeniero de datos" que se ajusten a su conjunto de habilidades. Esto no es algo malo, los ingenieros de datos engrasan las ruedas y le permiten hacer su trabajo como científico de datos. (La diferencia es similar al arquitecto de software frente al equipo de desarrollo).


3
Sin embargo, diré que si estuviera trabajando en un piso de negociación, y el operador principal se acercara a mí con un csv de precios de opciones y quisiera que los ajustara con una distribución logarítmica lineal y retrasara la desviación media y estándar, Ni siquiera consideraría Python. Creo que es como tres líneas de código hacer esto en R.
BenDundee

12

Entonces, principalmente hice análisis de datos en Matlab, pero hice algunos en Python (y Python más usado para fines generales) y también comencé un poco de R. Voy a ir contra la corriente aquí y sugerirle que use Pitón. La razón es porque está haciendo análisis de datos desde una perspectiva de Machine Learning, no estadísticas (donde R es dominante) o procesamiento de señal digital (donde Matlab es dominante).

Obviamente, existe una gran superposición entre el aprendizaje automático y las estadísticas. Pero la superposición no es identidad. Machine Learning utiliza ideas de CS que, por mi parte, no quisiera implementar en R. Claro, puede calcular un árbol de expansión mínimo en R. Sin embargo, puede parecer un desastre feo. La gente de aprendizaje automático supondrá que tiene fácil acceso a tablas hash, árboles de búsqueda binarios, etc. En mi mente, es más fácil implementar un algoritmo de estadísticas nuevamente cuando sea necesario, que tratar de calzar lo que es básicamente un lenguaje específico de dominio en un lenguaje de programación general.

Los beneficios secundarios de Python para el análisis de datos también son mucho mayores. Aprenderá un lenguaje de programación real al mismo tiempo, que puede manejar secuencias de comandos, crear aplicaciones más grandes, etc. R es realmente un lenguaje de nicho de la comunidad de estadísticas, incluso Matlab es mucho más ampliamente utilizado.

Supongo que primero miraría algunos de los documentos y vería en qué idioma publican el código. Si no está en R, entonces no lo use.


1
Muchas gracias. Definitivamente estoy más interesado en el lado ML de las cosas.
The_Cthulhu_Kid

1
Solo un apéndice menor: estoy seguro de que R también puede hacer esto de alguna manera, pero Python es bien conocido por su capacidad de llamar a C o compilar funciones en C usando Cython con una sobrecarga mínima. Por lo tanto, generalmente puede ser más rápido con menos esfuerzo, una consideración importante para mirar datos reales. Otra nota exótica (final): Java tiene algunas bibliotecas de aprendizaje automático realmente buenas (como WEKA). Sin embargo, lo que es genial es que también puedes llamarlos desde Python, usando Jython :-)
Nir Friedman

7

Como científico de la vieja escuela (más de 50) que tiene y continúa usando varias de estas herramientas, agregaré mis dos centavos. He trabajado con colegas que todavía escriben cada código en Fortran, desde trabajos triviales de análisis de datos únicos hasta código que domina algunas de las supercomputadoras del mundo. Los dialectos recientes de Fortran (F90, F95, F2003, F2008) son en mi humilde opinión, algunos de los idiomas mejor diseñados que existen. Décadas de experiencia con la informática de alto rendimiento ha llevado a un desarrollo del lenguaje bastante impresionante.

Solo he usado Python a veces, y lo volveré a visitar (principalmente debido a Sage), pero uso un conjunto de idiomas probados por el tiempo que funcionan bien para mí. Fortran, C, Perl, R y Scheme (con tcl para scripting VMD). Encuentro que la combinación de R, Fortran y C es muy cómoda. En contraste con otros comentarios hechos sobre el modelo de objetos en R, es un buen modelo de objetos para el trabajo interactivo, basado en el concepto CLOS de funciones genéricas y envío de métodos. Al trabajar de forma interactiva con un nuevo paquete, a menudo puede confiar en funciones genéricas como "imprimir" y "trazar" para hacer algo productivo.

La API para Fortran y C es muy fácil de usar. Si solía trabajar en Fortran y C para modelar y analizar datos, esta es una gran ventaja. La capacidad de generar dinámicamente código R y evaluarlo, aunque no es tan limpio como los macro sistemas en Lisp y C, es muy útil cuando se trabajan conjuntos de datos dinámicos.

Algunas limitaciones de R para datos reales incluyen el enfoque de llamada por valor. Si bien existen razones de CS para la llamada por valor, la programación del mundo real con grandes datos numéricos requiere alguna forma de llamada por referencia (tenga en cuenta la importancia de los bloques comunes de Fortran en el código más antiguo o los datos del módulo en el código más nuevo). El enfoque adoptado por PDL (Perl Data Language) es especialmente elegante a este respecto. (Los Pdls se llaman esencialmente por referencia a menos que solicite una copia. Sub-pdl hace referencia a una subsección de un pdl padre, en una sintaxis mucho más limpia que la que proporciona Fortran o C).

Es bueno aprender muchos idiomas. Python es indudablemente un lenguaje importante, pero R también está en su dominio. Pero cuando el caucho realmente necesita cumplir con el camino en la ciencia, Fortran y C (y C ++ para algunos) serán difíciles de desplazar.


1

Una característica clave de R es que es una biblioteca de paquetes, tanto como un lenguaje de programación. Cada escritor de paquetes tiene acceso, en principio, a lo que hay en todos los demás paquetes. Esto reduce drásticamente la necesidad de reinventar, volver a documentar, volver a aprender. Esto se aplica tanto a los autores de paquetes como a los usuarios. Por supuesto, esta infraestructura tiene un costo. Los autores de paquetes deben acomodar estándares que se vuelven cada vez más delicados con el paso del tiempo. Algo de esto puede extenderse a lo que los usuarios encuentran.

Python, según tengo entendido, no tiene un sistema de administración de paquetes. No existe un equivalente de la Red global de archivos R de R ( http://cran.r-project.org ), y no hay un equivalente directo de las vistas de tareas de R ( http://cran.csiro.au/web/views/ ). Por lo tanto, hasta cierto punto no es el caso de R, una herramienta para los programadores que trabajan más o menos por sí mismos y no como parte de un esfuerzo comunitario para construir sobre lo que ya está disponible.

Para el análisis de datos y el aprendizaje automático, la demanda es, en gran medida, construir y aprovechar las habilidades que ya existen. Para tareas de programación más genéricas, Python puede tener ventajas. ¿Harás este tipo de trabajo lo suficiente como para justificar el esfuerzo que implica aprender Python?


3
Python tiene un sistema de gestión de paquetes llamado pip. No es parte de la biblioteca estándar, pero vendrá con Python estándar a partir de Python 3.4, que se lanzará el próximo mes (marzo de 2014).
Cody Piersall

2
El equivalente en Python de la Red Integral de Archivo R es PyPI: pypi.python.org/pypi
Wilfred Hughes
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.