Подтвердить что ты не робот

Запуск частей ноутбука ipython в цикле/с различным входным параметром

Я написал записную книжку ipython, которая анализирует набор данных. Теперь я хочу использовать этот код для перебора разных наборов данных.

Код разбивается на примерно 50 ячеек (включая комментарии, объяснения по уценке,...). Есть ли способ запустить части ноутбука в цикле или запустить целый ноутбук с различными входными параметрами?

Я не хочу объединять все ячейки в одну функцию или загружать код как питон script, так как мне очень нравится запускать (и экспериментировать с) части анализа, выполняя только определенные ячейки.

В основном его рефакторинговые части script в функцию и вызов функции в цикле, просто что "части script" являются ячейками ноутбука.

4b9b3361

Ответ 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 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 

Позволяет вам экспериментировать в прямом эфире и все еще вызывать общие функции из основной ячейки.

Я знаю, что некоторые дополнительные работы по рефакторингу вашего ноутбука с помощью функций, но я нашел, что на самом деле он повышает читаемость ноутбука, что полезно, когда вы возвращаетесь к нему через более длительный период, и проще преобразовать его в "правильный" script или модуль, если необходимо.