西田 直樹
西田 直樹
2013年4月 大阪大学 基礎工学部 入学
2013年8月 セキュリティキャンプ2013 セキュアなシステムを作ろうクラスに参加
2014年2月 SECCON2013全国大会出場
2014年5月-9月 Google Summer of Code 2014にてSciRubyに参加、データ可視化ライブラリNyaplot 1 2 を製作。
2014年5月-現在 理化学研究所高橋研究室にE-Cellプロジェクト の開発補助のためパートタイム勤務。業務内容は主にシミュレータと連携するビジュアライザの開発
DataFrameの開発による科学用途のgem開発の促進
Nyaplotは私がGoogle Summer of Code 2014でSciRubyコミュニティの支援により製作したデータ可視化用ライブラリである。今回はこのNyaplotの一モジュールとして実装されているDataFrameにデータの解析を行う機能を付け、DataFrame gemとして切り出すことを目標とする。
NyaplotはJavaScriptのデータ可視化用ライブラリd3.jsとWebGLのラッパであるTHREE.jsをバックエンドとしたデータ可視化用ライブラリである。その強みはIRuby notebookとの密な連携による対話的なプロットの作成、そしてWebへの出力の容易さである。例えば解析に用いたコードとプロットの結果、MarkdownやTeXで書かれた追加の説明文を含むnotebookファイルをdropboxなどを通じてアップロードし、nbviewerと呼ばれるサービスを使ってWeb上で閲覧できる。またnotebook作成時に書いたコードに加えerbテンプレートに数行書き足すことでRuby on RailsやSinatraといったRuby製WebフレームワークからNyaplotを呼び出すことができる(https://github.com/domitry/sinatra_nyaplot)。データの解析・可視化とWebへの公開をRubyで一貫して行えるのはNyaplotの大きな強みである。
NyaplotがIRubyとの併用で目指す未来はRの築いた解析ツール・可視化ツールのエコシステムである。例えばRstudioを使うことでRのコード、データフレーム、そしてggplot2やqplotによる可視化が一画面に表示でき、解析と可視化を統一して行うことができる(https://www.youtube.com/watch?v=Yfq1VyMkMV0)。 Pythonもこれに追随しており、IPython notebookの開発、そしてmatplotlibのIPythonへの対応によりその目的は果たされつつある。 さらにゲノム科学においては解析と可視化がすべてGUIで完結するepivizrなど新しい流れもできつつある。
現在Nyaplotは実用レベルに達しており、実際に研究に活用された例もある。しかしR・Pythonと比較してRubyの科学利用の現状は上述のエコシステムの形成には至っておらず、問題を抱えている。最も重要な問題として解析部分と可視化部分が明確に分離されていないことがある。IPython notebook中でのmatplotlibの活用、そしてRのepivizrなど新しい流れへの対応はすべて解析・可視化の明確な分離によって成り立っている。R・Pythonにおいては解析が行いたいユーザーは解析のためだけのライブラリを開発し、可視化を行いたいユーザーは可視化のためのライブラリを開発している。翻ってRubyを見ると、科学分野のgemは全てこの分離に関する問題を抱えていると考える。例えばデータ解析用のgemであるStatsample, 地球科学向けのGfdnavi, そしてゲノム科学向けのBioRubyまでもがすべて自前の可視化モジュールを備えている。このように解析・可視化の分離が不十分であり、特定用途の小さなgemが作りにくなっていることが科学用途のgemの連携によるエコシステムの形成につながっていない原因ではないかと考えた。
今回提案する「Nyaplot::DataFrameの機能拡充・Nyaplotからの分離」では上記の解析・可視化の明確な分離の先駆けを目指す。DataFrameとは数値や文字列から成る行列で、行と列それぞれについた名前(ラベル、Index)を使ったデータのマニピュレーション、簡単な統計計算の適応を行・列単位で行う特徴を持つクラスである。DataFrameが持つこれらの機能はデータサイエンス分野で必須の機能であり、Pythonはpandasパッケージ、R言語は言語自体がDataFrame機能を持ち、広く用いられているがRubyにはこれらに相当するgemが存在しない。
現在のNyaplotにはDataFrameが実装されているがその機能は上記の内、行と列への名前付け、データのマニピュレーションに留まっている。そして可視化に必要な統計処理の機能はJavaScriptのライブラリ、d3.jsに依存している状態である。例えばヒストグラムのピボットの計算、箱ひげ図に必要な三分位数などの算出をJavaScriptに依存している。この状態では解析・可視化機能の分離は不可能である。そこで今回はこれら解析の機能をDataFrameにRubyで実装し新しいgemとして分離すること、そして可視化・解析の分離とDataFrameの実装が有用である証明としてNyaplotに小さなWebインターフェイスを実装することを目標とする。
具体的にはNyaplot::DataFrameに備わっている有用な機能(ラベル付けやデータのマニピュレーション、IRuby notebook上で実行した際のtable表示)を残した上で、統計処理の機能をStatsampleのdatasetからportingし、別のgemとして切り出す。そして新しいDataFrameを用いて前述のepivizrのようにブラウザに表示されたGUIからDataFrameにデータ解析を指示するようなインターフェイスを実装する。
Milestoneは以下のように設定する。
- 10/18 - 12/26 Statsampleからの統計機能のporting, DataFrame gemの切り出し
- 10/27 - 2/27 NyaplotへのGUIの実装とそれに伴うDataFrameの機能拡充
実現可能性については楽観的でよいと考える。Nyaplotは10月から11月の間にSciRubyプロジェクトに取り込まれる予定であり、その際に私もSciRubyのメンバーとなる予定である。DataFrameを実装する上で必要なStatsample, DataFrameのデータストレージとなるNMatrixは双方ともSciRubyコミュニティで開発・メンテナンスが行われており、実装の際には十分な支援が受けられると見込んでいる。またSciRubyコミュニティは他にも数値計算用のRuby-GSL, 積分計算, 最適化問題のソルバを実装したIntegrationやMinimizationを開発しており、解析・可視化の分離の恩恵をすぐに適応できると考えている。
またBioRubyプロジェクトの後藤直久氏、西田 孝三氏が当プロジェクトのメンターとなる予定である。
- Nyaplot::DataFrameをベースとした新しいDataFrame gem
- DataFrameを利用した、解析・可視化を取りまとめるWebインターフェイス