PythonユーザのためのJupyter実践入門 - JupyterユーザーによるPython ユーザーのためのJupyterの本

2017年9月9日に、書籍『PythonユーザのためのJupyter[実践]入門』(以下、本書)が発売になりました。僕含めた4名の著者による共著本です。

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

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

何の本か

書名に Jupyter とあるとおり、Jupyter Notebook を取り扱った書籍です。同時に、pandas 基礎、Matplotlib および Bokeh 詳解をメインコンテンツとした書籍でもあります。

jupyter.org

本書の見出しを以下に記載します。

  • 第1章: Jupyter Notebookを導入しよう
  • 第2章: Jupyter Notebookの操作を学ぼう
  • 第3章: pandasでデータを処理しよう
  • 第4章: Matplotlibでグラフを描画しよう
  • 第5章: Matplotlibを使いこなそう
  • 第6章: Bokehでグラフを描画しよう
  • 第7章: Bokehを使いこなそう
  • 第8章: Jupyter Notebookをカスタマイズしよう
  • 第9章: クラウド上でJupyter Notebookを使おう
  • 第10章: Jupyter NotebookでRubyとRを使おう
  • Appendix: ipywidgetsとJupyterLab

なぜ書いたのか

Jupyter Notebook は IPython Notebook という名称であった時代から人気のツールで僕自身もよく利用しており、何らかの形で書籍にできればよいとかねてから考えていました。

Jupyter Notebook は最低限の機能を使用するだけならマニュアルが必要ないほど簡単に利用できるツールです。それ故に、キーボード・ショートカット機能や設定ファイルの活用などより便利な用法を知らずに使われがちであると考えていました。

Matplotlib は可視化ツールとしてよく知られていますが、歴史が長く、かつ多機能であるため公式ドキュメントを手繰ったとしても機能の要所を掴むことは容易ではありません。

これらの状況を踏まえて、和書として Jupyter Notebook と可視化 について詳しく取り扱った書籍があれば有意義なのではないかという理由で執筆プロジェクトがスタートしました。

見所

著者視点で本書の見所をいくつかピックアップします。

カラーページを使い可視化例を豊富に掲載

本書では、データの可視化を中心に取り扱った一部の章について、カラーページを採用しています。

f:id:iktakahiro:20170912131735p:plain:w700

f:id:iktakahiro:20170918001405p:plain:w500

単色で表現できる簡単なグラフから、透過や重ね合わせを組み合わせた複雑なグラフのどちらもカラーで紹介しているので、具体的なイメージを確認しながら学べる内容になっています。

サブプロットが使いこなせるようになる

本書は Matplotlib の ここがわからない という疑問を解消できるように配慮して構成されています。1例として、複数のグラフを並べて 1つのプロットとする サブプロット の解説に紙面を割いています(本書144頁)。

# フィギュアの生成
fig = plt.figure()

# フィギュア内にサブプロットを3つ配置します
ax1 = fig.add_subplot(221) # 2行2列の1番
ax2 = fig.add_subplot(222) # 2行2列の2番
ax3 = fig.add_subplot(223) # 2行2列の3番

plt.show()

上記のコードに含まれるような、add_subplot(221) という記述を見たたけでは、サブプロットのコードとグラフの関係は判然としません。本書では、コードと図説を交えて、サブプロットについての解説を行っています。subplots() 関数についての言及もあります。

f:id:iktakahiro:20170918001850p:plain:w400

本書を読むことで、なんとなく利用していたサブプロットを使いこなせるようになるでしょう。

コーディングスタイルについて言及

本書では、Matplotlib のコーディングスタイルとして、通称 MATLAB-style と、オブジェクト指向スタイルである OOP-style という2つのコーディングスタイルを紹介し、後者のほうが明示的なコードであり望ましい、という意見を表明しています。

MATLAB-style のコードと、それに言及した一文を本書 252 - 253頁より引用します。

%matplotlib inline

import matplotlib.pyplot as plt

x = [1, 2, 3]
y = [3, 6, 9]

plt.bar(x, y)
plt.title('Sample Bar Chart')
plt.xlabel('X')

— 略 — まず、グラフを作成するために、pyplotモジュールのtitle()やxlabel()を直接呼び出して利用しています。このコードをアレンジして複数のグラフを描こうと考えたとき、どのようにすればよいか手がかりがありません。

また、グラフの描画について暗黙的な動作をしています。plt.xlabel(‘X’)を実行するとグラフが描画されますが、plt.xlabel(‘X’)を削除するとplt.title()の実行後にグラフが描画されます。

このトピックは公式ドキュメントにも Coding Styles*1 として解説があります。本書ではなぜ「OOP-style がいいのか」「OOP-style のどこが明示的なのか」という点をコード例を交えて解説しています。

Matplotlib のユーザー、あるいは PyData 関連パッケージのユーザー構成の特長として、いわゆるソフトウェアエンジニアではない層が一定数存在するということが挙げられます。ソフトウェアエンジニアが前提として持っている(あるいは持っていて欲しい)コーディング規約やコーディングスタイルに関する知識および関心をあまり持たないユーザーに対して、Zen of Python の設計思想を伝える意図を持って、この一節が盛り込まれました。

なんだか見所紹介が Matplotlib 推しみたいになってしまいましたが、実際推しメンなので*2 紹介してみました!

謝辞

本書の刊行にあたり、共著者のほかに、出版社のみなさま、編集プロダクションのみなさま、レビューにご協力いただいたコミュニティのみなさまの多大なるサポートをいただきました。特に、今回はレビュワーのかたのご協力なしには完遂できなかったプロジェクトでした。裏を返すと、僕の進行の拙さにより執筆チームに負担を強いる結果となり、反省も多い企画となりました。お世話になりましたみなさまには、この場を借りて心よりの御礼を申しあげます。

経過はともあれ、成果物としての本書の善し悪しは読者のみなさまにご裁定いただくものと考えています。本書がわずかでもお役に立つことを願っています。

*1:https://matplotlib.org/faq/usage_faq.html#coding-styles

*2:といいつつ、執筆箇所でいうと僕はおもに Jupyter 周りの担当でした