【データサイエンス向け】Jupyterチートシート(随時更新)【Jupyter Notebook/Lab】


自分は普段データ分析やモデル構築を主にJupyter上で行なっています。
その中で何回調べんねん、ってやつをメモっておきます。(随時更新)

開発編

修正した.pyモジュールをリロードしたい

既にimportしたモジュールはキャッシュされるのか、普通にimportしなおしても更新されません。
以下でリロード(再import)できます。

import importlib
importlib.reload(hoge)
# hoge はimport済みのモジュール

これ割と最近まで知らなくて、毎回再起動してたのでマジで目からウロコです。
他にも%autoreloadでモジュールを自動更新する方法があります。

JupyterLabのタブ名を変えたい

いくつもサーバーを起動している場合、どのタブがどのサーバのノートブックかわからなくなることがよくあります。
以下のようにタブ名を変更することができます。

以下をJupyter内で実行

%%javascript
document.title='Jupyter-GPU'

あるいはビルド時に指定することができます。

jupyter lab build --name='Jupyter-GPU'

参考: https://github.com/jupyterlab/jupyterlab/issues/4422#issuecomment-395962448

描画編

matplotlibで日本語を描画したい

fontにこだわりがなければ、japanize-matplotlib が一番手取り早いと思います。

 pip install japanize-matplotlib
import matplotlib.pyplot as plt
import japanize_matplotlib

plt.plot([1, 2, 3, 4])
plt.xlabel('日本語を簡単に使える喜び')
plt.show()

Log編

pdbでデバッグしたい

デバッガの起動には2つのタイミングがあります。

ブレークポイント指定してデバッガ起動
以下コードを差し込む

from IPython.core.debugger import Pdb; Pdb().set_trace()

バグ発生時にデバッガ起動
特定のセルのみ適用

# デバッグしたいセルの先頭に挟む
%%debug

ノートブック全体に対して適用

# ノートブックのどこかに挟む
%pdb on
# バグ検知モードを切りたい時はこれ
%pdb off 

【JupyterNotebook/Lab】Jupyter上でデバッグする3つの方法【Pdb】

プログレスバーを表示したい

一旦これでいけるかと

from tqdm.auto import tqdm
import numpy as np

# tqdm で囲う
for i in tqdm(np.arange(1, 100000, 1)):
    # ここに処理
    pass

※ JupyterLabではプラグインをインストールしておかないと上手く表示されない場合があります。参考

pandas編

pandasのapplyでプログレスバーを表示したい

import pandas as pd
import numpy as np
from tqdm.auto import tqdm

# set description
tqdm.pandas(desc="これをやります")

# apply
df = pd.DataFrame({'hoge': np.arange(1, 100000, 1)})
df['hoge'] = df['hoge'].progress_apply(lambda x:  x + 1)

※ JupyterLabではプラグインをインストールしておかないと上手く表示されない場合があります。参考

DataFrameの表示が省略されるのを防ぎたい

表示件数や、一つのセルの中で表示できる文字数の上限を増やします。

import pandas as pd
pd.set_option("display.max_colwidth", 500) # 1セルに500文字入る
pd.set_option("display.max_rows", 100) # 100行表示できる

※ JupyterLabでset_optionが効かない場合、df[:100]のようにmax_rows以下のレコードを表示するようにすると上手く動作します(個人的な経験より)

ある特定のセルのみ省略を防ぎたい場合は以下のよう(@chik_taksさんより教えていただきました!)

with pd.option_context('display.max_colwidth', 200):
    display(df)

DataFrameをMarkdownの表形式で出力したい

DataFrameをマークダウンで出力してコピペできます。地味に使います

pip install pytablewriter
import pytablewriter
writer = pytablewriter.MarkdownTableWriter()
writer.from_dataframe(df)
writer.write_table()
# | col1 |  col2  |
# |------|--------|
# |hoge1 |line1   |
# |hoge2 |line2   |

ショートカット系

コマンドパレットへのショートカット

  • Jupyter:Cmd + Option + P
  • JupyterLab:Ctrl/Cmd + Shift + C

参考