Docker上にnbviewerを立ててiruby+Nyaplotで描いたグラフを共有できるようにしてみた

2015-01-10 19:19:31 -08:00·
Aki Ariga
Aki Ariga
· 5 min read
post

昨年末に@domitryさんが書かれた記事でも話題になった、RubyのライブラリMikonとNyaplotで生成したグラフをipython notebookとして社内のGHEでも共有することを目標に、nbviewerをlocalのdocker上で立ててみました。

ちなみに、1/10のyokohama.rbでモクモクした成果です。

(今回は手元で検証したため、Macでdocker環境を構築しています。GHEでの検証までは行っていません)

nbviewerとは

皆さん、ipython notebookはご存知でしょうか?

ipython notebookは以下の特徴を持ちます。

  • 対話的に書いたコードと実行結果が描画されて、それを保存できる
  • markdownも書ける
  • nbviewerを使えば、notebookが共有できる!
  • Python,Ruby,Juliaが対応している

Rubyの例ですがTokyu Ruby会議で発表したスライドを貼っておきます。 kawasaki.rbではipython notebookでパーフェクトRuby読書会の様子を貼っています

Recommendation for iruby #tqrk08 from Michiaki Ariga

これだけだと魅力がわかりにくいと思うので、実行結果を貼ります。 描画したグラフも共有できるのが大きな魅力だと思います。

もしかすると、Gunosyの粟飯原さんが以前作られたnotebookをご覧になった方もいるかもしれません。

また、Mining the Social Web 2nd Editionがipynbを用意していたりします。(コードの教育にも向いていると思います)

この、ブラウザで手軽にipython notebookの結果を見れるようにしているのがnbviewerです。githubで公開されているレポジトリやgistなら特に問題なく静的に再現してくれるのが特徴です。 nbviewerのいいところは、Python, Ruby, Juliaの実行環境がなくてもjsonをレンダーしているだけなのでブラウザで表示できることです。

便利なnbviewer+ipython notebookですが、社内のGHEに使いたい場合は自分でnbviewerを立てなければなりません。 そこで、今回はnbviewerを手元のMacとboot2dockerで動かしてみます。

Macでdocker

Macではboot2dockerを使ってVirtualBox上にdockerの環境を立てます。

brew install boot2docker boot2docker init boot2docker up

もしboot2docker initに失敗したら

自分の環境のVirtualBoxは古かったので、途中でこんなエラーがでました。

error in run: Failed to initialize machine "boot2docker-vm": exit status 1

こちらを見ると、VirtualBoxのバージョンが古いとダメなようなので、VirtualBoxをアップデート後に

boot2docker delete boot2docker init

で無事起動しました。

Jupyter Notebook Viewer

Dokcer上でnbviewerを動かすには、用意されているdocker imageを使えばよいです。

基本的には公式に従えば大丈夫です。https://github.com/jupyter/nbviewer

基本的にgistやgithubのレポジトリに置いたipynbを表示するのに使うので、予めgithubでapi tokenを取得しておきましょう。

docker pull jupyter/nbviewer docker run -p 8080:8080 jupyter/nbviewer -e 'GITHUB\_API\_TOKEN=YOUR\_API\_TOKEN'

nbviewerを起動する

open http://$(boot2docker ip 2\>/dev/null):8080/

これで、あなたのブラウザにdocker上のnbviewerが見れるはずです!

以下のURLを入れて試してみました。

https://github.com/chezou/iruby-example/blob/master/nyaplot-example.ipynb

Nyaplot 3Dのグラフはマウスでグリグリ動かせるので楽しいですね。

RubyのMikon+Nyaplotで可視化

さて、Mikonとd3.jsを使ったiruby上の可視化ライブラリNyaplotを使って可視化してみます。

MikonはRubyにおけるpandasのような位置づけで、表形式のデータ操作が得意なライブラリです。いわゆる、Rで有名なDataFrameがRubyで扱えるようになります。 NyaplotはJuliaでいうところのGadfly的な位置づけで、グラフの描画ができるライブラリです。面白い事例では地図の可視化とかも出来たりします。

MikonはNMatrixに依存しており、こいつがCBLASなど依存が激しくMacでビルドをするのが大変だったので、こちらもdockerで環境を作りました

docker pull domitry/sciruby-docker docker run -i -p 9999:9999 domitry/sciruby-docker:latest open http://$(boot2docker ip 2\>/dev/null):9999/

今回は次のgistを可視化してみました。https://gist.github.com/chezou/38ddcc79babe34b73f10

nbviewerで見る場合はこちら

こんな感じでipython notebookが無事見れるようになりました。

雑感

今回、GHEでの検証まではしていませんが、概ねGHE上のgistやレポジトリのipython notebookを描画することはできそうな目処が経ちました。

しかし、MikonとNyaplotを使ったグラフ描画は別途サーバサイドで用意する必要がありそうです。 Nyaplot自体は依存関係は薄いのですが、Mikonを使おうと思うとするとNMatrixのビルドが大変だったりするのでdocker上のiruby notebookを立ちあげなければなりません。 この状況だと、手元にあるcsvなどを食わせようとした時は、dockerで立ち上げたipythonサーバにデータを移して食わせる必要があるなど、社内で普及を促すのにハードルが高い印象を受けました。

Aki Ariga
Authors
Staff Software Engineer
AI Product Engineer. Interested in Machine Learning, MLOps, and Data driven business. If you like my blog post, I’m glad if you can buy me a tea 😉

Related