72
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-24

前提条件

  • 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

    • 一度指定した出力方法を変更するには、カーネルのリスタートを行う。
72
66
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?