Librerias en Julia
R. Checa-Garcia (CC BY-NC-SA) JULIA-BLOG
scientific-computing Julia
Notebook
Resumen Lista con Librerias para Julia para computacion cientifica.
Tabla de Contenidos
Entiendiendo Pkgs.jl
Existe una lista de paquetes para Julia que esta creciendo continuamente, y se manejan de modo sencillo gracias a Pkgs.jl La manera básica de uso se centra en su uso en REPL, es decir, entramos en > Julia
y escribimos ]
:
tras escribir ]
: tendremos algo como
en este entorno podemos usar una serie de comandos para el manejo de packages como, por ejemplo:
Sin embargo desde la version 1.3, Pkg.jl, posee otras funcionalidades y diseño:
- Pkg está diseñado en torno a “entornos/enviroments”: conjuntos independientes de paquetes que pueden ser locales para un proyecto individual o compartidos y seleccionados por nombre.
Por esto teniamos (v1.1) pkg>
que nos indicaba el entorno/enviroment activado (uno especifico). Pero podemos cambiarlo:
vamos a usar aqui add y status:
Nos podemos preguntar donde esta todo esto archivado (seguramente en este momento en una localizacion temporal) pero si salimos de julia vemos un directorio llamando mientorno
Es decir se ha creado un directorio con mientorno donde he invocado julia, y posee los archivos Manifest.toml y Project.toml. Ademas vemos que estos archivos son los que han sido cambiados tras el comando develop --local
, que ha creado un directorio dev/ donde esta el codigo de JSON.
La motivacion de todo esto la podemos ver en el propio manual de Pkg.jl
El conjunto exacto de paquetes y versiones en un enviroment se describe en un archivo de Manifest.toml que se puede registrar en un repositorio de proyectos y rastrear en el control de versiones, lo que mejora significativamente la reproducibilidad de los proyectos. Si alguna vez has intentado ejecutar código que no has utilizado durante un tiempo solo para descubrir que no puede hacer que funcione porque se ha actualizado o desinstalado algunos de los paquetes que estaba usando su proyecto, comprenderá el motivación para este enfoque. En Pkg, dado que cada proyecto mantiene su propio conjunto independiente de versiones de paquetes, nunca más tendrá este problema. Además, si revisa un proyecto en un nuevo sistema, simplemente puede materializar el entorno descrito por su archivo de manifiesto e inmediatamente estará en funcionamiento con un conjunto de dependencias bien conocido. (Manual Pkg.jl)
Paquetes de Julia
La lista de librerias y paquetes en julia comienza a ser amplia, pueden encontrarse muchos de ellos en Julia Observer. De todos modos, en el caso de Julia, la libreria estandar que viene con el propio compilador al contrario que otros compliadores/lenguages posee modulos para muchas de la tareas de modo que no nos require installar paquetes externos. Por dar algunos ejemplos: la parte de algebra lineal, unit-test, distributed comnputing, markdown, profiling, etc.
Libreria Estandar
Os indico algunos modulos dentro de la libreria estandar (que es distribuida con Julia junto a Base que como el nombre indica es el conjunto de funciones que constituyen el nucleo de Julia) que yo personamente he usado:
- Dates: Proporciona dos tipos llamados
Date
yDateTime
que se diferencian esencialmente en la resolucion que proporciona. De modo formal estos tipos cumplen con ISO 8601 de modo que el calendario usado es proleptic Gregorian. - Delimited Files: Esta libreria es esencial si trabajas con archivos de texto organizados/separados por columnas con un caracter o conjunto de ellos conocido.
- Pkg: Ya lo hemos comentado antes, y es parte de la libreria estandar.
- Random: Implementa el método de
Mersenne Twister
para generar números aleatorios.rand(Float64, (n, m, p))
, por ejemplo, genera un array tridimensional con dimensiones (n, m, p) con valores aleatorios entre 0 y 1, es decir, números positivos entre 0 y 1 (incluyendo 0 pero no 1). Cuando leas la documentacion ten encuenta que aunque el modulo de números aleatorios es Random.Random, las funciones rand, rand!, randn, randexp estan en Base (es decir Base.rand, Base.rand! etc). - Statistics: Hay algunas functiones detro de la librería estandar, pero en este caso es bastante limitada ya que unicamente ofrece estaísticos básicos (media, mediana, etc). Recomiendo revisar Distributions.jl si quieres trabajar con estadística más avanzada en Julia.
- Unit Testing: Creo que esta es otra librería muy útil y recomiendo aprenderla desde el principio cuando aprendas Julia.
Paquetes de Visualización
Nombre | Propósito | Licencia | Docs | Repositorio |
---|---|---|---|---|
Plots.jl | Visualization wrapper | Open-Source | docs | github |
VegaLite.jl | Visualizacion con VegaLite | Open-Source | docs | github |
Gadfly.jl | Visualization focuses on Stats Plots | Open-Source | docs, , paper | github |
Makie.jl | Visualizacion basada en GPU | Open-Source | docs | github |
Notes: Plots.jl puede usar diferentes motores (backends) para la creación de figuras como pueden ser GR or pyplots (que utiliza en última instancia matplotlib) entre otros.
Matemáticas y estadística
Nombre | Propósito | Licencia | Docs | Repositorio |
---|---|---|---|---|
Distributions.jl | Distributions Probab. | Open-Source | docs , paper | github |
SpecialFunctions.jl | Special Functions Math | Open-Source | docs | github |
GSL.jl | Interface to GSL Math-Lib | Open-Source | docs-gsl | github |
Convex.jl | Mathematical Optimization | Open-Source | docs , paper | github |
El paquete Distributions.jl tiene bastantes posibilidades aunque hay en este momento (Abril 2020) discussion acerca de una nueva API que llevaria a cambios drasticos. El programador tiene otra libreria llamada Measures.jl
interesante de evaluar.
Machine Learning
Nombre | Propósito | Licencia | Docs | Repositorio |
---|---|---|---|---|
Flux.jl | Machine Learning approach | Open-Source | docs , paper | github |
MLJ.jl | Machine Learning methods | Open-Source | docs | github |
Documentación
Nombre | Propósito | Licencia | Docs | Repositorio |
---|---|---|---|---|
Documenter.jl | Documentar codigo paquetes | Open-Source | docs | github |
El paquete Documenter.jl es bastante interesante, y combina bien con la forma de crear docstrings del propio lenguaje. Este paquete es similar a Sphinx desarrollado en Python con una visualizacion por defecto parecida a ReadTheDocs. Ha surgido recientemente una alternativa a Documenter llamada Publish.jl pero no es tan usada.
Paginas Web
Nombre | Propósito | Licencia | Docs | Repositorio |
---|---|---|---|---|
Franklin.jl | Crear paginas web | Open-Source | docs | github |
Librerias equivalentes a xarray
No existe aun una única librería consolidada que sea equivalente al xarray de Python, y dentro del ecosistema existen muchas opciones diferentes, habrá que esperar un poco para ver la evolución y la posible integración de varias de ellas en otra más madura. Las opciones son: AxisArrays.jl, NamedArrays.jl, CircularArrays, NamedDimensions.jl, GeoArrays.jl etc. En principio AxisArrays.jl ha tenido bastante exito, pero el consenso general es que es necesario re-evaluar la implementación actual.