- SciRuby projectにはRubyでデータサイエンスを行うための「部品」となるGemはあるが各Gemが未熟だったり、そのGemを組み合わせ初心者が「ワークフロー」として使えるような「環境」や「ドキュメント」が整っていない
- 具体的には初心者がWindowsやMacでインストールできない、実用的なワークフローを実現したドキュメントが無い、各部品のドッグフーディングが足りておらず未熟、といった問題がある。
- Windows, Mac, Ubuntu での確実にインストールできる方法の提供
- ワークフローとしてのGem利用の統合、Gem間のコネクター機能の追加
- ワークフローテスト時に判明する不足機能の追加、バグ取り
- データサイエンス入門の言語選択肢の一つにRubyが食い込むための基盤となるワークフローの実例が生まれる
- データサイエンスはここ数年で突如現れ世間の注目を集めている,最も人気があり利益を上げている技術分野である.
- この技術分野で用いられている2大プログラミング言語はRとPythonであり,Rubyは後塵を拝している.
- 本プロジェクトはデータサイエンス分野におけるRuby利用を推進するための情報基盤の構築を目的としている.
- 具体的には,表形式のテキストデータ入力を始めとし基礎的なデータ解析,そして可視化まで行うRubyを用いたワークフローシステムの整備と構築を行う.
- インストールのためのパッケージングの改善もこれに付随して行う
-
Rubyには図1のようにワークフローを構成するためのパーツとなるGemは散在しているものの各ツールを組み合わせ実用的なフローとして一通りの解析を行うための整備が未だ行われていない.
-
具体的な目標は下記になる
- ワークフローを通してデータを扱うクラス(詳細は後述するデータフレーム)の統一.
- データフレームの内容を可視化,確認するためのウェププラウザーベースのプログラミング環境(詳細は後述するJupyter Notebook)の整備
- パーツとなる各Gemの改善 (連携が想定されていないものに対する機能追加,また[テストというよりも]ドッグフーディング不足による未熟箇所の修正)
-
本プロジェクトではデータ解析に初等統計を想定したワークフローを完成させ,Rubyを用いたデータ解析環境の土台となる実例を築き上げることでこの分野でのRuby活用推進を図る.
- 図1の各プロセスにおいて我々が想定しているものは下記になる.
- データ操作: csv 表形式テキストの読み込みと前処理
- 統計解析: 2サンプルの平均値の差の比較検定 (T-test)
- 可視化: Javascript と連携するグラフ描画
- 現状これらの各プロセスを実現するGemが無いわけではない。データ操作部には"Daru", 統計解析部には"Statsample",可視化部には”Nyaplot"というGemが存在する。
しかし初心者がこれらを統合しワークフローとして扱うことは「不可能」である。それは下記が足りていないためである。
- Windows, MacOSのサポート (特にJupyter Notebook)
- 各Gemの機能,完成度 (特にNyaplotは置き換えの必要性あり)
- 各Gemの連携 (可視化部は新たなGemに置き換える必要があり、そのGemと既存Gemとの連携)
- 「現状何が無いのか」に対応し下記を行う.
- ワークフローに含まれるGemすべてでWindows, MacOSのサポートを行う
- Nyaplotに代わる新たな可視化部Gemのワークフローへの導入
- プロセス結合箇所に不足している機能の追加 (可視化バックエンド)
- 実例志向のドキュメントの追加
- また本プロジェクトでは意図的に統計解析箇所には労力を注がないよう計画している.
- それは我々が村田賢太氏によるもう一つのSciRubyプロジェクトの概要を把握しているためである.
- 村田氏のプロジェクトはPython言語の既存資産をRubyで活かすものであり,特に解析(統計に限定されない)プロセスにおける機能の改善が期待できる.
- そしてその解析プロセスの改善はデータ操作プロセスや可視化プロセスと比して容易ではない.
- 本プロジェクトは村田氏のプロジェクトと競合するものではなく,相乗効果が期待できるものである.
本節では我々が掲げるワークフローの整備と構築のために行う具体的な内容と背景と共に述べる.
- 表形式のデータを読み込み,必要な部分を抽出するためのデータフレームと呼ばれる概念とそのイディオムがPythonやRといったプログラミング言語のコミュニティでは広く知れ渡っている.Rubyにおいてもデータフレームを実装したDaruがある.
- DaruはPythonのデータフレーム実装パッケージPandasと比較することまだ未熟な点がある (https://github.com/sciruby-jp/survey) .我々はワークフロー実行に必要な機能の追加,バグ取りをDaruに対し行う.
- ワークフローの実行はJupyter Notebookと呼ばれるソフトウェアを用い,ウェブブラウザ上でインタラクティブに実行することがPythonでは一般化している.
- Jupyter Notebookは文芸的プログラミング環境の一つと捉えることが可能であり,ワークフローの情報共有,再現性,改変性に大きく貢献しているだけでなく計算結果の可視化もnotebook内にパックすることが可能である.
- Jupyter Notebook はカーネルと呼ばれるプログラミング言語実行部が任意の言語に置き換え可能となっており,RubyにおいてもIRubyと呼ばれるカーネルが存在する.
- しかしながらRubyにおいてはPythonほどJupyter Notebookの活用が進んでいない.これにはWindowsサポートの未整備が大きく起因している.
- 我々はWindowsでのIRubyの利用を推進するために依存GemのFat Gem作成,もしくはUbuntu on Windowsを用いたパッケージ環境の改善を行う.
- 初等統計解析ワークフローに必要な統計解析機能は Statsample (https://github.com/sciruby/statsample) に実装されているものの,ここでもIRuby同様インストールの困難さが入門者の利用を阻んでいるため,その改善を行う.
- Statsampleの利用者の数はPythonにおける類似パッケージStatsModelsと比較して少ない.Statsampleに限らずSciRubyのGem群はドッグフーディングが不足している.我々はStatsampleから得られる結果の正当性の検証も行う.
- Nyaplotは西田直樹氏が開発したデータ可視化用gemである.
- NyaplotにおいてRubyが行っていることは少なく,実質可視化を担当しているのはJavaScriptで書かれたNyaplotjsである.
- そのためこのgemのメンテナンスにはRubyよりもJSの力が要求される問題がある.
- Rbplotly (https://github.com/ash1day/rbplotly) はPlotly.py (https://github.com/plotly/plotly.py) のRuby版として芦田恵大が作成したgemであり,このプロジェクトのワークフローの可視化部でNyaplotに代わるものとして我々が普及を図るものである.
- Plotly.pyはPlotly.js (https://github.com/plotly/plotly.js) のPythonラッパーであり,Rbplotlyは同様のRubyラッパーである.
- Plotly.js はオープンソースのチャート生成ライブラリであり,https://plot.ly/ は Plotly.jsをホストし付加価値を付けたウェブサービスである.そのサービスは科学技術系出版ウェブサービスとも連携し活用されている (https://www.overleaf.com/blog/201-reproducible-and-collaborative-data-science-overleaf-links-with-plotly) .
- RubyGems.orgには他にもPlotly用のGemはあるものの,PlotlyのAPIではなくローカルのPlotly.jsをオフラインモードで利用可能としたのは芦田のRbplotlyのみである.
- Plotly.jsは活発に開発されており,RbplotlyではNyaplotのようにJS部を自前開発することによる負担がない.またPlotly.jsは我々のワークフローに必要十分な機能を備えている.チャートの質の点からもNyaplotの代替としてRbplotlyの開発を進めることには意義がある.
- また我々は村田氏のmatplotlib.gem作成の計画も把握しているが,これはRbplotlyと競合するものではない.matplotlibが静的イメージを作るものであるのに対しplotlyはインタラクティブなイメージを作るためである.
- Rbplotlyに対して具体的には最低限Bar Plot,Histogram,Line Plot,Scatter Plot,Box Plotのラップを行う.
- Daruのデータフレームはデータ操作部だけでなく統計解析部でも入出力のクラスとして利用される.
- しかし可視化部のRbplotlyはまだデータフレームとの連携ができるようにはなっていない.
- Daruにはプロット用バックエンドを変更するための仕組みが用意されており (https://github.com/v0dro/daru/tree/master/lib/daru/plotting),この仕組みを活用することでより円滑なワークフローの実行が可能となる.
- Daruのデータフレームクラスのplotメソッド実行時にRbplotlyを活用することを実現したものとして,三軒家佑將が作成した https://github.com/genya0407/daru_plotting_plotly があり,これを基に我々はDaruのプロット部の拡張を行う.
ワークフローはオライリー社書籍「Foundations for Analytics with Python」の第7節までをRubyで模したものを実現する.
- 本プロジェクトは根本的に「無い」Gemを作るものではなく,基本的には「ある」Gemを整備,統合して「ワークフロー」として構築するものである.
- そのため新たなGemの創出といったような華々しさはなく(ただしrbplotlyはこの限りではない),地味な作業(バグ取り,細かな機能追加,パッケージング,ワークフロー構築のための連携配慮,実例志向のドキュメント)がほとんどである.
- しかしこの地味な作業の徹底がSciRubyのGem群には不足しており,またデータサイエンス分野でのRuby活用の普及に最も重要である.
- 11月末まで: データ操作部の開発
- 12月末まで: 統計解析部の開発
- 1月末まで: 可視化部の開発
- 2月末まで: ワークフロー全体の構築
- ワークフローを記述したJupyter Notebook
- ワークフローの内容はオライリー社書籍「Foundations for Analytics with Python」を模した物
- Rbplotlyの改善版
- DaruのプロッターへのRbplotlyの追加
- ワークフローに関わるGemのドキュメント(の改善物),インストール方法の改善