Rubyで機械学習が出来る未来を目指すRed Data Toolsの現状と今後について
by Yusaku Hatanaka@RubyWorld Conference 20171

self.intoroduction{
name: "Yusaku Hatanaka",
twitter: "@hatappi",
github: "hatappi",
hatena: "hatappi1225",
company: "Speee, Inc."
languages: %w(ruby go python),icon: ""}
2

自己紹介
•

畑中 悠作

•

Twitter、Github : hatappi
はてなブログ: hatappi1225•

株式会社Speee•

デジタルコンサルティング事業本部
アドテク事業部 UZOU事業•

UZOU事業エンジニア

Agenda•Rubyにおける機械学習の現状について•

Red Data Toolsについて•

現状の取り組み•

未来について•まとめ4

Rubyで機械学習したい！

5機械学習に限らずデータ分析においてデータ連携は必要となる
6

データ連携というとJSONやCSV ??

7

JSONやCSV
ファイル間でのやりとりだけでなくAPIでのリクエス
ト・レスポンスなどで使用される

Pythonで出力したCSVをRubyで読み込む例
8

CSVやJSONで大きなデータを処理
特定の行で集計処理をしたい場合でも一度すべてを読み込む必要があるので大きなデータを処理するには限界がある

機械学習では数百万の大きなデータセットを使うこともあるので大きなデータを扱えるようになりたい
9Apache Parquet

10Apache Parquetとは•カラム型のデータフォーマット

•全部を読み込まずともデータの一部を取り出せる••

例えば特定の列を取り出して集計する

サイズが小さい•カラムでデータを格納するため同じ型のデータを圧縮することが出来る

大きなデータを処理して保存することに向いている
11

Apache Parquet

Python上のデータをParquet形式でファイル出力したものをRubyで読み込む

12

大量のデータを扱えるようになった🎉

13

複数のシステム間でのデータを連携
Parquetはデータを圧縮するためデータ処理する過程
で複数システム間でデータ連携を行う際はそれを元に戻すオーバーヘッドが生じる

シームレスにシステム間でデータ連携したい!

14

Apache Arrow

15

Apache Arrowとは•オンメモリでカラム型データを扱うためのフォーマットとアルゴリズム•

シリアライズ・デシリアライズコストがほぼ0••

データを渡す側も受け取る側もCPUを使わない

ゼロコピー
•

データを受け取る側はメモリコピーに時間を使わなくてもよい

データ交換にむいている16

Apache Arrow

Python上のデータをArrow形式で出力しRubyで読み込む
17

5000レコードに対する読み書き比較まとめ
Pythonでの書き込み (s)Rubyでの読み込み (s)CSV

0.80090.1227

Apache Parquet

0.13900.0422Apache Arrow

0.07750.007418

Apache Arrowがない時

Apache Arrowがある時

RubyでParquetを扱えると複数のシステム間はApacheArrowでデータを連携を行いデータ分析を行う

Parquetを扱うことでデータの連携は出来た
しかしRubyでデータ分析がしたい！！には届かない
21

RubyでArrowを扱えると複数のシステム間はApacheArrowでデータを連携を行いデータ分析を行う

Rubyでデータ処理の一部を担うことが出来る!!
22

RubyでArrowを扱えるとApache Arrowに対応することで必要な部分からRubyを使ったデータ分析をはじめることが出来る
例•

Rubyで集めたデータをApache Arrowに対応しているPandasやSparkに連携し分析した結果をRubyで受け取ってRailsを使ったwebアプリで可視化•

後にPandasやSpark部分を徐々にRubyへ移行することも出来る

Agenda•

Rubyにおける機械学習の現状について•

Red Data Toolsについて•

現状の取り組み•

未来について•まとめ
25

Red Data Tools•

株式会社クリアコードの須藤さんが2017年2月にプロジェクトを設立•

Ruby用のデータ処理ツールを提供することを目的としたプロジェクト•

多くの言語が共通して使用できるApache Arrowを使用することでRubyコミュニティーを超えて協力する

Agenda•Rubyにおける機械学習の現状について•

Red Data Toolsについて•

現状の取り組み•

未来について•まとめ
27

現状の取り組み• Red Arrow• 既存gemのArrow化• 新しいツールを提供

現状の取り組み• Red Arrow• 既存gemのArrow化• 新しいツールを提供

Red Arrow•

Apache ArrowのRubyバインディング•

GitHub: red-data-tools/red-arrow30

現状の取り組み• Red Arrow• 既存gemのArrow化• 新しいツールを提供

SciRuby・Ruby Numo•

科学技術計算、データ可視化用途のGem群を開発しているプロジェクト•

Pythonでいうpandasにあたるdaruやnumpyにあたるnumo-narryなどがある•

Gem間が独立していて連携が難しいPyCall•@mrknさんが作成されているRubyとPythonのブリッジライブラリ•

Pythonで作成された既存の資産を使うことが出来る
のでRubyでPythonのオブジェクトを使用することが出来る既存gemのArrow化
SciRuby
Ruby Numo
PyCallApache Arrowに対応させることで既存のgemを使用してデータ分析をはじめられる

現状の取り組み• Red Arrow• 既存gemのArrow化• 新しいツールを提供

Red Chainer•

ChainerをRubyへポーティングしたもの•

Chainerのクラスやパラメータの持ち方を参考にRubyで書くことで0から作るのではなく既存の資産を活かして作ることが出来る•

内部の配列にはApache Arrowに対応したnumonarryさせることでApache Arrow形式に変換することも可能
36

MNIST

37

Agenda•Rubyにおける機械学習の現状について•

Red Data Toolsについて•

現状の取り組み•

未来について•まとめ
38

Red Data Toolsの今後•

引き続き既存のgemのAapche Arrowへの対応は行う•

Red Chainerのような新しいツールの作成

Ruby間でデータ分析が出来るようになりたいRed Data Toolsの今後
Apache Arrow本体への開発への参加

Apache Arrow
C++etc..

Agenda•Rubyにおける機械学習の現状について•

Red Data Toolsについて•

現状の取り組み•

未来について

•まとめ
41

まとめ
•

Apache Arrowに対応することで必要な部分からRubyでデータ分析をはじめることが出来る•

少しづつでもRubyでデータ分析が出来る未来へ！

42

告知

開発イベントやってます•

毎月1回の定期開催•

場所は弊社で行ってます @東京 - 六本木•

データ分析これからの人でもどなたでもOKです！

44

Gitter• 日本語: https://gitter.im/red-data-tools/ja• English : https://gitter.im/red-data-tools/en