こんにちは、技術開発ユニットの三浦です。
家族から「仕事で使うパソコンを買い替えたいので探すのを手伝ってほしい」と依頼され、先日電気屋さんにパソコンを見に行きました。
おおまかな要件を聞いて、おそらくこれくらいのスペックなら大丈夫かな、というパソコンをいくつか見つけたのですが、そこから1つに絞り込むところが難しく、店員さんに聞いたり、スマートフォンで調べたりしてなんとか1つに決めることが出来ました。パソコンは実際に使ってみないとなんとも言えないことがたくさんあります。その時、1週間くらいパソコンのPoCが出来たらいいのに・・・と思いました。
さて、私はデータ分析をする時Jupyter Notebookをよく使います。データを細かいステップで確認しつつ、加工出来る点がJupyter Notebookの魅力の1つだと思っています。そんなNotebookに関する面白い論文を最近拝見しました。
- StickyLand: Breaking the Linear Presentation of Computational Notebooks
- Zijie J. Wang, Katie Dai, W. Keith Edwards
- Submitted on 22 Feb 2022
- https://arxiv.org/abs/2202.11086
読んでみると、「なるほど」と思う点がいくつかありました。またこの論文で提案されている内容は、Jupyter Notebookの後継版JupyterLabの拡張機能として現在利用することが出来るようになっています。
論文の内容について簡単に触れ、実際に触ってみて感じたことを紹介させて頂きます。
論文について
「StickyLand: Breaking the Linear Presentation of Computational Notebooks」というタイトルが示すように、従来のNotebookは上下の垂直1方向に沿って新しい処理やドキュメントを追加していくスタイルです。
ただ、データ分析、とくにデータを細かく探索する場合にはこのスタイルが合わない場合があります。たとえば"A", "B", "C"という3つの仮説があり、これを試して結果を評価したい、という場合です。これを1つのNotebookで行おうとすると、以下のようなNotebookが出来上がると思います。
"A", "B", "C"を実行するコードが短くて積み重ねても画面に収まる場合は良いのですが、コードが長くなるとすべての結果を見るために何度も画面をスクロールしなければなりません。また、結果を比較するために出力されたグラフをキャプチャしてどこかに貼り付けておく、といったこともしており、その為に別のソフトウェアを起動することが、少しわずらわしいと感じることもあります。
もしもNotebookを以下のようなスタイルで作成出来たら、このわずらわしさが改善できるのではないでしょうか?
垂直方向に加え、水平方向にもセルが配置出来るスタイルです。論文ではこれを実現する為に、"StickyLand"というテクニックが論じられていて、JupyterLabの拡張機能として実装され、公開されています。
StickyLand
StickyLandを導入してJupyterLabで実際にNotebookを作ってみました。こんな感じになります。
StickyLandによってNotebookのセルを抜き出してNotebookの上に自由に配置することが出来るようになります。
抜き出して配置したセルは常に画面の手前に表示されるようになるので、すぐに内容を確認したいセルに適用すると便利です。
また抜き出したセルとNotebookは同じkernelで動いているので変数の値などは共有されていますし、セルの内容も常に同期されています(抜き出したセルは元のNotebookにおいて折り畳まれた状態になっています)。
StickyLandの導入方法やLiveデモなどは上記のURLから見ることが出来ます。StickyLandはJupyterLabの拡張機能なので、導入前にJupyterLabのインストールが必要です。
StickyLandを使って便利だと思った点
Notebookの全てのセルを自由に配置するよりは、必要なセルだけ抜き出して表示させる使い方のほうが良いと思いました。たとえば先ほどお見せしたNotebookだとそれぞれ次のような役割を想定してセルを表示しています。
StickyLandを使ってみて便利だな、と思った点を以下にまとめてみます。
必要なライブラリのimport
文をまとめられる
Notebook作成に着手する時、1番上のセルに「きっと使うだろう」と想定されるライブラリのimport
文をまとめて書くことが多いと思いますが、作業を進めていくと別のライブラリが必要になることがあります。そんな時は1番上のセルまで戻ってimport
文を追加するのですが、時々それが面倒になり、Notebookの途中でimport
文を追加してしまいます。
結果、あちこちにimport
文が点在したNotebookが出来上がってしまい、依存しているライブラリが何なのかが分かりづらくなってしまいます。
StickyLandでimport
用のセルを表示させておけば、必要なタイミングでimport
文を追加したり確認することが出来ますし、結果としてimport
文を1つのセルに集約したNotebookにすることが出来ます。
またNotebook全体で参照するような変数も同様にまとめておくと、変数名の衝突などを避けることが出来ます。
作業に必要なメモを見たり取ったりすることが簡単に出来る
StickyLandはコードセルだけでなく、Markdownセルも抜き出すことが出来ます。各変数の意味、抽出条件の指定などの情報はWebページやメールなど、別のソースで指定されていることが多いです。そういった情報をMarkdownセルにまとめておき、常に確認できるように表示しておくとあちこち画面を移らなくて便利だと思います。
また作業の途中で気づいたことや実行した手順などを記録する用途にも使えるので、もしかしたら学習する時などにも便利かもしれません。
データのプレビューを1箇所で確認出来る
データを加工していく時、作業の途中で都度データのプレビューを表示して問題が無いかを確認します。加工の処理が長くなっていくとこのプレビュー表示の結果がNotebookの中にどんどん溜まっていき、Notebookのサイズが大きくなってしまうことがあります。
処理過程のある程度のステップでプレビュー結果を残しておくことは大切なのですが、細かいステップでプレビュー表示したい場合はそれ専用のセルを作り、StickyLandで抜き出しておくと良いと思います。必要な時にプレビュー表示出来ますし、Notebookに新しいセルが追加されることもありません。
まとめ
StickyLandを上手く使うことで、これまでのNotebookに立体性が生まれ、見やすくなったり作業の効率を上げることが出来そうです。Notebookのセルを自由に配置することが出来るStickyLandのスタイルは、今後広がっていくかもしれません。私は普段、VSCodeでJupyter Notebookを起動しているのですが、VSCodeでも利用できるようになるといいなと感じました。
そして気が付いたらもう3月も終わり、4月からは新年度が始まります。新年度からも引き続き技術的な話題を通じ、自分たちがどんなことに興味を持っているのか、どんなことに取り組んでいこうとしているのかをお伝えしていければと思います。引き続きよろしくお願いします!