Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした