Jupyter/Ipythonノートブックでより多くの時間のかかる計算を行って、より大きなデータ分析を行っているとしましょう。その後、何らかの理由で、jupyterローカルサーバーIをシャットダウンする必要がありますが、時間のかかるすべての計算をやり直すことなく、後で分析に戻りたいと思います。
私がすること 好む 好きなことはpickle
またはJupyterセッション全体(すべてpandasデータフレーム、np.arrays、変数など)を保存することです以前とまったく同じ状態のセッション。
技術的にも可能ですか?見落としている組み込み機能はありますか?
EDIT:this に基づいて%store
magic があるはずの答えがあります「軽量漬物」。ただし、次のように変数を手動で保存する必要があります。
#inside a ipython/nb session
foo = "A dummy string"
%store foo
シーションを閉じ、カーネルを再起動します%store -r foo
#更新用のrprint(foo) # "A dummy string"
これは私が望むものにかなり近いですが、手動で行う必要があり、異なるセッションを区別できないため、あまり役に立ちません。
ディルはあなたの質問によく答えると思います。
pip install dill
ノートブックセッションを保存します。
import dill
dill.dump_session('notebook_env.db')
ノートブックセッションを復元します。
import dill
dill.load_session('notebook_env.db')
(これを実際の回答として提供するよりもコメントしたいのですが、コメントするにはより多くの評判が必要です。)
ほとんどのデータのような変数を体系的に保存できます。私が通常やることは、すべてのデータフレーム、配列などを pandas.HDFStore に保存することです。ノートブックの冒頭で、宣言します
backup = pd.HDFStore('backup.h5')
そして、それらを生成するときに新しい変数を保存します
backup['var1'] = var1
最後に、おそらく行うことをお勧めします
backup.close()
サーバーの電源を切る前に。次回ノートブックを使用する場合:
backup = pd.HDFStore('backup.h5')
var1 = backup['var1']
正直言って、ipythonノートブックの組み込み機能も好みます。この方法(オブジェクト、接続など)をすべて保存することはできません。また、非常に多くの定型コードでノートブックを整理しておくのは困難です。
この質問は次のものに関連しています: IPython Notebookでキャッシュする方法?
個々のセルの結果を保存するには、 キャッシングマジック が便利です。
%%cache longcalc.pkl var1 var2 var3
var1 = longcalculation()
....
ノートブックを再実行すると、このセルのコンテンツがキャッシュからロードされます。
これはあなたの質問に正確に答えているわけではありませんが、すべての時間のかかる計算の結果が迅速に回復するのに十分かもしれません。これは、ノートブックの上部にある[すべて実行]ボタンを押すことと組み合わせて、私にとって実行可能なソリューションです。
キャッシュマジックは、ノートブック全体の状態を保存できません まだ 。私の知る限り、「ノートブック」を再開するシステムはまだありません。これには、pythonカーネルのすべての履歴を保存する必要があります。ノートブックをロードし、カーネルに接続した後、この情報をロードする必要があります。