台湾のRubyとElixirのTechイベントRuby X Elixir Conf Taiwan 2018に参加してきました。 自分にとって初めての海外一人旅と海外Techカンファレンス。

趣味でデータサイエンス系の技術を触っていてデータサイエンスに興味があり、丁度イベントでRubyのデータサイエンス界隈がどうなっているかについて、pycall.rb等のライブラリを作っている@mrknさん(株式会社Speee)のワークショップに参加したので、その内容をまとめようと思います。

内容のレベルはPythonで既に機械学習系のライブラリを触ったことのある人が対象ぐらいで書いています。

ワークショップリポジトリ

RubyData/workshop_taiwan_201804

今回のワークショップで使われたリポジトリ。

Dockerを用いて、それぞれの環境を作り進めていきました。

Session 1: Introduction to Ruby’s data tools ecosystem

現在のRuby界隈のDataScience系のプロジェクトやツールを紹介

Ruby×データサイエンス系プロジェクト

  • SciRuby
    • 科学技術計算におけるRuby環境の改善が目的の国際プロジェクト
    • Dataframe(Pythonでいうpandas)の daru だったり、RubyをJupyter上で動かすための iruby 等を開発
  • Ruby Numo
    • 行列計算ライブラリ(Pythonでいうnumpy)の NArray を開発
  • Red Data Tools
    • Rubyのデータ処理ライブラリを提供するプロジェクト
    • Apache ArrowのRubyバインドであるred-arrowを開発

Jupyter Notebook上でRubyを動かす

Session1.ipynb

  • Kaggle でもチュートリアルとして有名な Titanic生存者データ
  • rbplotly(いい感じにデータを描画してくれるサービスplotlyをrubyから呼べるgem)を使ってチャートを表示
  • CSVデータからDaruでデータフレーム型に変換して、rubyの文法でデータを処理できて、チャート表示までが問題なく出来ていた
  • ある程度の前処理等もRubyでできてしまえる可能性を感じた

Session 2: Introduction to pycall.rb

RubyでPythonのライブラリやメソッドを呼べる pycall.rb について

Session2.ipynb

  • iris(アヤメ)データをpandas(データフレーム),seaborn(描画),scikit-learn(PCA,SVC)を使って解析

wine_data_viewer

  • pycall.rbを用いてRails上でwineデータを表示
  • helperで = render_dataframe @dataframe みたいに書けるようにしてあって、自分のプロジェクトとかでも使えそう

Session 3: Introduction to machine learning programming in Ruby

mxnet.rbを使ってディープラーニングを行う

  • MXNetは最近AmazonとかMicrosoftが力を入れているDeepLearningライブラリ
  • 色々な言語(Python,C++,Scala,Julia,Perl,R)に対応していて、MXNet.rbの開発を進めてRubyも対応言語に入れてもらうのが目標

Session3.ipynb

  • MNIST(手書き文字)データを使ってMXNetでモデルを実装して学習
  • 隠れ層2層の全結合モデル
  • 10Epochトレーニングを行い、バリデーションデータで正答率97%位
  • トレーニング済みのモデルでランダムに画像10個をpredictしても正しくできていた
  • より複雑な Wide ResNet のMXNet.rb実装デモもあった

ワークショップを終えて

普段趣味でJulia言語を用いてデータサイエンスをやっていますが、仕事で使っているRuby(主にRails)でも色々できることが増えてきて、試しに使ってみる位のレベルになってきている気がします。

今後の話ですが、@mrknさんは科学計算向けプログラミング言語のJuliaもRubyとバインディングできるように進めているので、私もお手伝いできるように現在必死にRubyのC拡張を触ったりしてます。今後もそこら辺の記事を書けたらなと思います。