Edited at

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に例があります。