Julia vs.Python: ¿cuál es mejor para la ciencia de datos?

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

Pero para los desarrolladores detrás del lenguaje Julia, dirigido específicamente a “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 ni conveniente . Julia tiene como objetivo brindar a los científicos y analistas de datos no solo un desarrollo rápido y conveniente, sino también una velocidad de ejecución increíble. 

¿Cuál es el idioma de Julia?

Creada en 2009 por un equipo de cuatro personas y presentada al público en 2012, Julia está destinada a 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 de código abierto, con una licencia liberal. Queremos la velocidad de C con el dinamismo de Ruby. Queremos un lenguaje que sea homoicónico, con macros verdaderas como Lisp, pero con notación matemática obvia y familiar como Matlab. Queremos algo tan utilizable para la programación general como Python, tan fácil para las estadísticas como R, tan natural para el procesamiento de cadenas como Perl, tan poderoso para el álgebra lineal como Matlab, tan bueno para pegar programas como el shell. Algo que es muy fácil de aprender, pero que mantiene felices a los hackers más serios. Lo queremos interactivo y lo queremos compilado.

(¿Mencionamos que debería ser tan rápido como C?)

Estas son algunas de las formas en que Julia implementa esas aspiraciones:

  • Julia se compila, no se interpreta.  Para un rendimiento en tiempo de ejecución más rápido, Julia se compila justo a tiempo (JIT) utilizando el marco 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-evaluación-impresión) o línea de comando interactiva, similar a lo que ofrece Python. Se pueden introducir scripts y comandos rápidos y únicos.
  • Julia tiene una sintaxis sencilla. La sintaxis de Julia es similar a la de Python: concisa, pero también expresiva y poderosa.
  • Julia combina los beneficios de la escritura dinámica y la escritura estática. Puede especificar tipos de variables, como "entero de 32 bits sin signo". Pero también puede crear jerarquías de tipos para permitir casos generales para manejar 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 entero. Incluso puede prescindir de escribir por completo si no es necesario en un contexto particular.
  • Julia puede llamar a las bibliotecas 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 es compatible con la metaprogramación. Los programas de Julia pueden generar otros programas de Julia, e incluso modificar su propio código, de una manera que recuerda a lenguajes como Lisp.
  • Julia tiene un depurador con todas las funciones.  Julia 1.1 introdujo una suite de depuración, que ejecuta código en un REPL local y le permite recorrer los resultados, inspeccionar variables y agregar puntos de interrupción en el código. Incluso puede realizar tareas detalladas, como recorrer una función generada por código.

Vídeo relacionado: Cómo Python facilita la programación

Python, perfecto para TI, simplifica muchos tipos de trabajo, desde la automatización de sistemas hasta el trabajo en campos de vanguardia como el aprendizaje automático.

Julia vs.Python: ventajas del lenguaje Julia

Julia fue diseñada desde el principio para el cálculo científico y numérico. Por lo tanto, no sorprende que Julia tenga muchas características ventajosas para tales casos de uso:

  • Julia es rápida. La compilación JIT de Julia y las declaraciones de tipos significan que puede vencer rutinariamente a Python "puro" no optimizado en órdenes de magnitud. Python se puede hacer más rápido mediante bibliotecas 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. Un público objetivo importante para Julia son los usuarios de entornos y lenguajes de computación científica como Matlab, R, Mathematica y Octave. La sintaxis de Julia para las 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, lo que facilita la comprensión por parte de los no programadores.
  • Julia tiene gestión automática de memoria. Al igual que Python, Julia no sobrecarga al usuario con los detalles de asignación y liberación de memoria, y proporciona cierta medida de control manual sobre la recolección de basura. La idea es que si cambia a Julia, no pierda una de las comodidades comunes de Python.
  • Julia ofrece un paralelismo superior. Las matemáticas y la informática científica prosperan cuando puede hacer uso de todos los recursos disponibles en una máquina determinada, especialmente varios núcleos. Tanto Python como Julia pueden ejecutar operaciones en paralelo. Sin embargo, los métodos de Python para paralelizar las operaciones a menudo requieren que los datos se serialicen y deserialicen entre subprocesos 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 que la de Python, lo que reduce el umbral para su uso.
  • Julia está desarrollando sus propias bibliotecas nativas de aprendizaje automático. Flux es una biblioteca de aprendizaje automático para Julia que tiene muchos patrones de modelos existentes para casos de uso comunes. Dado que está escrito completamente en Julia, el usuario puede modificarlo según lo necesite, y utiliza la compilación nativa justo a tiempo de Julia para optimizar los proyectos de adentro hacia afuera. 

Julia vs.Python: ventajas de Python

Aunque Julia está diseñada específicamente para la ciencia de datos, mientras que Python ha evolucionado más o menos hacia el rol, Python ofrece algunas ventajas convincentes para el científico de datos. Algunas de las razones por las que Python de "propósito general" puede ser la mejor opción para el trabajo de ciencia de datos:

  • Python utiliza la indexación de matrices de base cero. En la mayoría de los lenguajes, incluidos Python y C, se accede al primer elemento de una matriz con un cero, por ejemplo, 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áticas y ciencias, como Mathematica, usan la indexación 1, y Julia está diseñada para atraer a esa audiencia. Es posible admitir la indexación cero en Julia con una función experimental, pero la indexación 1 de forma predeterminada puede obstaculizar la adopción por parte de una audiencia de uso más general con hábitos de programación arraigados.
  • Python tiene menos gastos generales de inicio.  Los programas de Python pueden ser más lentos que los programas de Julia, pero el tiempo de ejecución de Python en sí es más liviano y, por lo general, los programas de Python necesitan menos tiempo para iniciarse y entregar los primeros resultados. Además, aunque la compilación JIT acelera el tiempo de ejecución de los programas de Julia, tiene el costo de un inicio más lento. Se ha trabajado mucho para que Julia comience más rápido, pero Python todavía tiene la ventaja aquí.
  • Python es maduro. El idioma de Julia es joven. Julia ha estado en desarrollo solo desde 2009 y ha experimentado una gran cantidad de funciones en el camino. Por el contrario, Python existe desde hace 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 lenguaje. Una vez más, la relativa novedad de Julia significa que la cultura del software a su alrededor aún es pequeña. Algo de eso se compensa con la capacidad de usar bibliotecas C y Python existentes, 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 realiza con TensorFlow o PyTorch.
  • Python tiene millones de usuarios. Un idioma no es nada sin una comunidad grande, dedicada y activa a su alrededor. La comunidad alrededor de Julia es entusiasta y está creciendo, pero todavía es solo una fracción del tamaño de la comunidad de Python. La enorme comunidad de Python es una gran ventaja. 
  • Python se está volviendo más rápido. Además de obtener mejoras en el intérprete de Python (incluidas mejoras en el procesamiento paralelo y de múltiples núcleos), Python se ha vuelto más fácil de acelerar. El proyecto mypyc traduce Python con anotaciones de tipo en C nativo, mucho menos torpemente que Cython. Por lo general, produce mejoras de rendimiento de cuatro veces y, a menudo, mucho más para operaciones matemáticas puras.