Ruby
sciruby
IRuby
Jupyter

Rubyでシュッとグラフを書く with Jupyter notebook

More than 1 year has passed since last update.

Jupyter notebookとは?

一言で言うと、ブラウザで動く超便利なREPLです。
もともとJupyter notebookはPython用のプロジェクトだったのですが12、近頃はRubyも使えるようになっています。
本記事では、Jupyter notebook上でRubyを使い、グラフを書く方法を解説します。

環境構築

下記はMacを想定しています。
まずJupyterを導入して、次にIRubyを導入します。

それ以外の環境の方はこちら:
- Bash on Windows (Creators Update以降)
- Ubuntu Linux 16.04
- Docker

Jupyterの導入

pip を使う方法と Anaconda を使う方法があります。ここでは pip を使います。

$ brew install python3
$ sudo -H pip3 install jupyter
$ jupyter notebook

これでJupyterが立ち上がり、ブラウザでhttp://localhost:8888が開きます。

IRubyの導入

このままだとPythonしか使えないので、Jupyter上でRubyが使えるようにします。
一旦ターミナルでCtrl-cしてjupyterを終了してください。

IRuby kernelをインストールし、設定します:

$ brew install zeromq --HEAD
$ brew install czmq --HEAD
$ gem install cztop iruby
$ iruby register --force
$ jupyter notebook

これで、先程と同様にhttp://localhost:8888がブラウザで開きます。
New ▼からRubyが選べるようになりました :clap:

グラフを書く

さっそくJupyterを使ってみましょう。
以下の内容はnbviewerに上げてるので、そちらも参考にしてください。

rbplotly

rbplotlyというgemを導入します。Jupyter上でグラフを書くgemです。

$ gem install rbplotly

New ▼ からRubyのNotebookを開いて以下の内容をセルに入力し、実行(Shift+Enter or Command+Enter)します。

require 'rbplotly'

trace1 = { x: [1,2,3,4,5,6], y: [100,200,300,400,500,600] }
trace2 = { x: [1,2,3,4,5,6], y: [600,500,400,300,200,100] }
traces = [trace1, trace2]
pl = Plotly::Plot.new(data: traces)
pl.show

これで、グラフが表示されます。3

newplot(18).png

これはただの折れ線グラフですが、棒グラフや円グラフ、ヒストグラム、ヒートマップなども書けます。4

daru + daru-plotly

次に、csvからデータを読み込み、それをグラフにしてみましょう。

gemの導入

darudaru-plotlyを導入します。

$ gem install daru daru-plotly

そして、notebook上部のKernel > Restart & Run Allを実行しましょう。これで、新しくインストールしたgemがnotebookで使えるようになります。

csvを読み込む

ここでは、例として会津若松市の年齢別人口のcsvを使います。

notebookに新しくセルを作成し、以下のように入力&実行します。
新しいセルを作成するには、一度Escでセルからフォーカスを外した後bを入力すれば良いです。

require 'daru'

df = Daru::DataFrame.from_csv('./O_TUKIBETSU_NENREI.csv')

スクリーンショット 2017-10-31 11.41.02.png

このように、csvファイルの内容が表示されたと思います。

グラフを描く

このデータフレームから、横軸がage、縦軸がtotal_countのグラフを作成しましょう。
新しいセルを作成し、以下のように入力して実行します:

require 'daru/plotly'
include Daru::Plotly::Methods # plotメソッドが使えるようになる

plot(df, x: 'age', y: 'total_count').show

newplot(19).png

このように、xydfの列名を指定することで、それらをグラフに起こすことができます。

次に、男女別の人口を見てみましょう。新しいセルを作って、以下のように入力して実行します:

plot(df, x: 'age', y: ['total_count', 'male', 'female']).show

このように、yには列名のArrayを指定することもできます。

newplot(20).png

notebookを公開する

作成したnotebookは簡単に公開できます。

githubやgistで公開する

githubはJupyter notebookに対応しています。
レポジトリを作ってpushすることもできますが、多くの場合はgistで事足りると思います。

notebookは Ctrl+s で保存することができます。保存したnotebookをgistにアップロードすれば、ブラウザ上で閲覧することができます。

$ gem install gist
$ gist hoge.ipynb
https://gist.github.com/84cd6fe6a1bb57cc88a0fb3b3a88fb3b

ただし、githubやgistで公開されているnotebookを閲覧する場合、JavaScriptが実行されないためグラフが全く表示されません :point_down:

スクリーンショット 2017-10-31 12.05.20.png

そのため、後述のnbviewerを利用します。

nbviewer

nbviewerというのは、インターネット上で公開されてるnotebookをいい感じに表示してくれるやつです。
ここにnotebookのgistのURLを入力すると、ちゃんとグラフを表示してくれます :point_down:

スクリーンショット 2017-10-31 12.05.34.png

githubからnbviewerにジャンプしてくれるchrome拡張もあり、これと組み合わせて使うと便利です。

Futher more

参考


  1. 正確には、Jupyter notebookの前身であるIPython notebookがPython用のプロジェクトだった。 

  2. Jupyter notebook自身は様々な言語で使うことができる。HaskellのKernelとかもある 

  3. JavaScript Errorみたいなのが出た人は、notebook上部からKernel > Restart & Run Allを選択して実行してください。 

  4. ash1day/rbplotlyに例があります。