CodeIQ MAGAZINECodeIQ MAGAZINE

Rubyでデータサイエンスができるのか?ワークショップ「DataScience.rb」に参加した

2017.05.23 Category:【連載】池澤あやか☆勉強部 ,勉強会・イベント Tag: , ,

  • 154
  • このエントリーをはてなブックマークに追加

データサイエンスといえば、Python。
でも「せっかくなら使い慣れたRubyでも機械学習できたらいいのにな」そう思っているRubyistも多いのではないでしょうか。
5月19日にSpeeeにて開催されたRubyでのデータサイエンスを試みたワークショップ「DataScience.rb」に、私池澤が参加してきました。
by 池澤あやか

なぜRubyでデータサイエンスは行われないのか?

最初に登壇したのは、Rubyのコミッターであり、Speeeのエンジニアでもある村田賢太さん。「Rubyでデータサイエンスやろう!」と言い出した張本人です。

株式会社Speee 村田賢太さん
CRubyコミッタ。bigdecimalメンテナ。pycall開発者。

なぜRubyでデータサイエンスは行われないのか。

それはRubyが言語として劣っているからというわけではありません。村田さんが指摘したのは、ツールやユーザー、開発者が足りないこと。

Pythonでやりたいことができるなか、わざわざRubyでのデータサイエンスを目指す取り組みに投資する企業も少ないという原因もありそうです。

Rubyでデータサイエンスをするためにはどんな手段が存在するか

Rubyでデータサイエンスするために、村田さんが考える主な手段は3つ。「巨人の肩に乗る、つまりPythonに乗っかること」「既存のgemをなんとかすること」「Rubyのための仕組みをつくっていくこと」。

このワークショップでは、この手段それぞれに対する試みについてのプレゼンテーションとデモが行われました。

会場となった『Speee Lounge』。淹れたての美味しいコーヒーをいただきました。

Rubyライブラリ「PyCall」を使ってデータサイエンス!

イントロダクションからの続投で、村田さんによるプレゼンテーション。村田さんの取り組みは「巨人の肩に乗る、つまりPythonに乗っかること」。

簡単に言えば、「Pythonで使う機能をRubyから使っちゃおう!」というものです。

村田さんが今も絶賛開発している「PyCall」は、Rubyからlibpython.soを使うための拡張ライブラリ、つまり、Rubyの文法でPythonの機械学習で使う機能が使えるようにしたgemです。

ワークショップでは、現在開発中のもののデモを行いました。

PyCallはデータサイエンスでよく使用される「Jupyter Notebook」上でも動作します。Jupyter Notebookはブラウザ上で使える、Rubyでいうとirbのようなものです。

irbとの違いは、実行結果の出力において、画像オブジェクトは画像として表示できたり、データを表やグラフとして表示することができたりする点です。多くのデータサイエンティストはこのアプリケーションを使ってデータ解析をしています。

PyCallを使えば、例えば、機械学習でよく使われる、行列のような複雑な計算を効率よくできるPythonライブラリ「NumPy」もRubyから使えるようになります。

また、データ操作のためのPythonライブラリ「pandas」もRubyから。

もちろん、機械学習用のライブラリscikit-learnも使うことができます。

デモでは、これらのPythonライブラリをRubyから使い、タイタニック号の乗客データを用いた乗客の生存予測を行いました。

どの要素がどのくらい生死に寄与しているかをseaborn の barplot を使ってグラフ化している。

PyCallおよび今回のデモプログラムは、GitHubから落として自分の環境で試すことができます。

PyCallは、ラッパー未実装による不自然な記法が残っていたりと、まだ実現したいことすべてを実装できているわけではないのだそう。

そのあたりは村田さんによると「9月に行われるRubyKaigiまでには使えるようにする」「今年中には深層学習まで行えるようにしたい」そうです。楽しみですね!

現在のPyCallの位置づけとしては、PythonでできるものならPythonを使ったほうがよいけれど、Rubyのプロジェクト上でデータ分析処理をしたい場合は選択肢になりうるはずとのこと。

また、CPythonよりCRubyの方が速いので、ツールが揃ってくれば、将来的にはRubyでデータサイエンスした方が速くなるかもという期待もあります。

Rubyの既存のgemはデータサイエンスに耐えうるか?

続いては、「既存のgemをどうにかする」ことを目標にしたプロジェクトを進めていた、西田孝三さんと三軒家佑將さんによるプレゼンテーションです。

左:西田孝三さん Ruby Association Grant 2016、PyData Osakaオーガナイザー / 右:三軒家佑將さん Ruby Association Grant 2016

このプロジェクトは、Ruby Association開発助成により進められたものなのだそう。

データサイエンスを3つのステージに分割すると、「前処理」「分析」「可視化」の3ステージに分けることができます。

Pythonでは、前処理をpandasが、分析をscikit-learnやSciPy、StatsModelsが、可視化をMatplotlibが担っています。

これをRubyで代替すると、前処理をdaruが、分析をStatsampleが、可視化はrbplotlyが担うということになりそうですが、書き出してみてもPythonに比べるとツールの少なさが際立ちます。

このプロジェクトでは、既存のgemを使ったワークフローのテストやドキュメントの作成、それに伴うリファクタリングや改善を行う予定でした。

しかし、西田さんと三軒家さんによると、daruがpandasに比べて思った以上に機能が足りておらず、サンプルデータの簡単な分析程度はできるものの、さまざまなケースの前処理を想定した実用は少し難しいかもしれないとのこと。

