助成金の期間の内、中間報告までに以下の3つのgemにそれぞれコミットした。
データ可視化ライブラリNyaplotのモジュールだったNyaplot::DataFrame
を分離し独立したgem、Mikonとして公開した。
Nyaplot::DataFrame
ではデータストレージとしてRuby標準のArrayを使っていたが、MikonではSciRubyで開発されている多次元配列ライブラリNMatrixに切り替え高速化を図った。
これによりMikonはNMatrix v0.1.0以上に依存することとなったが、NMatrixは未だ不安定でNyaplotなど他のライブラリに依存させるには不安がある。 そこで最終報告までにNMatrixへの依存をなくした軽量版のリリースを予定している。
Mikonに統計ライブラリStatsampleのデータ構造と互換性のあるAPIを実装することで、StatSampleの持つ多くの統計関数をMikon::DataFrameに適応できるようにした。
1カラムとインデックスからなるデータ構造Mikon::Series
とStatSample::Vector
の互換性はほぼ完全であるが、それらをまとめたMikon::DataFrame
とStatSample::Dataset
の互換性は不十分であり、重回帰分析などいくつかの統計関数は未だ適応できない。
こちらを最終報告までに実装し、互換性をより確かなものにする予定である。
Mikonのデータ構造を簡単に操作するDSLを実装した。 例えばこのデータフレームから2012年度のデータを取り出すにはカラムの名前を用い、以下のようなコードを書く。
df1.select{year==2012}
その他にも試験的ではあるがpivot機能など様々なAPIを実装した。 詳細はIRuby notebookにまとめた。
データ可視化用gem, NyaplotのAPIを内部で呼び出すことで、データフレームを可視化するメソッドを実装した。 例えば以下のコードで折れ線グラフを表示できる。
require 'mikon'
arr1 = ([0]*100).map{rand-0.5}.reduce([0.0]){|memo, val| memo.push(memo.last + val); memo}
arr2 = ([0]*100).map{rand-0.5}.reduce([0.0]){|memo, val| memo.push(memo.last + val); memo}
df = Mikon::DataFrame.new({a: arr1, b: arr2})
df.plot
現状では折れ線グラフ、ヒストグラム、箱ひげ図、散布図をサポートしている。 詳細はIRuby notebookにまとめた。
IRubyはブラウザ上のフロントエンド・Pryを利用したバックエンドより構成されるRuby実行環境である。
中間報告までに、当初の計画より前倒しでWidgets機能をポーティングした。 これによってIRubyのフロントエンド・バックエンド間での双方向通信が可能になり、RubyでR言語のepivizrのようなGUIを実装する道を開いた。 参考として二重振り子の運動方程式をODE solverで解いた結果をリアルタイムにIRuby上で表示する例を挙げる。
Nyaplot::DataFrame
をMikon::DataFrame
に完全に切り替え、ヒストグラムなど計算部分をRubyで行うようにする予定であったが、IRuby::Widgets
の実装を優先しこちらは後回しとした。
こちらはMikonの軽量版を実装した後、最終報告までに完成させることとする。