この記事は jupyter notebook Advent Calendar 2016 の12月13日の記事です。
Jupyter Notebookを使う上で,この機能を知らない人を見つけたら教えてあげたくなるような小ネタをいくつか紹介します。
IPython.display.display
Jupyter Notebook上でpandasのDataFrameを表示すると,HTMLのtable要素として見やすく表示してくれます。活用している方も多いかと思います。
df[df['f'] == 'C']
と df[df['f'] == 'T']
を表示したいのですが,Jupyter Notebookで表示されるのはそれぞれのセルで最後に評価されたものだけです。そのため,表示したいDataFrameごとにセルを分ける必要があります。
しかしながら,このように複数のセルに分けてしまうと,DataFrameに前処理を行った場合などにいくつものセルを再実行するのは面倒です。このような場合には IPython.display.display
を使うのが便利です。
以下のページで存在を知りました。
tqdm
Iterableを渡すだけでプログレスバーを表示してくれるtqdmというPythonのライブラリがあります。
コマンドライン上で使うとこんな感じです。
import time from tqdm import tqdm s = 0 for i in tqdm(range(20)): s += i time.sleep(0.1) print(s)
このライブラリはコマンドライン上でしか使えないと思い込んでいたのですが,ドキュメントをよく読むとIPython/Jupyter Integrationなるものが追加されていました。これは以下のように使えます。
import time from tqdm import tqdm_notebook as tqdm s = 0 for i in tqdm(range(20)): s += i time.sleep(0.1) print(s)
SSHポート転送
知っている人にとっては「それ当たり前じゃん!」となってしまうかもしれませんが,小ネタが2つだけだと物足りなかったので紹介させてください。
手元のコンピュータの性能が貧弱な場合には,クラウド上のサーバーや研究室の計算機などでJupyter Notebookを使いたいことがあります。
しかしながら,何も設定していない状態だと,Jupyter Notebookを起動したサーバーのIPアドレスの8888ポートをブラウザに打ち込んでも接続できないと思います。
これはJupyter Notebookのデフォルト設定で127.0.0.1以外に8888ポートを公開していないことが原因なのですが,これを公開設定にするだけではセキュリティ的に問題があります。そのため,接続元のIPアドレスに制限をかけたり,パスワードをかけたりするための設定が必要です。扱っているデータによってはSSL/TLSの設定も必要かもしれません。これらの設定については以下のページで解説されています。
Running a notebook server — Jupyter Notebook 5.1.0.dev documentation
しかしながら,これらの設定を行うのはちょっと面倒です。もっと簡単な方法として,SSHのポート転送機能を使う方法があります。私はSSHでサーバに接続するとき,以下のようにしています。
$ ssh -L8888:localhost:8888 username@hostname
-L8888:localhost:8888
の部分は,手元のコンピュータの8888ポートへの接続を,SSHでの接続先から見てlocalhostの8888ポートに転送するという設定です。SSHでの接続先でJupyter Notebookを起動してから,ブラウザで手元のコンピュータのlocalhost:8888に接続すれば繋がります。Jupyter Notebookから見ればlocalhostからのアクセスとなるためアクセス制限にも引っかかりません。
サーバー上でJupyter Notebookを使う際には,ほかにも以下のようなことに気をつけています。
- 「ブラウザが起動できませんでした」という警告が出るのが目障りなので,
jupyter notebook --no-browser
としてブラウザが起動しないようにしています。 - SSHの接続が切断されてしまうとJupyter Notebookが停止してしまい,再接続しても復活しないので,何かしらの工夫が必要です。私の場合はターミナルマルチプレクサとしてtmuxを使うことでこれを防いでいます。tmuxをインストールすることが難しい環境では
nohup &
を使うのが良いでしょう(参考: http://www.glamenv-septzen.net/view/854)。
関連書籍
- 作者: 池内孝啓,片柳薫子,岩尾エマはるか,@driller
- 出版社/メーカー: 技術評論社
- 発売日: 2017/09/09
- メディア: 大型本
- この商品を含むブログを見る
IPythonデータサイエンスクックブック ―対話型コンピューティングと可視化のためのレシピ集
- 作者: Cyrille Rossant,菊池彰
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/25
- メディア: 大型本
- この商品を含むブログ (1件) を見る