GitHub stars に見る Julia 言語の人気ライブラリトップ30
私は普段 Python を使った機械学習アルゴリズムの開発とか統計分析に関わっていますが、最近どうも Julia 言語 julialang が気になっています。よくある scikit-learn や pandas もしくは PyTorch などに不満を感じることはあまりないのですが、みんな Julia とそのライブラリをなんのために使っているのかな?というのがいま知りたいことです。
そこで、GitHub のパブリックレポジトリを “jl language:jl” で検索し、star 数上位30位まで見て様子をうかがってみることにしました。
長くなるので目次をここに
まずはランキングから
レポジトリ名とその説明抜粋、star 数(2020年5月18日 時点)と独断で決めたライブラリの分類を挙げていきましょう。
1. FluxML/Flux.jl
Flux is an elegant approach to machine learning. It’s a 100% pure-Julia stack, and provides lightweight abstractions on top of Julia’s native GPU and AD support. Flux makes the easy things easy while remaining fully hackable.
- GitHub - FluxML/Flux.jl: Relax! Flux is the ML library that doesn't make you tensor
- star: 2.2k
- 分類: 機械学習、深層学習
- メモ: machine learning と書いているが、実際は深層学習ライブラリに近い内容
2. JuliaLang/IJulia.jl
IJulia is a Julia-language backend combined with the Jupyter interactive environment (also used by IPython). This combination allows you to interact with the Julia language using Jupyter/IPython’s powerful graphical notebook, which combines code, formatted text, math, and multimedia in a single document. It also works with JupyterLab, a Jupyter-based integrated development environment for notebooks and code.
- GitHub - JuliaLang/IJulia.jl: Julia kernel for Jupyter
- star: 2k
- 分類: 一般
3. GiovineItalia/Gadfly.jl
Gadfly is a plotting and data visualization system written in Julia. It’s influenced heavily by Leland Wilkinson’s book The Grammar of Graphics and Hadley Wickham’s refinement of that grammar in ggplot2.
- GitHub - GiovineItalia/Gadfly.jl: Crafty statistical graphics for Julia.
- star: 1.5k
- 分類: データサイエンス、可視化
4. probcomp/Gen.jl
Gen: A General-Purpose Probabilistic Programming System with Programmable Inference
- GitHub - probcomp/Gen.jl: A general-purpose probabilistic programming system with programmable inference
- star: 1.4k
- 分類: データサイエンス、確率的プログラミング
5. SciML/DifferentialEquations.jl
This is a suite for numerically solving differential equations written in Julia and available for use in Julia, Python, and R. The purpose of this package is to supply efficient Julia implementations of solvers for various differential equations.
- GitHub - SciML/DifferentialEquations.jl: Multi-language suite for high-performance solvers of differential equations
- star: 1.2k
- 分類: 科学技術計算、微分方程式
6. pluskid/Mocha.jl
Update Dec. 2018: Mocha.jl is now deprecated.
- GitHub - pluskid/Mocha.jl: Deep Learning framework for Julia
- star: 1.2k
- 分類: 機械学習、深層学習
- メモ: 開発停止中。Flux か Knet を使うようガイドされている
7. denizyuret/Knet.jl
Knet (pronounced “kay-net”) is the Koç University deep learning framework implemented in Julia by Deniz Yuret and collaborators. It supports GPU operation and automatic differentiation using dynamic computational graphs for models defined in plain Julia.
- GitHub - denizyuret/Knet.jl: Koç University deep learning framework.
- star: 1.1k
- 分類: 機械学習、深層学習
8. JuliaOpt/JuMP.jl
JuMP is a domain-specific modeling language for mathematical optimization embedded in Julia.
- GitHub - JuliaOpt/JuMP.jl: Modeling language for Mathematical Optimization (linear, mixed-integer, conic, semidefinite, nonlinear)
- star: 1.1k
- 分類: 科学技術計算、数理最適化
9. JuliaPlots/Plots.jl
Plots is a plotting API and toolset.
- GitHub - JuliaPlots/Plots.jl: Powerful convenience for Julia visualizations and data analysis
- star: 1k
- 分類: データサイエンス、可視化
10. svaksha/Julia.jl
Julia.jl aggregates and curates decibans of knowledge resources for programming in Julia, an all-purpose programming language that addresses the needs of high-performance numerical analysis and computational science.
- GitHub - svaksha/Julia.jl: Curated decibans of Julia programming language.
- star: 927
- 分類: 一般
- メモ: Julia 言語に関する情報を集めたレポジトリ。よく awesome-XXX のようなキュレーションレポジトリがあるが、その類。AI, Bio など様々なドメインのライブラリ情報がまとめられており有用そう
11. GenieFramework/Genie.jl
Genie is a full-stack MVC web framework that provides a streamlined and efficient workflow for developing modern web applications. It builds on Julia’s strengths (high-level, high-performance, dynamic, JIT compiled), exposing a rich API and a powerful toolset for productive web development.
- GitHub - GenieFramework/Genie.jl: The highly productive Julia web framework
- star: 859
- 分類: web 開発
- メモ: ハイパフォーマンスである以外にも、Julia 言語の深層学習フレームワークや微分方程式ライブラリを使っている場合、web フレームワークも同じ言語で書く利点は多いかもしれない(PyTorch で書かれたニューラルネットを Flask から呼んで推論実行する、みたいなノリで)
12. TuringLang/Turing.jl
Turing.jl is a Julia library for general-purpose probabilistic programming. Turing allows the user to write models using standard Julia syntax, and provides a wide range of sampling-based inference methods for solving problems across probabilistic machine learning, Bayesian statistics, and data science.
- GitHub - TuringLang/Turing.jl: Bayesian inference with probabilistic programming.
- star: 833
- 分類: データサイエンス、確率的プログラミング
- メモ: 4位の Gen.jl とか Python の Pyro とかほかの PPL と比較してみたい
13. JuliaPy/PyCall.jl
This package provides the ability to directly call and *fully interoperate with Python* from the Julia language. You can import arbitrary Python modules from Julia, call Python functions (with automatic conversion of types between Julia and Python), define Python classes from Julia methods, and share large data structures between Julia and Python without copying them.
- GitHub - JuliaPy/PyCall.jl: Package to call Python functions from the Julia language]
- star: 804
- 分類: 一般
14. JuliaData/DataFrames.jl
Tools for working with tabular data in Julia.
- GitHub - JuliaData/DataFrames.jl: In-memory tabular data in Julia
- star: 772
- 分類: データサイエンス
15. malmaud/TensorFlow.jl
A wrapper around TensorFlow, a popular open source machine learning framework from Google.
- GitHub - malmaud/TensorFlow.jl: A Julia wrapper for TensorFlow
- star: 737
- 分類: 機械学習、深層学習
- メモ: master ブランチの最終コミットが2019年5月のため、ほぼ開発停止ステータスかも
16. FluxML/Zygote.jl
Zygote provides source-to-source automatic differentiation (AD) in Julia, and is the next-gen AD system for the Flux differentiable programming framework.
- GitHub - FluxML/Zygote.jl: Intimate Affection Auditor
- star: 716
- 分類: 科学技術計算、自動微分
- メモ: Julia は数式ライクにコードを書けるので、自動微分もできるとさらに見通しが良くなりそう
17.JuliaInterop/Cxx.jl
The Julia C++ Foreign Function Interface (FFI) and REPL.
- GitHub - JuliaInterop/Cxx.jl: The Julia C++ Interface]
- star: 568
- 分類: 一般
18.JuliaLang/PackageCompiler.jl
PackageCompiler is a Julia package with two main purposes: 1. Creating custom sysimages for reduced latency when working locally with packages that has a high startup time. 2. Creating “apps” which are a bundle of files including an executable that can be sent and run on other machines without Julia being installed on that machine.
- GitHub - JuliaLang/PackageCompiler.jl: Compile your Julia Package
- star: 564
- 分類: 一般
19. JuliaPlots/Makie.jl
From the japanese word Maki-e, which is a technique to sprinkle lacquer with gold and silver powder. Data is basically the gold and silver of our age, so let’s spread it out beautifully on the screen!
- GitHub - JuliaPlots/Makie.jl: High level plotting on the GPU.
- star: 555
- 分類: データサイエンス、可視化
20.JuliaNLSolvers/Optim.jl
Univariate and multivariate optimization in Julia.
- GitHub - JuliaNLSolvers/Optim.jl: Optimization functions for Julia
- star: 554
- 分類: 科学技術計算、最適化
21. FRBNY-DSGE/DSGE.jl
The DSGE.jl package implements the New York Fed dynamic stochastic general equilibrium (DSGE) model and provides general code to estimate many user-specified DSGE models.
- GitHub - FRBNY-DSGE/DSGE.jl: Solve and estimate Dynamic Stochastic General Equilibrium models (including the New York Fed DSGE)
- star: 542
- 分類: データサイエンス、経済学
22. JuliaStats/Distributions.jl
A Julia package for probability distributions and associated functions.
- GitHub - JuliaStats/Distributions.jl: A Julia package for probability distributions and associated functions.
- star: 531
- 分類: データサイエンス、確率統計
23. timholy/Revise.jl
Revise.jl allows you to modify code and use the changes without restarting Julia.
- GitHub - timholy/Revise.jl: Automatically update function definitions in a running Julia session
- star: 491
- 分類: 一般
24. JuliaData/JuliaDB.jl
JuliaDB is a package for working with large persistent data sets
- GitHub - JuliaData/JuliaDB.jl: Parallel analytical database in pure Julia
- star: 467
- 分類: データサイエンス、データベース
25. JuliaGraphs/LightGraphs.jl
LightGraphs offers both (a) a set of simple, concrete graph implementations — Graph (for undirected graphs) and DiGraph (for directed graphs), and (b) an API for the development of more sophisticated graph implementations under the AbstractGraph type.
- GitHub - JuliaGraphs/LightGraphs.jl: An optimized graphs package for the Julia programming language
- star: 459
- 分類: 科学技術計算、グラフ
- メモ: networkx を置き換えるもの
26. JunoLab/Weave.jl
Weave is a scientific report generator/literate programming tool for Julia.
27. JuliaGPU/CUDAnative.jl
Support for compiling and executing native Julia kernels on CUDA hardware.
28. cstjean/ScikitLearn.jl
ScikitLearn.jl implements the popular [scikit-learn](http://scikit-learn.org/stable/) interface and algorithms in Julia. It supports both models from the Julia ecosystem and those of the [scikit-learn library](http://scikit-learn.org/stable/modules/classes.html) (via PyCall.jl).
- GitHub - cstjean/ScikitLearn.jl: Julia implementation of the scikit-learn API
- star: 367
- 分類: データサイエンス、機械学習
- メモ: "ScikitLearn.jl borrows code and documentation from scikit-learn, but it is not an official part of that project." とのこと
29. memoiry/LightML.jl
LightML.jl is a collection of reimplementation of general machine learning algorithm in Julia. The purpose of this project is purely self-educational.
- GitHub - memoiry/LightML.jl: Minimal and clean examples of machine learning algorithms implemented in Julia
- star: 365
- 分類: データサイエンス、機械学習
30. JuliaOpt/Convex.jl
Convex.jl is a Julia package for Disciplined Convex Programming. Convex.jl can solve linear programs, mixed-integer linear programs, and DCP-compliant convex programs using a variety of solvers, including Mosek, Gurobi, ECOS, SCS, and GLPK, through MathOptInterface. It also supports optimization with complex variables and coefficients.
- GitHub - JuliaOpt/Convex.jl: A Julia package for disciplined convex programming
- star: 364
- 分類: 科学技術計算、最適化
まとめると
分類としては、こんな感じにまとめられそうです。
- データサイエンススタック(データフレーム、可視化、確率的プログラミング、対話的インターフェイス、データベース接続)
- 機械学習、深層学習
- 微分方程式、最適化、グラフなどの科学技術計算
- Python, C/C++ もしくは CUDA との連携
- web フレームワーク
Julia 言語公式ページの Ecosystem 欄に書かれている内容が star の数にほぼそのまま反映されている様子ですね。必要な内容がかなりカバーされているイメージを持ちました。
Julia は正しく書けば非常に高いパフォーマンスが発揮できることもあり、例えば従来 Fortran で書いていた微分方程式処理コードを現代的に見通し良くしたい、Python で書かれた RNN 等のニューラルネット内部のループ処理を高速化したい、MCMC を速くしたい、といった人がどんどん出てきているのかもしれません。
Julia 言語本体を除くと、上記の主要ライブラリでも star 数は 1k のオーダーということもあり、Python に比べユーザ規模がまだまだ桁違いに小さいのだなとも思いました。その利便性・ポテンシャルを鑑みると、これからもっと大きくなっていくのでしょう。