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

Как распиливать или хранить сессию ноутбука Jupyter (IPython) для более поздних версий

Скажем, я делаю большой анализ данных в ноутбуке Jupyter/Ipython с большим количеством трудоемких вычислений. Затем по какой-то причине мне приходится закрывать локальный сервер jupyter, но я хотел бы вернуться к последующему анализу без необходимости повторять все трудоемкие вычисления.


Что бы я хотел <забавно > как любить делать, это pickle или сохранить весь сеанс Jupyter (все pandas dataframes, np.arrays, переменные,...), чтобы я мог безопасно закрывать сервер знает, что я могу вернуться на свою сессию в том же состоянии, что и раньше.

Возможно ли это даже технически? Есть ли встроенная функция, которую я пропустил?


EDIT: на основе этого ответа есть %store magic, который должен быть "легким рассолом". Однако вы должны сохранить переменные вручную так:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
закрытие просмотра, перезапуск ядра
%store -r foo # r для обновления
print(foo) # "A dummy string"

который довольно близок к тому, что я хочу, но необходимость делать это вручную и неспособность различать разные сеансы делает его менее полезным.

4b9b3361

Ответ 1

(Я бы предпочел комментировать, чем предлагать это как реальный ответ, но мне нужно больше репутации для комментариев.)

Вы можете хранить большинство данных, подобных переменным, систематически. То, что я обычно делаю, это хранить все dataframes, массивы и т.д. В pandas.HDFStore. В начале записной книжки объявите

backup = pd.HDFStore('backup.h5')

а затем сохраните любые новые переменные при их создании

backup['var1'] = var1

В конце концов, вероятно, хорошая идея сделать

backup.close()

перед выключением сервера. В следующий раз, когда вы захотите продолжить работу с ноутбуком:

backup = pd.HDFStore('backup.h5')
var1 = backup['var1']

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

Ответ 2

Этот вопрос связан с: Как кешировать в IPython Notebook?

Для сохранения результатов отдельных ячеек вам может понадобиться кеширование магии.

%%cache longcalc.pkl var1 var2 var3
var1 = longcalculation()
....

При перезагрузке ноутбука содержимое этой ячейки загружается из кеша.

Это точно не отвечает на ваш вопрос, но этого может быть достаточно, если результаты всех длительных вычислений будут восстановлены быстро. Это в сочетании с нажатием кнопки "Run-all" на верхней части ноутбука для меня является приемлемым решением.

Магия кеша не может сохранить состояние целого ноутбука пока. Насколько мне известно, еще нет системы для возобновления "ноутбука". Для этого потребуется сохранить всю историю ядра python. После загрузки ноутбука и подключения к ядру эта информация должна быть загружена.

Ответ 3

Я знаю, что это поздний ответ и, возможно, не совсем то, что вы хотели, но если у вас есть все переменные, определенные в разных ячейках, и проблема в том, что там много ячеек, теперь вы можете запускать все ячейки: Cell → Выполнить все.

Опять же, это не решает каждый рабочий процесс, но некоторые люди будут иметь все переменные /import/etc в своих ячейках, но обнаружили бы, что это сложно перепрограммировать все. Это работает для меня.