(随時更新予定)こんなにも有る!?データ分析、機械学習、Deep Learning用OSSの数々

業務でデータ分析、機械学習、Deep Learning用OSSについて調査しました。少し調べただけでも多数のOSSが見つかりました。以前から使ってる物から名前は聞いたことが有るけれども実体をあまり知らなかった物まで有ったので一覧表にしてまとめることにしました。今回の調査は時間が少なかったので漏れが有りそうです。。。今後随時更新していこうと思います。

# 【参考】ライブラリ、ソフトウェア、ツールのシェア
[参考ページ](https://www.kdnuggets.com/2019/05/poll-top-data-science-machine-learning-platforms.html)にデータサイエンス、機械学習の分野で利用されているライブラリ、ソフトウェア、ツールのシェア状況[^poll]が掲載されていました。

![lib2019.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/02c96bb2-5b56-432f-f4ac-ae8779b33ff7.jpeg)
図1: KDnuggets Analytics/Data Science 2019 Software Poll: 2017～2019年のトップツールシェア

表1: 2017～2019年ツールシェア詳細

|Software|2019 %share|2018 %share|2017 %share|
|:---|:---|:---|:---|
|Python|65.8%|65.6%|59.0%|
|RapidMiner|51.2%|52.7%|31.9%|
|R Language|46.6%|48.5%|56.6%|
|Excel|34.8%|39.1%|31.5%|
|Anaconda|33.9%|33.4%|24.3%|
|SQL Language|32.8%|39.6%|39.2%|
|Tensorflow|31.7%|29.9%|22.7%|
|Keras|26.6%|22.2%|10.7%|
|scikit-learn|25.5%|24.4%|21.9%|
|Tableau|22.1%|26.4%|21.8%|
|Apache Spark|21.0%|21.5%|25.5%|

表2: 主要なDeep Learningプラットフォームのシェアの変動(2018年,2019年比較)

|Platform|2019 %share|2018 %share|%change|
|:---|:---|:---|---:|
|Tensorflow|31.7%|29.9%|<font color="RED">+5.8%</font>|
|Keras|26.6%|22.2%|<font color="RED">+19.7%</font>|
|PyTorch|11.3%|6.4%|<font color="RED">+75.5%</font>|
|Other Deep Learning Tools|5.6%|4.9%|<font color="RED">+15.2%</font>|
|DeepLearning4J|2.5%|3.4%|<font color="BLUE">-25.6%</font>|
|Apache MXnet|1.7%|1.5%|<font color="RED">+13.1%</font>|
|Microsoft Cognitive Toolkit|1.6%|3.0%|<font color="BLUE">-45.5%</font>|
|Theano|1.6%|4.9%|<font color="BLUE">-67.4%</font>|
|Torch|0.9%|1.0%|<font color="BLUE">-6.1%</font>|
|TFLearn|0.7%|1.1%|<font color="BLUE">-34.7%</font>|
|Caffe|0.6%|1.5%|<font color="BLUE">-58.3%</font>|

Pythonの人気は堅調という印象を受けます。後Excelが思いの外使われている印象です。。。Deep Learningの分野では矢張りTensor Flowが圧倒的です。Kerasはtf.kerasとしてTensor Flowに取り込まれた為、両者合わせるとシェアの6割弱を占めます。PyTorchは急成長しており、着実にTensor Flow(+Keras),PyTorchの2強体制に向かいつつあります。

# こんなにも有るOSS
データ分析、機械学習系のOSSは調査を始めてみるとちょっと調べただけでもそれはそれは多数見つかりました。。。調べて出て来た物を一覧にまとめました。(言語とツールが混ざっていますが、今後改善を検討します。)既に知っていて利用している物も有りますが、名前を聞いたことが有るという程度のOSSも多数見つかりました。また、筆者が知らなかっただけで、今回調査して詳しく知ったOSSの中には現在進行形で盛んに開発が行われている物も有りました。今後も以下の表を随時更新していこうと思います。

|OSS名|言語|概要|ライセンス|GitHubスター数[k]|GitHub公式リポジトリ|公式HP|
|:---:|:---:|:---|:---|:---:|:---|:---|:---|
|Pandas|Python|Pythonにおいて、データ解析を支援する機能を提供するライブラリである。特に、数表および時系列データを操作するためのデータ構造と演算を提供する。デ|BSD3|25.5|https://github.com/pandas-dev/pandas|https://pandas.pydata.org/|
|SciPy|Python|Pythonで主に数値計算や科学技術計算を行うためのライブラリ。確率モデルの計算にも対応する。|BSD3|7.3|https://github.com/scipy/scipy|https://www.scipy.org/|
|R|R|オープンソース・フリーソフトウェアの統計解析向けのプログラミング言語及びその開発実行環境である。**データ分析の世界ではPythonに次いで利用されている。時系列分析に強いことも特徴**|GNU 2.0|-|GitHubリポジトリ無し|https://www.r-project.org/|
|scikit-learn|Python|Pythonの機械学習ライブラリである。SVM、ランダムフォレスト、Gradient Boosting、k近傍法、DBSCANなどを含む様々な分類、回帰、クラスタリングアルゴリズムを備えており、数値計算ライブラリのNumPyとSciPyとやり取りするよう設計されている。**Python、機械学習のデファクトスタンダート的なOSSであり、2012年11月に「well-mantained and popular (よくメンテナンスされており、広く使われている)」と評されている。**|BSD|41.3|https://github.com/scikit-learn/scikit-learn|https://scikit-learn.org/stable/|
|statsmodels|Python|Pythonで様々な統計モデルを扱えるライブラリ。Pythonで時系列モデル(ARIMA等)を扱う場合はこのライブラリを用いる。**但し、リポジトリの更新がここ数ヶ月あまり無く、コミュニティーの開発意欲が下がっているの可能性が有る。加えて日英双方で資料が少ない。**|BSD3|5.3|https://github.com/statsmodels/statsmodels|https://www.statsmodels.org/stable/index.html|
|RapiMiner|Java(Python版も有)|RapidMinerは、機械学習、データマイニング、テキストマイニング、特徴選択、予測分析、経営分析などを扱うソフトウェア及びその開発元会社である。研究や教育や産業分野、ラピッドプロトタイピングやソフトウェア開発の場で利用されている。**OSS版の開発はここ数年ストップしている可能性が有る。**|AGPL3(無償版)|0.112|https://github.com/rapidminer/rapidminer-5|https://rapidminer.com/|
|Apache Spark|Scala|Apache Sparkはオープンソースのクラスタコンピューティングフレームワークである。カリフォルニア大学バークレー校のAMPLabで開発されたコードが、管理元のApacheソフトウェア財団に寄贈された。Sparkのインタフェースを使うと、暗黙のデータ並列性と耐故障性を備えたクラスタ全体をプログラミングできる。MLlibを同梱|Apache2.0|26.6|https://github.com/apache/spark|https://spark.apache.org/|
|PySpark|Python|SparkのPython版|Apach2.0|26.6|https://github.com/apache/spark/tree/master/python/pyspark|https://spark.apache.org/|
|Weka|Java|Weka は、ニュージーランドのワイカト大学で開発した機械学習ソフトウェアで、Javaで書かれている。|GNU|0.092|https://github.com/Waikato/weka-3.8|https://www.cs.waikato.ac.nz/~ml/weka/|
|Eland|Python|Elasticsearchにおけるデータフレーム、ビッグデータ、機械学習及びETLをPythonで扱うためのクライアント及びツールキット群|Apache2.0|0.064|https://github.com/elastic/eland|https://www.elastic.co/guide/en/elasticsearch/client/eland/current/index.html|
|PyCaret|Python|An open source low-code machine learning library.を謳っているライブラリ。学習させたいデータセットを用意すれば、最低限のプログラミングで様々な機械学習モデルにデータを適用した結果を評価し、性能の高いモデルのアンサンブルまで自動的に実行出来る。**所謂AutoMLと呼ばれる技術**|MIT|1.1|https://github.com/pycaret/pycaret|https://pycaret.org/|
|Caret|R|Caretは本来Rのライブラリとして開発されたためこちらが本家。GitHubスター数が少ないのそのため。機能はPyCaretと同様。|MIT|0.008|https://github.com/cran/caret|https://topepo.github.io/caret/|
|Stan|Stan|StanはC++で書かれた統計的推論のための確率的プログラミング言語。 Stan言語では、対数確率密度関数を計算する命令型プログラムを使用して、 統計モデルを実装できる。 アンドリュー・ゲルマンらによって開発され、 モンテカルロ法の先駆者であるスタニスワフ・ウラムにちなんで名付けられた。ベイズ推論に特化した機能も実装されている。|BSD3|1.9|https://github.com/stan-dev/stan|https://mc-stan.org/|
|PyStan|Python|StanのPython版。Stan同様にベイズ推論に特化した機能が実装されている。|GPL3|0.824|https://github.com/stan-dev/pystan|https://mc-stan.org/|
|Elasticsearch|Java|ElasticsearchはLucene基盤の分散処理マルチテナント対応検索エンジンである。オープンソースソフトウェアだが、現在はオランダ・アムステルダムに本社を置くElastic社が中心になって開発が進められている。|Elastic|49.6|https://github.com/elastic/elasticsearch|https://www.elastic.co/jp/elasticsearch/|
|Julia|Julia|汎用プログラミング言語水準から高度の計算科学や数値解析水準まで対処するよう設計された高水準言語かつ仕様記述言語、及び動的プログラミング言語である。|MIT|28|https://github.com/JuliaLang/julia|https://julialang.org/|
|Tensor Flow|主にPython|Googleが開発しオープンソースで公開している、機械学習に用いるためのソフトウェアライブラリである。Deep Learningに特化している。|Apache2.0|146|https://github.com/tensorflow/tensorflow|https://www.tensorflow.org/|
|Keras|Python|Kerasは、Pythonで書かれたオープンソースニューラルネットワークライブラリである。MXNet、Deeplearning4j、TensorFlow、CNTK、Theanoのラッパである。|MIT|48.8|https://github.com/keras-team/keras|https://keras.io/|
|Apache MXNet|Python|DNNのトレーニングと展開に使用されるOSSのDeep Learningフレームワーク。スケーラブルで高速なモデルトレーニングを可能にし、柔軟なプログラミングモデルと複数のプログラミング言語をサポート。|Apache2.0|18.8|https://github.com/apache/incubator-mxnet|
|PyTorch|Python|PyTorchは、コンピュータビジョンや自然言語処理で利用されているTorchを元に作られた、Pythonのオープンソースの機械学習ライブラリである。最初はFacebookの人工知能研究グループAI Research labにより開発された。|修正BSD|39.9|https://github.com/pytorch/pytorch|https://pytorch.org/|
|Kubeflow|Python|David Aronchick、Jeremy Lewi、Vishnu Kannanによって共同設立された無料のオープンソース機械学習プラットフォームであり、Google、Arrikto、Cisco、IBM、Red Hat、CoreOS、CaiCloudの開発者によって構築された。|Apache2.0|9.1|https://github.com/kubeflow/kubeflow|https://www.kubeflow.org/|

# まとめ
調査前から多数のOSSが有ることは前提知識として知っていましたが、改めてまとめてみると数も多く大変でした。今回は開発が中止になったOSS(例:Theano,Torch7,Chainer等)は取り上げませんでした。但し、まだまだ漏れが有ると思われますので、随時追記していこうと思います。また、コメント欄でご教示頂けますと幸いです。


[^poll]: The 20th annual KDnuggets Software Poll1,800名を対象に行った調査