2015-07-06 5 views
9

Umwelt:Wie in IPython Notebook zwischenspeichern?

  • Python 3
  • IPython 3,2

Jedes Mal, wenn ich ein IPython Notebook herunterzufahren und öffnen Sie es erneut, muss ich alle Zellen erneut ausführen. Einige Zellen erfordern jedoch eine intensive Berechnung.

Im Gegensatz dazu speichern knitr in R die Ergebnisse standardmäßig in einem Cache-Verzeichnis, so dass nur neuer Code und neue Einstellungen die Berechnung aufrufen würden.

Ich schaute auf ipycache, aber es scheint eine Zelle statt des Notebooks zu cachen. Gibt es in IPython ein Gegenstück zum Cache knitr?

+1

Ich weiß nicht, ob es solche Fähigkeiten in Ipython gibt, aber Sie könnten Ihre teuren Berechnungen einfach mit z. B. [joblib.Memory] (https://pythonhosted.org/joblib/memory.html) auf die Festplatte zwischenspeichern). – rth

Antwort

0

Können Sie ein Beispiel geben, was Sie zu tun versuchen? Wenn ich etwas in einem IPython-Notebook starte, das teuer ist, schreibe ich es fast immer auf Disk-Nachwort. Zum Beispiel, wenn meine Daten eine Liste von JSON-Objekt ist, schreibe ich es auf der Festplatte als Linie JSON formatierte Strings getrennt:

with open('path_to_file.json', 'a') as file: 
    for item in data: 
     line = json.dumps(item) 
     file.write(line + '\n') 

Sie können dann zurück in den Daten auf die gleiche Weise lesen:

data = [] 
with open('path_to_file.json', 'a') as file: 
    for line in file: 
     data_item = json.loads(line) 
     data.append(data_item) 

Ich denke, das ist im Allgemeinen eine gute Übung, weil es Ihnen ein Backup gibt. Sie können auch Gurke für das gleiche verwenden. Wenn Ihre Daten wirklich groß sind, können Sie tatsächlich gzip.open direkt in eine Zip-Datei schreiben.

EDIT

Um ein scikit lernen Modell auf der Festplatte Verwendung joblib.pickle zu speichern.

from sklearn.cluster import KMeans 

km = KMeans(n_clusters=num_clusters) 
km.fit(some_data) 


from sklearn.externals import joblib 
# dump to pickle 
joblib.dump(km, 'model.pkl') 

# and reload from pickle 
km = joblib.load('model.pkl') 
+0

Ich habe versucht, Machine-Learning-Modelle auf Datensätze anzuwenden. Zum Beispiel importiere ich einige Daten (einige hundert MB) mit Pandas und trainiere und teste dann zwei Modelle von scikit-learn. Ich möchte alle intermediär transformierten DataFrames sowie die trainierten Modelle "zwischenspeichern". So kann ich Experimente auf dem intermediären DataFrame "weitermachen", ohne vom Boden aus zu lesen. – Zelong

+0

@zelong ok, du solltest 'joblib' verwenden, um deine' sklearn' Modelle zu picken. Siehe meine Bearbeitung oben. Und um Ihre Daten auf die Festplatte zu schreiben, benutzen Sie einfach 'dataframe.to_csv ('yourfile.csv)' – brandomr

+0

Vielen Dank. Das Beizen von scikit-learn Modell sieht ziemlich gut aus. Ich habe mit DataFrames einiges ausprobiert und es scheint sehr anspruchsvoll zu sein, eine Menge von intermediärem DataFrame in CSV-Dateien zu speichern. Es scheint jedoch, dass IPython kein Gegenstück zum 'RData'-Cache bietet, der alles in einen einzigen Cube stellt. – Zelong

1

Leider scheint es nicht so, als gäbe es so etwas wie einen automatischen Cache. Die magische Option %store ist in der Nähe, erfordert jedoch, dass Sie das Caching und das erneute Laden manuell und explizit durchführen.

In Ihrem Jupyter Notebook:

a = 1 
%store a 

Nun lassen Sie uns sagen, Sie neu gestartet schließen wird das Notebook und der Kernel. Sie haben keinen Zugriff mehr auf die lokalen Variablen. Sie können jedoch die Variablen, die Sie gespeichert haben, mit der Option -r neu laden.

0

In der Tat ist die Funktionalität, die Sie fragen, bereits da, keine Notwendigkeit, es manuell neu zu implementieren, indem Sie Ihre Dumps tun.

Sie können die Verwendung der% Speicher verwenden oder vielleicht besser die %% Cache Magie (Erweiterung), die Ergebnisse dieser zeitweise Zellen zu speichern, so dass sie nicht aus (siehe https://github.com/rossant/ipycache) neu berechnet werden

Es ist so einfach wie:

%load_ext ipycache 

Dann in einer Zelle z:

%%cache mycache.pkl var1 var2 
var1 = 1 
var2 = 2 

Wenn Sie diese Zelle zum ersten Mal ausführen, wird der Code ausgeführt wird, und die Variablen var1 und var2 in mycache.pkl im aktuellen Verzeichnis zusammen mit den Ausgängen gespeichert. Rich-Display-Ausgaben werden nur gespeichert, wenn Sie die Entwicklungsversion von IPython verwenden. Wenn Sie diese Zelle erneut ausführen, wird der Code übersprungen, die Variablen werden aus der -Datei geladen und in den Namespace injiziert, und die Ausgaben werden im Notizbuch wiederhergestellt.