赤ワインと白ワインどちらのほうが美味しいかを既存のデータセットを用いて分析。Rubyでも、基本的なデータの前処理から仮説検定までならできるということが分かりました。

車輪の再発明に苦しむよりも、「Pythonで提供されてるものがRubyからも使えるなら、それでいいじゃん」というPyCallのような解決法の方が、旨みが大きいのかもしれません。Pure-Rubyなアプローチを試みるなら、カスタマイズ性に富んでおり、記述が簡単であるというRubyの強みを生かしたり、Ruby on Railsとの連携の方を第一目標に据えるべきです。

  • 当日使われたデモはこちらから。
  • プレゼンテーションスライドはこちらから。

RubyもApache Arrowでデータ処理言語の仲間入り!

「Rubyのための仕組みをつくっていく」という方向のアプローチを行ったのは、須藤功平さん。

須藤さんは、カラム型のインメモリデータベースを扱うための共通フォーマットプロジェクト「Apache Arrow」の公式リポジトリーでRubyサポート関連部分を開発しています。

Apache Arrowは、pandasやHadoopなどのデータ分析システムがそれぞれ独自フォーマットを持つのではなく、共通化することで、各システム間でデータ交換しやすくすることを目的としています。

このプロジェクトをRubyに対応させることで、PythonやRで処理したデータも簡単にRuby上で読み込みや書き込みができるようになりました。

Pythonでデータを生成し、Arrow形式で保存。

先程Pythonで生成したArrow形式のデータをRubyで読み込み。

Rubyでデータ処理まで行いたい場合は、全文検索エンジン「Groonga」などの既存のC言語のライブラリを使うと処理も高速でよいのだそう。

Apache Arrowが普及すると、Rubyでももっと気軽に大量のデータを扱ったり、分析したりすることができるようになりそうです。

  • 当日の発表スライドはこちら
  • 発表内容を解説した記事はこちら

Rubyでデータサイエンスができるのか?

Rubyはさまざまな用途に対応できる言語でありながら、Webアプリケーションがより便利に開発できることに注力していたために、データ処理系の環境整備が遅れてしまい、昨今のデータサイエンスの流行に乗り遅れてしまいました。

しかし、今回発表してくださったような取り組みにより、急速に改善されているように感じました。

Rubyでも、趣味に留まらず、仕事でデータサイエンスができるようになる日も近いかもしれません。

村田さん、西田さん、三軒家さん、須藤さん、発表ありがとうございました!

左から、西田さん、三軒家さん、池澤、村田さん、須藤さん。

(撮影:刑部友康)

  • 154
  • このエントリーをはてなブックマークに追加

■関連記事

Rubyのなかを覗いてみよう!「Cookpad Ruby Hack Challenge」に参加してみ... 「Cookpad Ruby Hack Challenge」とは 「Cookpad Ruby Hack Challenge」は、Rubyというプログラミング言語がコンピューターの上でどう動いているのかを知り、ハックしてみるイベントです。8月30日から31日にかけて2日間、クックパッドのオフィスにて開...
エンジニア採用うまくいってる?──トレタ・ウルシステムズ・Speeeが語る現場の本音と採用手法... エンジニアの採用規模はどのくらい? 増井:まずは自己紹介と会社説明、従業員数とエンジニア数からお聞かせください。 漆原:私はウルシステムズの代表を務めていますが、今日はエンジニアの代表でやってきました。バリバリの理系。一生ソフトウェアエンジニアをやるつもり。オイラーの定理を見て感動するほどの数学...
DataRobotシバタアキラ氏が語る「誰もが簡単に、機械学習による予測分析ができる時代が来る」... DataRobotシバタアキラ氏「レンジでチンする機械学習」をテーマに登壇 登壇者のシバタアキラさんは、元々物理学の出身。ロンドン大学で高エネルギー物理学を学び博士号を取得。この頃よりPythonを使い始めたという。 2007年よりニューヨーク大学に移ってからは、データサイエンティストとして加速...
最先端の機械学習・人工知能の動向を探れ!ABEJA Innovation Meetup #3に参加し... 人工知能、機械学習、ディープラーニングの先端ベンチャーが続々登場 今回のイベントを主催する株式会社ABEJAは、さまざまな会社が抱える課題をIoT、ビッグデータ、人工知能技術などのテクノロジーを用いて解決しています。 ▲ディープラーニングを活用し様々な情報を収集・解析・可視化するクラウドサービ...
まつもとゆきひろ氏がSpeeeで語った、勉強会・英語・プログラミングの話... まつもとゆきひろ氏とコードを競うコードゴルフ大会 今回訪問したSpeeeの社内勉強会が開催されたのは、同社のカフェスペース「SpeeeLounge」。とても素敵なカフェだ。 そこでは、エンジニアたちが真剣にコードを書いていた。 今回の勉強会で行われたのは、与えられたお題に対して、誰がも...
実践的なテーマの発表も増えた「東京Crystal勉強会」第3回の様子をレポート!... 東京 Crystal 勉強会 #3 in 恵比寿 この「東京 Crystal 勉強会」は、日本のCrystalユーザーコミュニティであるCrystal-JPが主催している勉強会です。まだ発足して1年足らずのコミュニティですが、定期的に勉強会を開催しており、今回は1月22日に開催されたその第3回の様...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