Saltar al contenido

Data Science: ¿Python u otros?

30 junio 2020
| Bloque de Anuncios |

Entre los muchos casos de uso que cubre Python, el análisis de datos se ha convertido en el más grande y significativo. El ecosistema Python está cargado de bibliotecas, herramientas y aplicaciones que hacen que el trabajo de la computación científica y el análisis de datos sea rápido y conveniente.

Pero para los desarrolladores que están detrás del lenguaje Julia – dirigido específicamente a la «computación científica, aprendizaje automático, minería de datos, álgebra lineal a gran escala, computación distribuida y paralela»- Python no es lo suficientemente rápido o conveniente. Julia pretende dar a los científicos y analistas de datos no sólo un desarrollo rápido y conveniente, sino también una velocidad de ejecución fulgurante.

¿Qué es el lenguaje Julia?

Creada en 2009 por un equipo de cuatro personas y presentada al público en 2012, Julia tiene por objeto abordar las deficiencias en Python y otros lenguajes y aplicaciones utilizados para la computación científica y el procesamiento de datos. «Somos codiciosos», escribieron. Querían más:

Queremos un lenguaje que sea de código abierto, con una licencia liberal. Queremos la velocidad de C con el dinamismo de Ruby. Queremos un lenguaje homoicónico, con verdaderas macros como Lisp, pero con una obvia y familiar notación matemática como Matlab. Queremos algo tan utilizable para la programación general como Python, tan fácil para la estadística como R, tan natural para el procesamiento de cadenas como Perl, tan potente para el álgebra lineal como Matlab, tan bueno para pegar programas como el shell. Algo que es muy simple de aprender, pero que mantiene felices a los hackers más serios. Lo queremos interactivo y lo queremos compilado.

Creadores de Julia

Aquí están algunas de las formas en que Julia implementa esas aspiraciones:

| Bloque de Anuncios |
  • Julia es compilada, no interpretada. Para un rendimiento más rápido del tiempo de ejecución, Julia se compila justo a tiempo (JIT) usando el marco de trabajo del compilador LLVM. En el mejor de los casos, Julia puede acercarse o igualar la velocidad de C.
  • Julia es interactiva. Julia incluye un REPL (bucle de lectura-eval-impresión), o línea de comandos interactiva, similar a lo que ofrece Python. Se pueden introducir rápidamente scripts y comandos únicos.
  • Julia tiene una sintaxis sencilla. La sintaxis de Julia es similar a la de Python, pero también es expresiva y poderosa.
  • Julia combina los beneficios de la escritura dinámica y la escritura estática. Puede especificar tipos para las variables, como «entero de 32 bits sin signo». Pero también se pueden crear jerarquías de tipos para permitir casos generales de manejo de variables de tipos específicos, por ejemplo, para escribir una función que acepte números enteros sin especificar la longitud o la firma del número entero. Incluso puede prescindir completamente de la escritura si no se necesita en un contexto particular.
  • Julia puede llamar a las bibliotecas de Python, C y Fortran. Julia puede interactuar directamente con bibliotecas externas escritas en C y Fortran. También es posible interactuar con el código Python a través de la biblioteca PyCall, e incluso compartir datos entre Python y Julia.
  • Julia soporta la metaprogramación. Los programas de Julia pueden generar otros programas de Julia, e incluso modificar su propio código, de una forma que recuerda a lenguajes como Lisp.
  • Julia tiene un depurador completo. Julia 1.1 introdujo una suite de depuración, que ejecuta el código en una REPL local y permite revisar los resultados, inspeccionar las variables y añadir puntos de ruptura en el código. Incluso puede realizar tareas de grano fino como pasar por una función generada por el código.

Ventajas de Julia respecto a Python

