[JupyterNotebook] マジックコマンドなどの便利機能や設定

Posted on 2019/03/23 in programming , Updated on: 2019/04/04

Input, Output セルの履歴確認

Input / Output セルの履歴をそれぞれ、リスト型、辞書型で確認可能。

print(In)
# これまでInputセルに入力した内容がリスト型で返される。

print(Out)
# これまで出力された結果が、辞書型(キーはOutputセル番号)で返される。

print(In[1])
# インデックスで指定することも可能。

1つ前のセルの Output の確認には、_を使う。2つ前のセルなら__アンダースコア2つ。

# 1つ前のセルのoutputを出力
print(_)

# 2つ前のセル
print(__)

shell コマンドを使う

!を付けることで、Notebook上で、shell コマンドを使うことができる。(下記は MacOs コマンド)
また、各コマンドは変数として利用することも可能。

# カレントディレクトリのコンテンツを表示
!ls
directory_contents = !ls

# カレントディレクトリを表示
!pwd
current_directory = !pwd

# 文字列を表
!echo "Hello world"
# "Hello world"

word = 'hello world'
!echo {word}
# hello world

マジックコマンド

%matplotlib inline

matplotlib 利用時に、描画するグラフを notebook 内に表示する。

%matplotlib inline

%matplotlib tk

inline とは対照的に、このコマンドを実行しておくと、描画するグラフが、別ウィンドウでインタラクティブモードで出力される。

%matplotlib tk

%matplotlib notebook

Notebook 中に、描画するグラフがインタラクティブモードで出力される。

%matplotlib notebook

%time

処理にかかった時間を表示してくれるコマンド。処理時間を計測したい処理の行頭に %time を書く。

%time sum(range(1000000))
# Wall time: 64 ms
#    499999500000

Output セルの Wall time が実際にかかった時間を示している。 2行目には、処理の結果が返ってくる。

%timeit

複数回処理を試行して、処理にかかった時間を表示してくれる。使い方は、処理時間を計測したい処理の行頭に %timeit を書く。

%timeit [i**2 for i in range(10000)]
# 73.7 ms ± 1.87 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

この結果は、10回繰り返しのループを7回試行した際の、平均±標準偏差が出力されている。

%history

コードセルの実行履歴を一覧で返す。

%history

# %timeit [i**2 for i in range(10000)]
# [i**2 for i in range(10000)]
# %time [i**2 for i in range(10000)]
# %time sum(range(1000000))
# %timeit sum(range(1000000))
# %history

%autosave

JupyterNotebook にはデフォルトで、Notebook の変更記録を自動的に残す Auto Save 機能がある。%autosaveコマンドで、この自動記録する時間間隔を変更することができる。変更したい時間をコマンドの後ろに書く。時間の単位は sec。(デフォルトでは、120sec)

%autosave 300

よく使うライブラリの自動インポート

データ処理によく使う、pandas や NumPy など利用頻度の高いライブラリを毎回インポート文を書くのではなく、自動的にインポートさせておく方法がある。

  1. home/~.ipython/profile_default ディレクトリを開く。(.ipythonは隠しフォルダ)
  2. profile_default ディレクトリ内に、startupフォルダを作成。初めから存在する場合は、それでOK。
  3. startupフォルダ内に、start.pyを作成して、中身に自動インポートしたいライブラリの import 文等を記載して保存する。
  4. Jupyter Notebook を起動して確認する。

    <例>
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

import 分だけでなく、pd.options.display.max_columns=30等の pandas オプション設定も記載できる(つまり何でも)。

start.pyのファイル名は、.py 以外は任意の名前でOK。複数のファイルを置いても、全てアルファベット順に読み込まれる。

注意
Notebookを共有する際には、注意が必要。共有する人にもわかるように、初めの Input セルに、start.pyの内容を追記するようにする。