Upgrade to Pro — share decks privately, control downloads, hide ads and more …

fukuoka_ruby_2019

 fukuoka_ruby_2019

フクオカRuby大賞2019

秒速284km

January 10, 2020
Tweet

More Decks by 秒速284km

Other Decks in Programming

Transcript

  1. 第12回フクオカRuby ⼤賞 Charty - Visualizing your data in Ruby Red

    Data Tools @284km (Kazuma Furuhashi) Speee Inc.
  2. Charty を開発した⽬的 ⼤きくは、Ruby でデータ分析の作業が⾏える状態を⽬指している R - もともと統計解析のために作られたプログラミング⾔語 Python - 機械学習に強い。データサイエンスの分野で広く使われている

    データサイエンスの領域で Ruby が⼗分に使える状態になるためには 必要な道具が揃うこと ユーザが増えること 開発者が増えること この 3 つを揃えて、良い循環を⽣み出して⾏く必要がある
  3. さて、データサイエンスの領域で Ruby が使えるようにしよ う (なぜ Ruby で?) 普段から使う機会が多く慣れた⾔語である Ruby でそのままデータ分析

    ができたら嬉しい。 Ruby は ⼈(プログラマ) の幸せにフォーカス それを実現するためにはまず、データ分析作業に必要なツールが存在しなければならない データ分析に Ruby が使われることが普通になるためには、少なくないユーザ数も必要 その為にもまず、普通に使える機能を備えたツールが今必要 そこで Ruby の可視化ツールである Charty を作りました
  4. Charty の 3 つのポリシー . Ruby ⽤のライブラリとして⾃然なつくりになっている事 . Rubyists が違和感なく使える事

    . Python などで既にデータ可視化をしている⼈でもスムーズに使い始められる事 それぞれ、以下を実現するためのものです。 . は、Rubyists が Charty の開発に参加しやすくなるため => 開発者を増やす . は、多くのユーザーに使ってもらうため => ユーザーを増やす . は、使い分けのコストを最⼩限にすることで可視化の労⼒を減らすため => 必要な機能を持ち、今使える道具であること
  5. 優位性 データ分析をする時に Ruby に⾜りない機能を作ったため、Charty と同じ位置づけでは 他に⽐べる Ruby のツールがありません 似た取り組みとしては rubyplot

    (https://github.com/SciRuby/rubyplot) が存在します が、こちらは現時点で動かして使える状態には達しておらず、Charty が先に実際に使え る機能を提供するに⾄りました
  6. 動くものをすぐに作り提供した 他⾔語でも優れたツールならば Ruby から使えるようにする Python や R に⽐べると、データ分析に使うツールが揃っていない現状 最初からそれらを上回る可視化ツールを作ることを選択していた場合、多くの時間を要す る

    (素晴らしい世界感かもしれないがまだ公開できていなかったかもしれない状況より良 い) まず今、Ruby で実際に使える可視化ツールが必要であった そのために Charty は、Ruby 以外の⾔語であっても優れたツールならば Ruby(Charty) か ら使えるようにするという態度で作られた
  7. Data Abstraction Layer Data Abstraction Layer により、 Charty では統⼀的にさまざまなデータ構造を扱い、可視化 することができます。

    Daru (https://github.com/SciRuby/daru) numo/narray (https://github.com/ruby-numo/numo-narray) nmatrix (https://github.com/SciRuby/nmatrix) ActiveRecord (https://github.com/rails/rails/tree/master/activerecord) Array Hash Red Datasets (https://github.com/red-data-tools/red-datasets/) benchmark_driver(plugin) (https://github.com/benchmark-driver/benchmark-driver) rbbcc (https://github.com/udzura/rbbcc) 連携進⾏中!!
  8. Plotting Abstraction Laye Plotting Abstraction Layer により、 Charty のバックエンドライブラリとして、様々な⾔語の 優れた可視化ライブラリを使い、切り替えることもできます。

    pyplot (https://github.com/matplotlib/matplotlib) Python gruff (https://github.com/topfunky/gruff) Ruby Rubyplot (https://github.com/SciRuby/rubyplot) Ruby google-charts (https://developers.google.com/chart) JavaScript(API) bokeh (https://github.com/bokeh/bokeh) Python plotly (https://github.com/plotly/plotly.js) JavaScript JFreeChart (https://github.com/jfree/jfreechart) Java (Support JRuby)
  9. 切り替えの簡単さ Pyplot backend charty = Charty::Plotter.new(:pyplot) scatter = charty.scatter do

    iris.group_by(:label).groups.each do |label, index| records = iris.row[*index] series records[:petal_length].to_a, records[:petal_width].to_a, label: label[0] end xlabel "Petal Length" ylabel "Petal Width" end scatter.render('pyplot.png')
  10. 切り替えの簡単さ Gruff backend example 書き換えるのは最初の⼀⾏だけ! charty = Charty::Plotter.new(:gruff) scatter =

    charty.scatter do iris.group_by(:label).groups.each do |label, index| records = iris.row[*index] series records[:petal_length].to_a, records[:petal_width].to_a, label: label[0] end xlabel "Petal Length" ylabel "Petal Width" end scatter.render('gruff.png')
  11. RubyKaigi 2019 福岡 (4⽉) 開発者を増やす活動が本格的に始まる RubyData Workshop - RubyKaigi 2019

    RubyKaigi 2019 コード懇親会 - connpass RubyKaigi 2019 After Hack by Fukuoka.rb!! (#132) - connpass Unstrict dependency version for bundler by tomog105 · Pull Request #4 · red-data- tools/charty Adds MacOS installation to README by Chinats · Pull Request #5 · red-data- tools/charty Fix typo in examples/daru.rb by kantarow · Pull Request #6 · red-data-tools/charty add an instruction for Ubuntu + pyenv by hasumikin · Pull Request #8 · red-data- tools/charty Add label option to series at README by yaboojp · Pull Request #9 · red-data- tools/charty
  12. RubyConf Taiwan 2019 (7⽉) RubyConf Taiwan 2019 After Hack Add

    examples for bokeh charts by execat · Pull Request #26 · red-data-tools/charty RubyConf Taiwan で、JRuby の作者である Charles ⽒ が声をかけてくれたことがきっかけと なり(https://twitter.com/headius/status/1155023767212417024)、Charty の JRuby 向け plugin である charty-backends-jfreechart (https://github.com/red-data-tools/charty- backends-jfreechart) がその後作られました。
  13. RubyConfTH 2019 タイ (9⽉) 発表資料を⾒た Ruby コミッタであり Ruby のベンチマークツール benchmark-

    driver(https://github.com/benchmark-driver/benchmark-driver) の作者である Kokubun ⽒ (https://github.com/k0kubun) との会話が⽣まれ、benchmark-driver の可視化 plugin である benchmark_driver-output-charty(https://github.com/benchmark- driver/benchmark_driver-output-charty) が公式のものとなりました。
  14. フクオカRuby⼤賞 2019 福岡(2020/1) Fukuoka.rb #164 (https://fukuokarb.connpass.com/event/160099/) に参加 udzura さんと Charty

    のこと、rbbcc のことをお互いに話す 連携したらメリットがありそう!おもしろそう!ということで連携する⽅向で開始
  15. Charty の利⽤実績 benchmark_driver-output-charty (https://github.com/benchmark- driver/benchmark_driver-output-charty) benchmark_driver は Ruby のベンチマークツールです。benchmark_driver- output-charty

    により、測定結果を可視化します。 rubydown (https://github.com/RubyData/rubydown) 集計、分析結果を Markdown 形式で扱うことができる Ruby のツールです。Charty によ る可視化をサポートしています。 所属企業である Speee のあるサービスでは本番環境で Charty が使われています。
  16. benchmark-driver outputs as below by default. $ gem install $

    benchmark-driver examples/parse.yaml Calculating ------------------------------------- csv 3.1.1 csv 3.0.1 unquoted 61.332 38.149 i/s - 100.000 times in 1.630461s 2.621311s quoted 30.558 17.023 i/s - 100.000 times in 3.272469s 5.874313s mixed 40.932 23.047 i/s - 100.000 times in 2.443082s 4.339030s include_col_sep 11.167 10.657 i/s - 100.000 times in 8.955275s 9.383878s include_row_sep 11.180 4.339 i/s - 100.000 times in 8.944608s 23.044523s encode_utf-8 39.129 31.525 i/s - 100.000 times in 2.555671s 3.172112s encode_sjis 49.982 31.289 i/s - 100.000 times in 2.000736s 3.196026s Comparison: unquoted csv 3.1.1: 61.3 i/s csv 3.0.1: 38.1 i/s - 1.61x slower quoted csv 3.1.1: 30.6 i/s csv 3.0.1: 17.0 i/s - 1.80x slower mixed csv 3.1.1: 40.9 i/s csv 3.0.1: 23.0 i/s - 1.78x slower include_col_sep csv 3.1.1: 11.2 i/s csv 3.0.1: 10.7 i/s - 1.05x slower include_row_sep csv 3.1.1: 11.2 i/s csv 3.0.1: 4.3 i/s - 2.58x slower encode_utf-8 csv 3.1.1: 39.1 i/s csv 3.0.1: 31.5 i/s - 1.24x slower encode_sjis csv 3.1.1: 50.0 i/s csv 3.0.1: 31.3 i/s - 1.60x slower
  17. 今後の展開 他⾔語で既にデータ分析作業を⾏っている⼈達が⼤きな違和感を感じずに Ruby でも引き 続き作業ができること インターフェイスの改善 GR framework (https://github.com/red-data-tools/GR.rb) のサポート

    サポートするデータ形式の充実 時系列データを簡単に扱えるようにする rbbcc のサポートから⼊り、インフラ⽅⾯で使われるための実装 より広く認知される 2019 年は開発者を増やすことに注⼒。2020 年はユーザーを増やすための開発も増 やします! Ruby で使われることの多い Rails と組み合わせて可視化を提供する charty-rails の ようなライブラリの開発
  18. red-data-tools/charty (Charty 本体) https://github.com/red-data-tools/charty (Charty の JRuby ⽤ plugin) https://github.com/red-data-tools/charty-backends-jfreechart

    (benchmark-driver でのベンチマーク結果を Charty で可視化する plugin) https://github.com/benchmark-driver/benchmark_driver-output-charty