頑張らないように頑張る。

怠惰と努力の狭間

review: PythonユーザのためのJupyter[実践]入門

gihyo.jp

何故レビューするに至ったか

1ヶ月ほど前になりますが、以下の勉強会に参加しました。
Python入門者の集い #6 - connpass

この勉強会の登壇者に、本書の著者である「片柳薫子さん」がいらしてて、
「ブログでレビュー書いてくれる方に一冊差し上げます!」
と言われて、恐る恐る手を挙げ、じゃんけんで勝ったのがきっかけです。

ちなみに、
本書のレビューは [PythonユーザのためのJupyter[実践]入門 レビュー] で検索したら山ほど出てくるので、
僕のレビューでは細かいところは取り上げません。
簡単に、ざっくりと、思った事を、書いていきます。

ちなみに書籍のレビューは生まれて初めて。
本について文章を書くなんて、小学校の読書感想文以来です。
緊張。

謝辞

片柳薫子さん。本書をいただき、ありがとうございました。
レビューが遅くなった言い訳をすると、別の技術本を読んでいたので本書は手付かずな状態でした。
この度、全て読み切る事が出来ましたので、レビューを書かせていただきます。
遅くなりまして申し訳ありません。

アジェンダ

こんな感じで書き進めていきます。

  • なぜ可視化するのか
  • 可視化のためのパッケージ
  • 様々な実行環境
  • Pythonユーザだけじゃない!RubyユーザやRユーザも必見
  • 本書の使いどころ

なぜ可視化するのか

これが本書の最大の目的だと思います。
可視化する目的は、ずばり「データ解析の効率的に行うため」。

いきなりで恐縮ですが、「何故効率的に行わなければならないのか」みたいなところは書かれていなかったので、以下は僕が思ってる事、、、

アメリカでは最も稼げる職業と言われ、日本でも育成を急いでいる「データサイエンティスト」
ガートナーの発表によれば、2020年までにデータサイエンティストの業務の4割は自動化されると言われています。

ただ、自動化をするためには、データを解析し、傾向を掴んで、機械学習アルゴリズムに食わせるなどしなければなりません。
しかし扱うデータは数千行数万行とあり、更に列も考慮したら幾何学的なデータを見なければなりません。
これをテキストベースで見るのは、人間には到底無理でしょう。

そこで、棒や折れ線、円や散布図など、様々な形式のグラフに可視化する事で、データ解析を効率的に進める事が出来るわけです。
その手段として、Jupyter Notebookがあるわけですね!!!

可視化のためのパッケージ

本書では「Matplotlib」「Bokeh」の二つが紹介されています。

Matplotlib

2次元データを可視化するためのサードパーティ製パッケージで、以下のような特徴があります。

  • 動作するOSを選ばない
  • 詳細な描画設定ができる
  • 多様な出力形式に対応している etc.

2003年のリリースから10年以上の歴史があり、現在も多くのユーザに利用されているそうです。
ユーザが多い理由として、MATLABと同様の描画をPythonで行える点が挙げられるそうです。
(MATLABは産業界・教育界で広く使われている技術計算言語)
(MATLABは他の言語のインターフェースを参考にして設計されたため、Pythonらしくない設計(暗黙的な動作が多い)になってしまっているらしい(Pythonは暗黙より明示を求める))

棒グラフや折れ線グラフ、散布図や円グラフなどが扱えますが、使い方については本書をお読み下さい。
応用方法(重ねて表示したり、グループ化して表示したり)も載っているので、"How?"を押さえられるのはいいですね◎

Bokeh

モダンブラウザで対話的に可視化を実現するサードパーティ製パッケージで、以下のような特徴があります。

  • ユーザのニーズに合わせて3つのインターフェース(高レベル/中レベル/低レベル)が用意されている
  • Matplotlibにない独自の機能がある
    • プロットツール
    • Hoverツール
    • push_notebook etc.

Matplotlibと同様、棒グラフや折れ線グラフ、散布図や円グラフなどが扱えますが、使い方については本書をお読み下さい。
こちらにも応用方法も載っているので、"How?"を押さえられるのはGood:)