Julia fue diseñada desde el principio para la computación científica y numérica. Por lo tanto, no es sorprendente que Julia tenga muchas características ventajosas para estos casos de uso:

  • Julia es rápida. La compilación JIT de Julia y las declaraciones de tipo significan que puede vencer rutinariamente a la Pitón «pura» y no optimizada por órdenes de magnitud. Python puede hacerse más rápido por medio de librerías externas, compiladores JIT de terceros (PyPy), y optimizaciones con herramientas como Cython, pero Julia está diseñada para ser más rápida desde el principio.
  • Julia tiene una sintaxis amigable con las matemáticas. Una importante audiencia objetivo de Julia son los usuarios de lenguajes y entornos de computación científica como Matlab, R, Mathematica y Octave. La sintaxis de Julia para operaciones matemáticas se parece más a la forma en que se escriben las fórmulas matemáticas fuera del mundo de la computación, facilitando la comprensión de los no programadores.
  • Tiene una administración de memoria automática. Al igual que Python, Julia no carga al usuario con los detalles de la asignación y liberación de memoria, y proporciona cierta medida de control manual sobre la recogida de basura. La idea es que si cambias a Julia, no pierdes una de las comodidades comunes de Python.
  • Ofrece un paralelismo superior. Las matemáticas y la computación científica prosperan cuando puedes hacer uso de todos los recursos disponibles en una máquina dada, especialmente los múltiples núcleos. Tanto Python como Julia pueden realizar operaciones en paralelo. Sin embargo, los métodos de Python para paralelizar operaciones a menudo requieren que los datos se serialicen y deserialicen entre hilos o nodos, mientras que la paralelización de Julia es más refinada. Además, la sintaxis de paralelización de Julia es menos pesada en la parte superior que la de Python, lo que reduce el umbral para su uso.
  • Julia está desarrollando sus propias bibliotecas de aprendizaje de máquinas nativas. Flux es una biblioteca de aprendizaje automático para Julia que tiene muchos patrones de modelos existentes para casos de uso común. Dado que está escrita completamente en Julia, puede ser modificada según las necesidades del usuario, y utiliza la compilación nativa de Julia justo a tiempo para optimizar los proyectos desde dentro hacia fuera.

Ventajas de Python respecto a Julia

Aunque Julia se construyó para la ciencia de los datos, mientras que Python ha evolucionado más o menos en el papel, Python ofrece algunas ventajas convincentes para el científico de los datos. Algunas de las razones por las que el «propósito general» de Python puede ser la mejor opción para el trabajo de ciencia de datos:

  • Python utiliza una indexación de matriz de base cero. En la mayoría de los idiomas, incluidos Python y C, se accede al primer elemento de un array con un cero-e.g., string[0] en Python para el primer carácter de una cadena. Julia usa 1 para el primer elemento de una matriz. Esta no es una decisión arbitraria; muchas otras aplicaciones de matemática y ciencias, como Mathematica, usan 1-indexación, y Julia tiene la intención de atraer a esa audiencia. Es posible apoyar la indexación cero en Julia con una función experimental, pero la indexación 1 por defecto puede impedir la adopción por una audiencia de uso más general con hábitos de programación arraigados.
  • Python tiene menos gastos de inicio. Los programas en Python pueden ser más lentos que los de Julia, pero el tiempo de ejecución en Python en sí mismo es más ligero, y generalmente toma menos tiempo para que los programas en Python se inicien y entreguen los primeros resultados. Además, aunque la compilación JIT acelera el tiempo de ejecución de los programas Julia, se hace a costa de un inicio más lento. Se ha hecho mucho trabajo para que Julia se inicie más rápido, pero Python todavía tiene la ventaja aquí.
  • Python está maduro. El lenguaje Julia es joven. Julia ha estado en desarrollo sólo desde 2009, y ha sufrido una gran cantidad de cambios de características en el camino. Por el contrario, Python ha existido por casi 30 años.
  • Python tiene muchos más paquetes de terceros. La amplitud y utilidad de la cultura de Python de paquetes de terceros sigue siendo una de las mayores atracciones del idioma. De nuevo, la relativa novedad de Julia significa que la cultura de software que la rodea es todavía pequeña. Algo de eso se compensa con la capacidad de utilizar las bibliotecas existentes de C y Python, pero Julia necesita bibliotecas propias para prosperar. Bibliotecas como Flux y Knet hacen que Julia sea útil para el aprendizaje automático y el aprendizaje profundo, pero la gran mayoría de ese trabajo todavía se hace con TensorFlow o PyTorch.
  • Python tiene millones de usuarios. Un idioma no es nada sin una gran comunidad dedicada y activa a su alrededor. La comunidad que rodea a Julia es entusiasta y está creciendo, pero todavía es sólo una fracción del tamaño de la comunidad de Python. La enorme comunidad de Python es una gran ventaja.
  • Python trabaja más rápido. Además de obtener mejoras en el intérprete de Python (incluyendo mejoras en el procesamiento multinúcleo y paralelo), Python se ha vuelto más fácil de acelerar. El proyecto mypyc traduce el Python con anotaciones tipográficas a C nativo, mucho menos torpe que el Cython. Típicamente produce cuatro veces más mejoras de rendimiento, y a menudo mucho más para operaciones matemáticas puras.

| Bloque de Anuncios |