Los mejores idiomas para la informática científica [cerrado]


10

Parece que la mayoría de los idiomas tienen cierto número de bibliotecas informáticas científicas disponibles.

  • Python tiene Scipy
  • Rust tiene SciRust
  • C++tiene varios incluidos ViennaCLyArmadillo
  • Javatiene Java Numericsy Coltademás de varios otros

Sin mencionar lenguajes como Ry Juliadiseñados explícitamente para la informática científica.

Con tantas opciones, ¿cómo elige el mejor idioma para una tarea? Además, ¿qué idiomas serán los más eficaces? Pythony Rparece tener la mayor tracción en el espacio, pero lógicamente un lenguaje compilado parece que sería una mejor opción. ¿Y algo superará alguna vez Fortran? Además, los idiomas compilados tienden a tener aceleración de GPU, mientras que los idiomas interpretados tienen gusto Ry Pythonno. ¿Qué debo tener en cuenta al elegir un idioma, y ​​qué idiomas proporcionan el mejor equilibrio entre utilidad y rendimiento? ¿También hay idiomas con recursos informáticos científicos importantes que me haya perdido?

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
No hay duda aquí. Si necesita hacer una investigación básica sobre el lenguaje de programación, es mejor que lea Wikipedia que esperar a que alguien aparezca aquí para empujar a su caballo.
Dirk Eddelbuettel

@DirkEddelbuettel Muy buen punto. Pensé que era mejor intentar producir contenido que refinarlo en este momento en la Beta, pero no sé mucho sobre las versiones beta de SE. ¿Fue un buen movimiento de mi parte o no?
indico

1
Mira estos números.
Emre

@DirkEddelbuettel no estás equivocado, pero espero fomentar una discusión sobre las características y herramientas útiles asociadas con varios idiomas. El lenguaje que usa es una herramienta importante en la ciencia de datos, por lo que pensé que las personas podían discutir las herramientas que preferían y sus beneficios objetivos aquí, como un recurso para aquellos que buscan intentar un trabajo similar.
ragingSloth

1
@indico Pruebe cran.r-project.org/web/packages/overlap/index.html, que es el primero que elegí al azar. Pero realmente, personalmente he conocido muchos estadísticos que han escrito paquetes R. Ninguno de ellos ha escrito aún una pitón. Para ampliar un poco la conversación, kdnuggets.com/2013/08/… es interesante.
Lembik

Respuestas:


12

Esta es una pregunta bastante masiva, por lo que no pretende ser una respuesta completa, pero con suerte esto puede ayudar a informar a la práctica general sobre la determinación de la mejor herramienta para el trabajo cuando se trata de ciencia de datos. En general, tengo una lista relativamente corta de calificaciones que busco cuando se trata de cualquier herramienta en este espacio. En ningún orden en particular son:

  • Rendimiento : Básicamente se reduce a la rapidez con que el lenguaje multiplica la matriz, ya que esa es más o menos la tarea más importante en la ciencia de datos.
  • Escalabilidad : al menos para mí personalmente, esto se reduce a la facilidad de construir un sistema distribuido. Aquí es donde los idiomas Juliarealmente brillan.
  • Comunidad : con cualquier idioma, realmente estás buscando una comunidad activa que pueda ayudarte cuando te quedes atrapado usando cualquier herramienta que estés usando. Aquí es donde pythonse encuentra muy por delante de la mayoría de los otros idiomas.
  • Flexibilidad : nada es peor que estar limitado por el idioma que usa. No sucede con mucha frecuencia, pero tratar de representar estructuras gráficas haskelles un dolor notorio, y Juliaestá lleno de muchos dolores arquitectónicos de código como resultado de ser un lenguaje tan joven.
  • Facilidad de uso : si desea usar algo en un entorno más grande, debe asegurarse de que la configuración sea sencilla y se pueda automatizar. Nada es peor que tener que configurar una compilación delicada en media docena de máquinas.

Hay una gran cantidad de artículos sobre rendimiento y escalabilidad, pero en general se verá un diferencial de rendimiento de aproximadamente 5-10x entre idiomas, que puede o no importar según su aplicación específica. En lo que respecta a la aceleración de GPU, cudamates una forma realmente fluida de hacer que funcione python, y la cudabiblioteca en general ha hecho que la aceleración de GPU sea mucho más accesible de lo que solía ser.

