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

fukuoka_ruby_2019

 fukuoka_ruby_2019

フクオカRuby大賞2019

7ef4ab70ee295c821f8b77fab3aa87cf?s=128

秒速284km

January 10, 2020
Tweet

Transcript

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

    Data Tools @284km (Kazuma Furuhashi) Speee Inc.
  2. Charty とは、 https://github.com/red-data-tools/charty

  3. Charty は、Ruby ⽤データ可視化ライブラリ 少しのコードを書くだけで簡単にデータを可視化できることが特徴 ユーザは本来の⽬的であるデータ分析⾃体に時間を使いましょうという考えで作られまし た。 このような出⼒を簡単に⾏うことができます

  4. Charty を開発した⽬的

  5. 想定ユーザー 「データ分析者かどうかにかかわらず、データを可視化したい全ての Rubyists」

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

    データサイエンスの領域で Ruby が⼗分に使える状態になるためには 必要な道具が揃うこと ユーザが増えること 開発者が増えること この 3 つを揃えて、良い循環を⽣み出して⾏く必要がある
  7. 必要な道具・ユーザ・開発者 1 つでも⽋けると難しい。全部そろうと希望がある

  8. さて、データサイエンスの領域で Ruby が使えるようにしよ う (なぜ Ruby で?) 普段から使う機会が多く慣れた⾔語である Ruby でそのままデータ分析

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

    . Python などで既にデータ可視化をしている⼈でもスムーズに使い始められる事 それぞれ、以下を実現するためのものです。 . は、Rubyists が Charty の開発に参加しやすくなるため => 開発者を増やす . は、多くのユーザーに使ってもらうため => ユーザーを増やす . は、使い分けのコストを最⼩限にすることで可視化の労⼒を減らすため => 必要な機能を持ち、今使える道具であること
  11. 必要な道具が揃うということ 課題 Ruby でデータ分析をしたいと考えた場合、定番と⾔える可視化ツールが存在しない 分析者各々が可視化のために多くの時間を要するという問題がある 可視化ツールは Ruby でデータ分析作業を⾏うには⾜りない機能 Charty の良い点

    動くものをすぐに作り提供したこと 今後の拡張の余地を持たせて提供できたこと
  12. 優位性 データ分析をする時に Ruby に⾜りない機能を作ったため、Charty と同じ位置づけでは 他に⽐べる Ruby のツールがありません 似た取り組みとしては rubyplot

    (https://github.com/SciRuby/rubyplot) が存在します が、こちらは現時点で動かして使える状態には達しておらず、Charty が先に実際に使え る機能を提供するに⾄りました
  13. 2019 年の内にこれらを備えて使える状態で公開したことに まず意味がある 動くものをすぐに作り提供した ⾔語問わず良いライブラリは⾃由な組み合わせで使えるようにする

  14. 動くものをすぐに作り提供した 他⾔語でも優れたツールならば Ruby から使えるようにする Python や R に⽐べると、データ分析に使うツールが揃っていない現状 最初からそれらを上回る可視化ツールを作ることを選択していた場合、多くの時間を要す る

    (素晴らしい世界感かもしれないがまだ公開できていなかったかもしれない状況より良 い) まず今、Ruby で実際に使える可視化ツールが必要であった そのために Charty は、Ruby 以外の⾔語であっても優れたツールならば Ruby(Charty) か ら使えるようにするという態度で作られた
  15. 実現する仕組み・Charty の抽象レイヤ 他⾔語でも優れたツールならば使えるようにする Data Abstraction Layer Plotting Abstraction Layer

  16. 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) 連携進⾏中!!
  17. Plotting Abstraction Layer

  18. 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)
  19. 切り替えの簡単さ 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')
  20. 切り替えの簡単さ 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')
  21. None
  22. ⾔語問わず良いライブラリは⾃由な組み合わせで使えるよう にする 短期間で⼀般的な機能を提供したこと さまざまなデータ構造、バックエンドライブラリをサポートしており、ユーザが使いたい 組み合わせで、少しのコード記述量でそれを実現できる点が Charty の強み Ruby で同じことができるツールは他にありません 可能にしたのは

    2 つの抽象レイヤを持つ仕組み 今後の拡張性・少しずつ追加開発/改善するやり⽅にも適する
  23. 社会的効果、インパクト Charty により可視化の道具がある状態になった 今後はより良くするという発想で開発をするための基準が出来た データ分析したい⼈、道具の開発に加わりたい⼈にとって敷居が下がり、以前より始めや すくなった

  24. 2019 年 Charty を国内外問わず認知してもらうための活動 Charty の開発者を増やすための活動 の成果

  25. 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
  26. 名古屋Ruby会議04 (6⽉) 名古屋Ruby会議04 では発表後に開発に興味があると声をかけて頂き、R ⾔語のライブラリを Charty のバックエンドに加えることに興味を持つ⽅が加わりました。 名古屋Ruby会議04

  27. 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) がその後作られました。
  28. 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) が公式のものとなりました。
  29. フクオカRuby⼤賞 2019 福岡(2020/1) Fukuoka.rb #164 (https://fukuokarb.connpass.com/event/160099/) に参加 udzura さんと Charty

    のこと、rbbcc のことをお互いに話す 連携したらメリットがありそう!おもしろそう!ということで連携する⽅向で開始
  30. 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 が使われています。
  31. 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
  32. benchmark_driver-output-charty outputs as below. $ benchmark-driver examples/parse.yaml -o charty

  33. $ benchmark-driver --output=charty --output-chart=box \ --rbenv '2.5.6;2.6.4' --repeat-count=4 examples/single.yml

  34. おかげさまでこのように、Charty は開発者が少しずつ増えながら、開発と発表を繋げつつ継 続する流れができつつあります。

  35. 今後の展開 他⾔語で既にデータ分析作業を⾏っている⼈達が⼤きな違和感を感じずに Ruby でも引き 続き作業ができること インターフェイスの改善 GR framework (https://github.com/red-data-tools/GR.rb) のサポート

    サポートするデータ形式の充実 時系列データを簡単に扱えるようにする rbbcc のサポートから⼊り、インフラ⽅⾯で使われるための実装 より広く認知される 2019 年は開発者を増やすことに注⼒。2020 年はユーザーを増やすための開発も増 やします! Ruby で使われることの多い Rails と組み合わせて可視化を提供する charty-rails の ようなライブラリの開発
  36. 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