【IPython】magic commandまとめ
2022/11/18
個人的に使えるなと思ったIPythonのmagic command
をまとめてみました。
%lsmagic
現在のnotebookで使用可能なIPythonのmagic command一覧を表示します。
In[1]: %lsmagic
Out[2]:
Available line magics:
%alias %alias_magic %autoawait %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %conda %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %pip %popd %pprint %precision %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %shell %store %sx %system %tb %tensorflow_version %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode
Available cell magics:
%%! %%HTML %%SVG %%bash %%bigquery %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%shell %%svg %%sx %%system %%time %%timeit %%writefile
補足: magic command + ?でdocument参照
例えば%timeit
コマンドのdocumentを見たい場合は%timeit?
を実行することで仕様を確認できます。
%pwd, %ls, %pip...
kernelでのコマンドはmagic commandで使用可能な場合が多いです。
In[1]: %pwd
Out[1]: /content
In[2]:
current_dir = %pwd
print(current_dir)
Out[2]:
/content
補足: !を使うとシェルコマンド実行
magic commandではありませんが、!
を使用してもシェルコマンドを実行できます。
In[1]: !ls
Out[1]: sample_data
notebook上からでもshell操作ができるのでよく使います。
※ ただし、作業ディレクトリを移動するために!cd
を使用しても、実際に移動することはできません。
In[1]: !pwd
Out[1]: /content/sample_data
In[2]:
!cd ..
!pwd
Out[2]
/content/sample_data
これはノートブック内の!
シェルコマンドが一時的なサブシェルで実行されるからです。
永続的に作業ディレクトリを変更したい場合は%cd
を使いましょう。
%%writefile
%%writefile
をセルに記載しておくと、実行時にセルの中身を指定ファイル先へ書き込みます(ファイルがない場合は生成します)。
%%writefile hello.py
def hello():
print('Hello!!!')
def bye():
print('bye...')
↑は同フォルダ内にhello
関数とbye
関数が定義されたhello.py
を生成します。
%load
指定ファイル先のファイルを読み込みセルに転記します。 指定先は相対パスだけではなく、URL指定も可能です。
%load hello.py
↓実行後
# %load hello.py
def hello():
print('Hello!!!')
def bye():
print('bye...')
また、オプションs
を使用することで特定のクラスや関数のみをロードすることも可能です。
# %load -s hello hello.py
def hello():
print('Hello!!!')
%run
セル内でそのままpythonを実行してしまいたい、という場合には%run
が使えます。
%run main.py
%prun, %%prun
%prun
はprofileモジュールを使ってpythonコードをプロファイリングすることができます。
プロファイルとはどの関数でどれぐらい時間がかかっているかを調べることです。
例えば以下の関数を%prun
すると
import time
%prun time.sleep(1)
↓このような結果が得られます。
4 function calls in 1.001 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
1 1.001 1.001 1.001 1.001 {built-in method time.sleep}
1 0.000 0.000 1.001 1.001 {built-in method builtins.exec}
1 0.000 0.000 1.001 1.001 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
ncalls
などの意味ですが、それぞれ以下のとおりになります。
- ncalls
呼び出し回数 - tottime
関数の実行にかかった時間の合計(別の関数呼び出しにかかった時間を除く) - cumtime
関数の実行にかかった時間の合計(別の関数呼び出しにかかった時間を含む) - percall
かかった時間を呼び出し回数で割ったもの
%prun 関数
だとその関数のプロファイリング、%%prun
だとセル内関数のプロファイリングを行います。
%time, %%time, %timeit, %%timeit
処理時間を計りたい場合は%time
が使えます。
In[1]: %time a = [x ** 2 for x in range(100000)]
Out[1]:
CPU times: user 41.7 ms, sys: 5.62 ms, total: 47.3 ms
Wall time: 57.2 ms
%%time
はセル全体の処理時間を計ります。
In[1]:
%%time
a = [x ** 2 for x in range(100000)]
sum(a)
Out[1]:
CPU times: user 41.5 ms, sys: 4.84 ms, total: 46.3 ms
Wall time: 60.6 ms
%timeit -r [R] -n [N]
は処理をR回実行し、各測定の中でN回プログラムを実行して統計量を計算します(オプションr
、n
は省略可能ですが、デフォルトだとRが7回、Nが100000000回となるので場合によっては処理が完了するまでに時間がかかります)。
In[1]: %timeit -r 1000 -n 3 a = range(10000)
Out[1]: 288 ns ± 342 ns per loop (mean ± std. dev. of 1000 runs, 3 loops each)
%%timeit
は%timeit
のセル実行版です。
%who, %who_ls, %whos
IPython上で定義されている変数の詳細を知りたい場合は%who
、%who_ls
、%whos
などが使えます。
In[1]:
a = 1
b = 'hoge'
In[2]: %who
Out[2]: a b
In[3]: %who_ls
Out[3]: ['a', 'b']
In[4]: %whos
Out[4]:
Variable Type Data/Info
----------------------------
a int 1
b str hoge
%who
は定義されている変数名の表示、%who_ls
は変数名を配列として取得、%whos
は変数名と型、データの詳細を表示します。
%reset
定義済みの変数や関数をリセットします。
In[1]:
a = 1
b = 'hoge'
In[2]: %who
Out[2]: a b
In[3]: %reset
In[4]: %who
Out[4]: Interactive namespace is empty.
%env
カーネル上で定義されている環境変数一覧を表示します。
In[1]: %env
Out[2]:
'ENV': '/root/.bashrc',
'NCCL_VERSION': '2.8.4-1',
'TF_FORCE_GPU_ALLOW_GROWTH': 'true',
'NO_GCE_CHECK': 'False',
'PWD': '/',
'NVARCH': 'x86_64',
'HOME': '/root',
...
%%javascript, %%sh, %%bash, %%markdown, %%latex...
pythonしか実行できないと思われがちですが、magic commandを使用することでjavascript
やbash
スクリプトなども実行できたりします。
%%javascript
const num1 = 12
const num2 = 10
const num3 = 35
let largest;
if(num1 >= num2 && num1 >= num3) {
largest = num1;
}
else if (num2 >= num1 && num2 >= num3) {
largest = num2;
}
else {
largest = num3;
}
element.innerHTML = '<h1>The Largest Number is : ' + largest + '</h1>'