Premisa: esta es una pregunta típica de Quora: muy subjetiva y algo polarizante. Lo intentaré porque a) creo que algunas de las respuestas votadas son realmente incorrectas o están fechadas, b) después de haber usado estos dos idiomas durante algún tiempo (R desde 2000, Python desde 2005), creo que tengo un poco de perspectiva histórica, que podría ser útil para responder cuál es la diferencia entre los idiomas y no qué es mejor (para un elogio calificado de R, tengo otra respuesta de Quora).
¿Cuáles son las similitudes ?
Mucho más que las diferencias.
- ¿Qué significa 'alineado suavemente' en un contexto de aprendizaje profundo?
- ¿Por qué los pesos hacia adelante y hacia atrás son iguales en la máquina de Boltzmann restringida?
- ¿Cómo comenzó Perl como el idioma dominante en bioinformática?
- Soy candidato a doctorado en una universidad en Irán, tengo experiencias en PNL persa, Spark, Hadoop y aprendizaje profundo. ¿Tengo alguna posibilidad de ingresar a Google?
- ¿Es realmente necesaria la programación competitiva para campos como la ciencia de datos o el aprendizaje automático y para solicitar gigantes tecnológicos?
- Ambos son lenguajes de propósito general, hasta cierto punto. R no es una DSL y, al mismo tiempo, Python no está destinado a crear aplicaciones grandes.
- Ambos lenguajes son dinámicos, flexibles y bastante lentos (R es más lento, por las razones que se describen a continuación).
- Ambos tienen un gran ecosistema y una gran base de usuarios.
- Con el tiempo, y cuando se trata de Machine Learning, ambos se han convertido principalmente en lenguajes de interfaz . Son demasiado lentos (o demasiado difíciles de convertir en lenguajes rápidos, aparentemente) para realizar operaciones nativas, no vectorizadas; y no están diseñados para el paralelismo. Por otro lado, son adecuados para crear secuencias de comandos y llamar a grandes bibliotecas que pueden contener DSL. En esta etapa, las diferencias entre ellos son bastante menores. Ambos tienen un excelente soporte para:
- TensorFlow / Keras;
- Chispa – chispear;
- H2O;
- Stan;
- Todos los métodos de aprendizaje estadístico más comunes.
Las diferencias en el rendimiento entre los dos idiomas son menores, porque la biblioteca realiza el cálculo y ambos idiomas pasan los datos por valor (principalmente).
Cuales son las diferencias ?
- En grandes conjuntos de datos numéricos, mi impresión es que Python es más rápido y más flexible . Podrá elegir flotadores largos / cortos y cambiar el almacenamiento por precisión. Y, Python tiene más bibliotecas para la gestión de datos de tamaño mediano (pytable, dask); Estos pueden ser útiles. En R, cuando trato con grandes datos fuera del núcleo, mi enfoque ha sido confiar en DBMS estándar (pPostgres, servidor MS, con el cual R tiene integración nativa, Redshift). Como beneficio adicional, dplyr en R ofrece una interfaz excelente y fácil para estas bases de datos.
- Python tiene formas de acelerar el rendimiento sin recurrir a C ++. Cython es el recurso más común para obtener una velocidad C-comparable, seguido de Numba. Nada de eso existe en R.
- Python tiene dos bibliotecas ubicuas y monolíticas utilizadas por los aprendices de máquinas: Pandas para munging de datos y Scikit-learn para modelar. Por el contrario, R tiene muchas bibliotecas especializadas más pequeñas.
- Por el contrario, para la visualización, R tiene relativamente pocas bibliotecas (ggplot2, ggvis) y Python tiene muchas (matplotlib, seaborn, vincent, altair, bokeh …). Sin embargo, creo que la mayoría de la gente estaría de acuerdo en que R es mejor en la visualización, porque Hadley Wickham básicamente lo hizo bien en su segundo intento. Python está en un estado lamentable aquí.
- La comunidad R parece haberse unido en torno a dos entornos de desarrollo: Rstudio (gran mayoría) y … todos los demás. Python tiene muchas más opciones, pero tengo la impresión de que los desarrolladores usan principalmente ipython, pycharm y quizás spyder. Personalmente, encuentro a Rstudio un IDE excepcional en cualquier idioma. Es un fuerte diferenciador.
- El tidyverse es una biblioteca de datos que simultáneamente a) extiende el lenguaje; b) promueve una “filosofía de análisis de datos” y buenas prácticas de programación. Es una cosa R muy peculiar, aunque se puede portar a otros idiomas. Muchas personas (incluido yo) consideran que es una excelente manera de organizar el pensamiento, los datos y el análisis. Python no tiene nada de este tipo.
En general, diría que una diferencia entre el código R y el código Python es que el primero generalmente está organizado en torno a funciones y programación funcional, mientras que el segundo usa objetos con mucha más frecuencia. Aún ahora, me parece demasiado heterodoxo usar pytoolz (una buena biblioteca funcional) en mi código. La mayoría del código que ve tiene instancias de objeto y cadenas de método largas.
Entonces, ¿cuáles son las diferencias profundas (adjetivo popular en estos días)? Creo que se pueden ver a través de los orígenes de los idiomas. R fue diseñado para análisis de datos interactivos. Sus diseñadores y colaboradores iniciales (Chambers, Ihaka, Gentleman, Tierney) se sumergieron en la programación funcional (por ejemplo, leyeron On Abandoning XLISP-STAT de Luke Tierney) y modelaron la semántica del lenguaje en Scheme, mientras tomaban prestada parte de la sintaxis de APL. También tomaron una decisión consciente de establecer valores predeterminados para las conversiones de tipo y promociones para que el análisis interactivo fuera lo más productivo posible. Desde el principio, las operaciones algebraicas en vectores numéricos se extendieron a NaN, NA e Inf, a expensas de un cómputo más lento. El alcance léxico y la metaprogramación en R es extremadamente flexible, lo que permite una evaluación no estándar (que es muy útil en el análisis de datos).
Python, por otro lado, tiene sus raíces en ABC, un lenguaje en el que Van Rossum trabajó en los años 80. El objetivo inicial de Python era ser un lenguaje bien diseñado para la educación, y presentar a los estudiantes universitarios a la programación a través de Python fue un enfoque temprano del lenguaje, a través de la iniciativa DARPA CP4E (Programación de computadoras para todos). La claridad y el buen diseño siempre fueron de suma importancia en la mente de Guido. No creo que no le guste la programación funcional, por ejemplo, pero no le gusta la presencia de lambdas, mapas y filtros en python, porque se sienten cosidos. Incluso si las personas a menudo asocian Python a la computación numérica, eso es un accidente histórico, el subproducto de alternativas deficientes de código abierto (por ejemplo, Octave) y de la existencia de un par de hombres clave como Jim Hugunin y Travis Oliphant.
Estas raíces todavía se muestran hoy. R tiene probablemente la cadena de herramientas y la filosofía más integradas y coherentes que lo llevan de los datos sin procesar a los datos transformados, del modelo a la visualización y la salida final (a través de brillante o rmarkdown). Python es el último lenguaje de scripting, bien diseñado, robusto, flexible y lo suficientemente rápido. Si tiene que integrar la salida de un análisis en un proceso grande y heterogéneo ya escrito en Python, probablemente solo tenga una opción. Por otro lado, R brilla si está realizando muchos análisis a medida, incluidos análisis exploratorios, interactivos y / o la integración con un proceso de producción preexistente no es demasiado difícil.