Las dos métricas principales que uso tanto para la comunidad como para la flexibilidad son mirar el administrador de paquetes del idioma y las preguntas de idioma en un sitio como SO. Si hay una gran cantidad de preguntas y respuestas de alta calidad, es una buena señal de que la comunidad está activa. El número de paquetes y la actividad general en esos paquetes también pueden ser un buen indicador de esta métrica.

En cuanto a la facilidad de uso, creo firmemente que la única forma de saberlo es configurarlo usted mismo. Hay mucha superstición en torno a muchas herramientas de Data Science, específicamente cosas como bases de datos y arquitectura informática distribuida, pero no hay forma de saber realmente si algo es fácil o difícil de configurar e implementar sin solo construirlo usted mismo.


Para agregar a esta respuesta: en términos de escalabilidad, Scalay Govale la pena mencionar.
Marc Claesen

Agregaría claridad y brevedad (relacionado con la sintaxis y la arquitectura del lenguaje, pero no solo). Poder escribir rápido y leer sin dolor hace una gran diferencia (ya que el tiempo de los programadores es más costoso que el tiempo de máquina).
Piotr Migdal

5

El mejor idioma depende de lo que quieras hacer. Primer comentario: no te limites a un idioma. Aprender un nuevo idioma siempre es algo bueno, pero en algún momento tendrás que elegir. Las instalaciones que ofrece el lenguaje en sí son algo obvio a tener en cuenta, pero en mi opinión lo siguiente es más importante:

  • bibliotecas disponibles : ¿tiene que implementar todo desde cero o puede reutilizar las cosas existentes? Tenga en cuenta que estas bibliotecas no necesitan estar en el idioma que esté considerando, siempre que pueda interactuar fácilmente. Trabajar en un idioma sin acceso a la biblioteca no lo ayudará a hacer las cosas.
  • cantidad de expertos : si desea desarrolladores externos o comenzar a trabajar en equipo, debe tener en cuenta cuántas personas realmente conocen el idioma. Como ejemplo extremo: si decide trabajar en Brainfuck porque le gusta, sepa que probablemente trabajará solo. Existen muchas encuestas que pueden ayudar a evaluar la popularidad de los idiomas, incluida la cantidad de preguntas por idioma en SO.
  • cadena de herramientas : ¿tiene acceso a buenos depuradores, perfiladores, herramientas de documentación y (si le gustan) IDEs?

Soy consciente de que la mayoría de mis puntos favorecen los idiomas establecidos. Esto es desde una perspectiva de "hacer las cosas".

Dicho esto, personalmente creo que es mucho mejor dominar un idioma de bajo nivel y un lenguaje de alto nivel:

  • nivel bajo: C ++, C, Fortran, ... utilizando el cual puede implementar ciertos puntos críticos de creación de perfiles solo si lo necesita porque el desarrollo en estos lenguajes suele ser más lento (aunque esto está sujeto a debate). Estos idiomas siguen siendo el rey de la colina en términos de rendimiento crítico y es probable que se mantengan en la cima durante mucho tiempo.
  • alto nivel: Python, R, Clojure, ... para 'pegar' cosas juntas y hacer cosas críticas de no rendimiento (preprocesamiento, manejo de datos, ...). Considero que esto es importante simplemente porque es mucho más fácil hacer un rápido desarrollo y creación de prototipos en estos idiomas.

4

Primero debe decidir qué quiere hacer, luego busque la herramienta adecuada para esa tarea.

Un enfoque muy general es usar R para las primeras versiones y ver si su enfoque es correcto. Le falta un poco de velocidad, pero tiene comandos muy potentes y bibliotecas de complementos, que puede probar casi cualquier cosa con él: http://www.r-project.org/

La segunda idea es que si desea comprender los algoritmos detrás de las bibliotecas, es posible que desee ver las Recetas numéricas. Están disponibles para diferentes idiomas y de uso gratuito para el aprendizaje. Si desea usarlos en productos comerciales, debe comprar una licencia: http://en.wikipedia.org/wiki/Numerical_Recipes

La mayoría de las veces el rendimiento no será el problema, sino encontrar los algoritmos y parámetros correctos para ellos, por lo que es importante contar con un lenguaje de script rápido en lugar de un programa monstruo que primero necesita compilar 10 minutos antes de calcular dos números y sacar el resultado.

Y una gran ventaja en el uso de R es que tiene funciones integradas o bibliotecas para casi cualquier tipo de diagrama que pueda necesitar para visualizar sus datos.

Si tiene una versión funcional, es casi fácil portarla a cualquier otro idioma que considere más eficiente.

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.