2015-12-17 7 views
35

Nehmen wir an, ich mache eine größere Datenanalyse in Jupyter/Ipython Notebook mit viel zeitaufwändigen Berechnungen getan. Dann muss ich aus irgendeinem Grund den Jupyter-Local-Server I herunterfahren, aber ich würde gerne später zur Analyse zurückkehren, ohne die zeitaufwändigen Berechnungen erneut durchführen zu müssen.Wie man Jupyter (IPython) Notebook-Sitzung für später einlegen oder speichern kann


Was würde ich wie Liebe zu tun pickle oder speichern Sie die ganze Jupyter Sitzung (alle Pandas Datenrahmen, np.arrays, Variablen, ...), so kann ich sicher herunter den Server zu wissen, nach unten kann ich Kehre zu meiner Sitzung in genau demselben Zustand wie zuvor zurück.

Ist es sogar technisch möglich? Gibt es eine eingebaute Funktionalität, die ich übersehen habe?


EDIT: basierend auf this Antwort gibt es eine %storemagic die "leichte Gurke" sein sollte. Allerdings müssen Sie manuell die Variablen speichern etwa so:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
Schließen seesion, Neustarten Kernel
%store -r foo # r für Aktualisierungen
print(foo) # "A dummy string"

die ziemlich nahe an was ich möchte, aber manuell tun muss und nicht zwischen verschiedenen Sitzungen unterscheiden kann es ist weniger nützlich.

+1

Irgendwelche Fortschritte dabei? Ich habe nur bemerkt, dass es in der Spyder IDE einen Arbeitsbereich gibt, der Variablen in * .mat speichern kann. Aber nicht sicher, ob dies in Jupyter Notebook portiert werden könnte. – cqcn1991

Antwort

14

(I statt bieten diese als eine tatsächliche Antwort kommentieren würde, aber ich brauche mehr Ruf zu kommentieren.)

Sie können die meisten Daten speichern artige Variablen in systematischer Weise. Was ich normalerweise mache, speichert alle Datenrahmen, Arrays usw. in pandas.HDFStore. Zu Beginn des Notebooks, erklären

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

und speichern Sie dann alle neuen Variablen, wie Sie sie produzieren

backup['var1'] = var1 

Am Ende wahrscheinlich eine gute Idee

backup.close() 

zu tun, bevor Server ausschalten. Das nächste Mal, wenn Sie mit dem Notebook fortsetzen wollen:

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

Ehrlich gesagt, würde ich eine integrierte Funktionalität in ipython Notebook bevorzugen, auch. Sie können nicht alles auf diese Weise speichern (z. B. Objekte, Verbindungen), und es ist schwer, das Notebook mit so vielen Standardcodes zu organisieren.

+3

Dies ist eine sehr interessante Problemumgehung, aber ich kann buchstäblich den Schmerz spüren, der mit der Aufrechterhaltung eines solchen Systems verbunden ist. Danke für den Tipp tho :) –

6

Diese Frage zusammenhängt: How to cache in IPython Notebook?

die Ergebnisse der einzelnen Zellen zu speichern, kommt die caching magic praktisch.

Beim erneuten Ausführen des Notebooks wird der Inhalt dieser Zelle aus dem Cache geladen.

Dies beantwortet nicht genau Ihre Frage, aber es könnte ausreichen, wenn die Ergebnisse aller langwierigen Berechnungen schnell wiederhergestellt werden. Dies in Kombination mit dem "All-Run" -Knopf oben auf dem Notebook ist für mich eine praktikable Lösung.

Die Cache-Magie kann den Zustand eines ganzen Notizbuches yet nicht speichern. Meines Wissens gibt es bisher kein anderes System, um ein "Notebook" wieder aufzunehmen. Dies würde erfordern, den gesamten Verlauf des Python-Kernels zu speichern. Nach dem Laden des Notebooks und dem Verbinden mit einem Kernel sollten diese Informationen geladen werden.