33

データセットを分析するipythonノートブックを作成しました。次に、このコードを使用して、さまざまなデータセットをループします。

コードは約50個のセルに分割されています(コメント、マークダウンの説明などを含む)。ノートブックの一部をループで実行したり、ノートブック全体を異なる入力パラメーターで実行したりする方法はありますか?

特定のセルのみを実行して分析の一部を実行(および実験)するのが本当に好きなので、すべてのセルを1つの関数にマージしたり、Pythonスクリプトとしてコードをダウンロードしたりしたくありません。

基本的に、スクリプトの一部を関数にリファクタリングし、ループで関数を呼び出します。これは、「スクリプトの一部」がノートブックセルであるということだけです。

4

3 に答える 3

34

これらのシナリオで私が通常行うことは、重要なセルを関数としてラップし(それらをマージする必要はありません)、パラメーターのリストを反復処理してこれらの関数を呼び出す特定のマスターセルを用意することです。たとえば、これは私のノートブックの1つで「マスターセル」がどのように見えるかです。

import itertools
# parameters
P_peak_all = [100, 200]
idle_ratio_all = [0., 0.3, 0.6]
# iterate through these parameters and call the notebook's logic
for P_peak, idle_ratio in itertools.product(P_peak_all, idle_ratio_all):
    print(P_peak, idle_ratio, P_peak*idle_ratio)
    print('========================')
    m_synth, m_synth_ns = build_synth_measurement(P_peak, idle_ratio)
    compare_measurements(m_synth, m_synth_ns, "Peak pauser", "No scheduler", file_note="-%d-%d" % (P_peak, int(idle_ratio*100)))

ノートブック全体でデータをドラッグして(つまり、データを使用してセルの下部にある各関数を呼び出す)、個々のセルのデータをライブでテストすることができます。たとえば、一部のセルには次のように記載されている場合があります。

def square(x):
    y = x**2
    return y
square(x) # where x is your data running from the prior cells 

これにより、ライブで実験しながら、マスターセルから汎用機能を呼び出すことができます。

関数を使用してノートブックをリファクタリングするのは追加の作業ですが、実際にはノートブックの読みやすさが向上することがわかりました。これは、長期間後にノートブックに戻ったときに役立ち、「適切な」スクリプトまたはモジュールに変換するのが簡単です。必要。

于 2013-03-26T12:25:17.680 に答える
3

安価ですが速いトリックは、ある種のwhileループで「すべてのセルを実行する」を使用することです。

Ipython / Jupyter-「上記のすべてのセルを実行」をプログラムできますか?

change_parameters

あなたのコード

これを最後のセルに入れます。

display(Javascript('IPython.notebook.execute_all_cells()'))

于 2020-06-16T13:00:30.437 に答える
1

papermill.execute_notebookこのタスクを実行するように設計されています:

import papermill as pm

pm.execute_notebook(
   'path/to/input.ipynb',
   'path/to/output.ipynb',
   parameters=dict(alpha=0.6, ratio=0.1)
)

詳細:ドキュメント|

于 2021-07-26T13:13:41.610 に答える