使い分け

使い分けとしては、こんな印象を持ちました。

  • Matplotlib
    • 手早くプロットしたい
    • 日本語ドキュメントも充実(Bokehは日本語ドキュメントはまだ少ない) etc.
  • Bokeh
    • 対話的にグラフを動かしたい
    • HTMLに吐き出して共有したい(MatplotlibはHTML出力は出来ない) etc.

本書とはズレますが、Qiitaに良さそうな使い分けがあったので、こちらも載せておきます。
Pythonの可視化パッケージの使い分け - Qiita

様々な実行環境

ローカル環境で使える「Jupyter Notebook」はもちろんですが、
クラウド環境で使える「Cloud Datalab」 「Azure Notebooks」も紹介されています。

Cloud Datalab

Google Cloud Platform(以下、GCP)』が提供しているプラットフォームです。
GCPが提供する各種APIと、Jupyter Notebookを連携させる事により、データ解析を効率的に行う事が出来ます。

これを利用する事で、以下のような恩恵を受ける事が出来ます。

  • Jupyter Notebookのデータ分析機能
  • BitQuery
  • Cloud Storage
  • Cloud Machine Learning Engine etc.

セットアップ方法や使い方については、本書をお読みください。
データ解析やグラフ描画のサンプルコードも載っています◎

Azure Notebooks

Microsoft Azure』がSaaS環境として提供しているサービスとなります。
.ipynbファイルをサーバ上で作成、またはアップロードするだけで、気軽に使う事が出来ます。

Cloud Datalabほど詳細な内容は書かれていませんが、セットアップ方法や簡単な使い方は書かれています。
2017年5月現在でpreview版だそうなので、今後の展開に期待が持てます:)

Pythonユーザだけじゃない!RubyユーザやRユーザも必見

本書を読んで初めて知ったのですが、Jupyter NotebookはPythonだけでなく、RubyRも扱えるそうです!

Ruby

ScRubyというプロジェクトの一部として開発されているirubyが必要となります。
当プロジェクトでは他にも、DataFrameの代わりとなるdaruや、グラフ描画に利用できるNyaplotなどが開発されています。

これらをインストールする事で、Jupyter Notebook上でRubyを扱う事が出来ます。
インストール方法や、データ解析方法、グラフ描画などは、本書をお読み下さい。

R

GitHubで公開されているIRKernelが必要となります。

Rubyirubyと同様、インストールする事で、Jupyter Notebook上でRを扱う事が出来ます。
インストール方法や、データ解析方法、グラフ描画などは、本書をお読み下さい。

ちなみに、

気になったので、他の言語も扱えるのか調べてみたら、GoScalaなども扱えるようです。
Jupyter Notebookさえあれば、ブラウザ上で実行できるインタラクティブな環境が構築できるというのは嬉しいですね◎

本書の使いどころ

最後まで読んでいて、率直に思ったのは「逆引き辞書として使える」です。

初めは、サンプルコードが書かれていたり、カラーページもあって分かりやすいので、「実際にコーディングしながら読み進めようか」と思っていました。
しかし、読み進めるうちに「何が出来るかを覚えておいて、必要な時に逆引きしよう」という読み方にシフトしました。

というのも、5章や7章などは表示形式の章立てであり、「自分がデータ解析するため」というよりは「他人に分かりやすく見せるため」の章立てです。
デフォルトでも十分綺麗に整形してくれるMatplotlibやBokehなので、この辺を細かくやる必要もないかなと...

あと、逆引き辞書とは言いましたが、索引は使いづらいという印象でした。
というのも、量が少ないので、必要な単語を索引から取り出すのは困難です。
目次の方が充実しているので、目次から辿るのがベターだと感じました。

まとめ

各章立ての役割も分かりやすく、構成やレイアウトもわかりやすかったので、非常に読みやすかったです。
基本的な使い方から応用まで、順序立てて書かれているので、理解しやすい本だという印象でした。
また、「本書の使いどころ」でも書きましたが、逆引き辞書として使えると思ったので、オフィスに置いておこうと思います。


書籍レビューってこんな感じでいいのかしら...