Rubyでデータサイエンスするための3つのアプローチ、DataScience.rbで考察

2017年6月14日(水)
高橋 正和

現在、データサイエンスにはPythonやRなどの言語が使われる。それに対してRubyでデータサイエンスをできるようにしようというワークショップ「DataScience.rb 〜ここまでできる Rubyでデータサイエンス〜」が5月19日に開催された。主催はSciRuby-jp、共催が株式会社Speeeしまねソフト研究開発センター一般財団法人Rubyアソシエーション

開催の趣旨としてSpeeeの村田賢太(mrkn)氏は、Rubyはデータサイエンスで使うには道具もユーザーも開発者も足りず、それがさらにネガティブフィードバックとなっていると指摘。そのためデータサイエンスでは使えない言語になっているという。

そこで、Rubyをデータサイエンスで使える言語にしたいというのが開催の意図だ。その方法として村田氏は「巨人の肩に乗る」「既存のgem(ライブラリ)をなんとかする」「Rubyのための仕組みを作っていく」の3つの手段を挙げた。

この3つのそれぞれに対応して、3つの発表がなされた。

Speeeの村田賢太(mrkn)氏(左)とRubyアソシエーションの笹田耕一氏(右)
Speeeの村田賢太(mrkn)氏(左)とRubyアソシエーションの笹田耕一氏(右)

最初の発表は、村田賢太氏が開発しているPyCallの紹介だ。PyCallは、Rubyの中からPythonの処理系を呼出す機構で、PythonのクラスやオブジェクトをRubyのオブジェクトとして扱える。これを使って、Pythonのデータサイエンス関連のライブラリをRubyの中から実行するという、「巨人の肩に乗る」手法だ。

発表は、Webの中でPythonなどのコードを対話的に実行する「Jupyter Notebook」と、Jupyter NotebookでRubyコードを実行するエンジンIRubyを使ってデモしながら行なわれた。また、参加者用にもDockerイメージやサンプルが公開され、実習しながら話を聞けるようになっていた。

デモでは、データ分析でよく例に使われるタイタニック号の乗客データから、PythonのSeabornライブラリとPandasフレームワークを使って、生存予測をする例を見せた。データ中のsurviveの値をほかのカラムから予測するモデルを作る。読み込んだデータを下処理してから、ランダムフォレスト法でモデリングし、カラム間の相関を調べた。

村田氏は最後に感想として、PandasやSeabornなどのPythonライブラリが使えるのは非常に便利だとコメントした。ただし、現状はRubyとしてやや不自然な記法になることも指摘。さらに、PythonではなくRubyからPyCallを使って処理する意義が必要になると語った。

PyCallの紹介
PyCallの紹介
タイタニック号の乗客名簿で試す
タイタニック号の乗客名簿で試す
生存に関係するカラムの結果
生存に関係するカラムの結果

2つ目は、西田孝三氏と三軒家佑將氏による発表で、Pythonと同様のことをRubyで実現する方法を調査するものだ。冒頭の3つの手段のうち「既存のgemをなんとかする」に相当するもので、2016年にRubyアソシエーションの開発助成を得たプロジェクトだ。

PythonのPandasのようなRubyライブラリにdaruがある。発表でも、Jupyter Notebook + daruを使って、赤ワインと白ワインのどちらが美味しいかを分析する例をデモした。

調査した結果として、Pandasに比べるとdaruは「かなり大変だった」という感想が語られた。まず、速度に顕著な差があるという。また、必要な機能がなく、たとえばデータサイエンスで大きな割合の時間を使う前処理の機能が足りないという。

その背景として、データサイエンスではPythonやRが使われRubyを使いたい人が少ないので、開発人材が不足することを指摘。打開するためには、Rubyの魅力を生かした用途が必要になるだろうとして、たとえばRailsやSinatraなどのWebアプリケーションと組み合わせるか、といったアイデアを挙げた。

西田孝三氏(左)と三軒家佑將氏(右)
西田孝三氏(左)と三軒家佑將氏(右)
赤ワインと白ワインを分析する例
赤ワインと白ワインを分析する例
プロジェクトの知見
プロジェクトの知見

3つ目は、須藤功平氏による、Apache Arrowの発表だ。Apache Arrowはデータ交換フォーマットの仕様とその実装だ。Apache Arrowを使うことで、たとえばPythonのプログラムでデータ処理した結果を効率よくRubyで利用できる。冒頭の3つの手段でいえば「Rubyのための仕組みを作っていく」にあたる。

Apache Arrowはビッグデータの交換を想定し、シリアライズやパースのコストゼロなのが特徴だ。各言語のバインディングがあり、特にPythonではPandasの開発者が積極的だという。そのため、Pandasで処理した結果をRubyで受け取って利用するといったことが容易になる。

須藤氏は、Pythonでファイルに出力したApache Arrow形式のデータをRubyやLuaなどで読むサンプルをデモ。また、Rなどで使われるFeatherフォーマットや、Hadoopなどで疲れるParquetフォーマットと組み合わせるなど、さまざまな言語やサンプルでデモした。さらに、受け取ったデータをRubyで処理する例として、全文検索エンジンのGroongaをデモした。

須藤氏は最後に「いちどArrowにすればいろいろなデータになる」として、Rubyでのデータ処理の実現を目指す「Red Data Toolsプロジェクト」を作ったことを紹介した。

須藤功平氏
須藤功平氏
Apache Arrow形式のデータをRubyで読むサンプル
Apache Arrow形式のデータをRubyで読むサンプル
PythonでApache Arrow形式のファイルを出力しRubyで読み込むデモ
PythonでApache Arrow形式のファイルを出力しRubyで読み込むデモ
Red Data Toolsプロジェクト
Red Data Toolsプロジェクト

(編注:2017年6月14日14時00分更新)誤字を修正しました、お詫びして訂正致します。

フリーランスのライター&編集者。IT系の書籍編集、雑誌編集、Web媒体記者などを経てフリーに。現在、「クラウドWatch」などのWeb媒体や雑誌などに幅広く執筆している。なお、同姓同名の方も多いのでご注意。

連載バックナンバー

仮想化/コンテナイベント

KubeCon報告からKubernetes対応版Dockerまで、Docker Meetup Tokyo #20開催

2018/1/30
コンテナーに関する勉強会「Docker Meetup Tokyo #20」が、2017年12月14日に開催された。11月に開催された「Docker Meetup Tokyo #19」に続く回となった。
仮想化/コンテナ

Red Hatが示したOpenShiftの将来とは

2018/1/24
Red Hatが推進するコンテナープラットフォームであるOpenShiftの1dayカンファレンスが開催された。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています