Help us understand the problem. What is going on with this article?

Jupyter Notebook マジックコマンド自分的まとめ

More than 1 year has passed since last update.

前提条件

  • macOS Catalina 10.15.1
  • anaconda 4.17.12
  • jupyter-notebook 5.0.0
  • Python 3.6.9

マジックコマンドとは

マジックコマンド(Magic Commands)は、IPythonのカーネルから提供される仕組み。Notebookの動作に関連した機能のほか、ディレクトリ移動やファイル一覧を表示するなどのユーティリティ的な機能を提供する。

マジックコマンドの基本

先頭に%を入力して続けてコマンドを入力する。現在のディレクトリを出力するコマンドは次のようになる。

%pwd

マジックコマンドの%pwdは、シェルを利用した!pwdと違いがないようにも見えるが、!を利用したコマンド実行はOSのシェルに依存するのに対し、マジックコマンドはIPythonカーネルから提供される機能に依存。

マジックコマンドが何らかの値を変える場合、Pythonの関数を呼び出した場合と同様、戻り値を変数に代入できる。

curr_dir = %pwd
curr_dir

使いがちなマジックコマンド

  • %time

Pythonの実行時間を計測するマジックコマンド。

  %time sum(range(10000))
  CPU times: user 226 μs, sys: 0 ns, total: 226 μs
  Wall time: 230 μs
出力 説明
Wall time プログラムの開始から終了までにかかった時間
CPU times: user user CPU time。プログラム自体の実行に要した時間
sys system CPU time。OSのシステムコールに要した時間
  • %timeit

複数回試行した結果の計測値を要約して返すマジックコマンド。以下の場合、1000回の繰り返し処理を7回試行した場合の時間が出力されている。

  %timeit sum(range(10000))
  224 µs ± 21.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

ループ回数と試行回数はオプションで指定可能。

  # ループ回数2000回、試行回数5回
  %timeit -n 2000 -r 5 sum(range(10000))
  215 µs ± 17.9 µs per loop (mean ± std. dev. of 5 runs, 2000 loops each)

複数行のPythonコードに対して%timeitによる計測を行う場合、以下のように先頭の%を2つ続け、%%にする。(Cell magics)

  %%timeit -n 1000 -r 3

  for i in range(1000):
    i * 2

  75.2 µs ± 9.58 µs per loop (mean ± std. dev. of 3 runs, 1000 loops each)
  • %history

コードセルの実行履歴を一覧で取得するマジックコマンド。

  # 直近5つの履歴を取得
  %history -l 5
  • %ls

UNIXコマンドのlsと同様の動作をするマジックコマンド。!lsとは違い、%lsはOSの種別を判断して、内部で実行するコマンドを使い分ける。(macOSの場合はlsコマンド、Windowsの場合はdirコマンド)

  • %autosave

Auto Saveの頻度を変更できる。(default120秒)

  # Auto Saveを60秒に1回実行する。
  %autosave 60
  • %matplotlib

Matplotlibに関する設定を行うマジックコマンド。

    • %matplotlib inline

    inlineを指定した場合、コードセル直下にグラフが描画される。

    image-20191125010847446.png

    • %matplotlib tk

    tkを指定した場合、別ウィンドウにインタラクティブなグラフが出力される。

    image-20191125011247935.png

    • %matplotlib notebook

    notebookを指定した場合、コードセルの直下にインタラクティブなグラフが出力される。

    image-20191125011753694.png

    • 一度指定した出力方法を変更するには、カーネルのリスタートを行う。
mgsk_2
ただの高級派遣。仕事では一時代遅れたニッチな技術ばかり使っているため、なんとかせねばと最近は仕事の傍PythonとかJupyterとかを勉強中。たまにGolangに浮気。ベースはWindowsユーザで、稀にmacOSユーザの顔をする。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away