Veröffentlicht am 19-02-2019

Warum Jupyter nicht mein ideales Notebook ist

Vom Notebook-Prototyping bis zur richtigen Produktion

Jupyter-Notebook wurde als bevorzugtes Prototyping-Tool für Datenwissenschaftler beschrieben. Dieser Beitrag beschreibt das schnelle Tempo von EDA zu API. Ohne Jupyter.

Jupyter Hauptmerkmale sind:

  • Inline-Code-Ausführung
  • einfache ideenstrukturierung
  • schöne Anzeige von Bildern und Datenrahmen

Diese allgemeine Flexibilität hat es zu einem bevorzugten Werkzeug im Vergleich zur rustikaleren iPython-Befehlszeile gemacht. Es sollte jedoch nicht vergessen werden, dass dies nicht mehr als eine REPL ist, bei der Sie effizient durch die Historie navigieren können. Es ist also kein Produktionswerkzeug.

Unzählige Entwickler im Bereich des maschinellen Lernens haben jedoch den großen Schmerz erlebt, ein tief lernendes Notebook in einen echten Algorithmus in der Produktion umzuwandeln (auch Reddit oder Stackoverflow).

Wir sollten uns bemühen, den Abfall so weit wie möglich zu reduzieren.

Einführung

Bei Sicara bauen wir für unsere Kunden Produkte, die auf dem Lernen von Maschinen basieren:

  • Maschinelles Lernen: Der Kunde hat ein geschäftliches Bedürfnis und wir müssen einen zufriedenstellenden Algorithmus so schnell wie möglich liefern.
  • Wir bauen Produkte: Wir müssen produktionsreif sein. Algorithmen werden in der Cloud bereitgestellt, mit APIs usw. bedient und aktualisiert.

Zunächst benötigen Sie auf jeden Fall ein Versionierungs-Tool, das bei Jupyter (auch reddit, reddit again, quora) ein Problem ist. Nicht nur für Ihren Code, sondern auch für Ihre Experimente. Sie müssen in der Lage sein, alle Ergebnisse mit 100% igem Vertrauen erneut auszuführen. Wie oft kommen Datenwissenschaftler zu Ergebnissen, die sie nicht reproduzieren können?

Darüber hinaus neigen Menschen bei der Verwendung von Notebooks häufig dazu, drei Nutzungsarten zu kombinieren:

  1. Entwicklung: Methoden und Werkzeuge definieren, um tatsächlich etwas zu tun;
  2. Debuggen / Anwenden: Ausführen des Codes mit realen Daten, um zu sehen, was los ist;
  3. Visualisierung: Darstellung der Ergebnisse in einer sauberen und reproduzierbaren Ausgabe.

Um den Abfall zu reduzieren, sollten diese Schritte klar definiert und getrennt werden, um einen Schritt ohne den anderen ändern zu können und umgekehrt. Ich bin zu dem Schluss gekommen, dass

  • um qualitativ hochwertigen getesteten Code zu erzeugen, besser mit einer erstklassigen IDE
  • Um Code zu debuggen, gibt es visuelle Debugging-Tools
  • Um Berichte aufzuschreiben, bin ich mit einer ausdrucksstarken Auszeichnungssprache (Markdown, reST, Latex) zufrieden

Glücklicherweise kann eine gut konfigurierte IDE all diese Dinge tun. Wenn Sie beispielsweise aus der R-Community stammen, verwenden Sie sicherlich RStudio, wodurch Sie Folgendes tun können:

  • Native Code-Vervollständigung, automatische Korrektur usw.
  • direktes visuelles Debugging
  • Rmarkdown / knitr / Sweave, um dynamische und schöne Berichte zu erstellen.

Entwickeln Sie produktionsreifen Code

Sobald Sie ein Experiment durchführen möchten, d. H. Eine Methode schreiben, um etwas mit Ihren Daten zu tun, sollten Sie über deren Verwendung, Grenzfall usw. nachdenken. Machen Sie es in einer separaten Datei, in einem Dokument und einem Komponententest. Damit stellen Sie sicher, dass:

  • Ihre Methode macht eigentlich das, was Sie wollen.
  • Ihr Code kann an anderer Stelle in Ihrem Projekt sicher verwendet werden.

Da Sie Ihre Tools organisieren müssen, müssen Sie über die Struktur Ihrer Pipeline nachdenken, über die benötigten Dinge, die Änderungen, die Sie wahrscheinlich ändern werden usw. Python und R ermöglichen schnelles Testen von Einheiten. Besser 10 Minuten damit verbringen, Grenzfälle aufzuschreiben, in denen 10 Stunden falsche Ausgaben debuggen!

Der Einfachheit halber befinden sich Unit-Tests niemals in derselben Datei wie die, die die Methode definiert. Aber bei Jupyter tun Sie es am Ende.

Debuggen und Anzeigen

In diesem Schritt haben Sie Ihren neuen voll funktionsfähigen Code. Zeit, es mit echten Daten auszuprobieren! Hier können Notebooks aufgrund ihres Zellenmechanismus sehr bequem gefunden werden. Es ist jedoch ein Werkzeugwechsel. Warum sollten Sie Ihre IDE mit all Ihren Verknüpfungen und Komfort beenden, um Code in Ihrem Webbrowser auszuführen? Sie benötigen eine Inline-Ausführung Ihres Codes direkt in Ihre IDE.

Ein Tool wie PyCharm bietet eine native Unterstützung für diese Funktion: Führen Sie ausgewählten Code oder Skript mit einer einzigen Tastenkombination aus (Aktion Auswahl in Konsole ausführen oder Zelle in Konsole ausführen). Außerdem führt die Konsole die iPython-Konsole mit einem sehr schönen Werkzeugfenster für Variablen aus. Im wissenschaftlichen Modus können Sie auch Diagramme und Datenrahmen / Arrays in der IDE anzeigen und ändern.

Alternativ können Sie auch Tools wie VSCode oder Atom with Hydrogen für solche Funktionen verwenden.

Berichten und teilen

Zu diesem Zeitpunkt sollten Sie den getesteten Code in einem Verzeichnis Ihres Projekts und eine einfache Python-Datei haben, die ihn in Ihren Daten ausführt.

| - Projekt
     | - Notebooks
           | - data_analysis.py
     Tests
           | - do_something_test.py
     Utensilien
           | - do_something.py

Sie haben es in Ihre IDE integriert und die Ergebnisse überprüft, sie sind großartig! Ihre Arbeit ist fast fertig: Sie müssen sie dem Team melden, um die Migration des Algorithmus auf Ihre neue Version zu rechtfertigen. Oder Sie schreiben gerade eine Arbeit für die nächste NeurIPS-Konferenz.

Sie müssen Ihre Logik erklären und Schritt für Schritt eine klare Erklärung abgeben, um Ihre Ergebnisse zu beweisen. Natürlich möchten Sie nicht alles in einer anderen Datei erneut eingeben. Berichterstattung ist langweilig.

Aus diesem Grund gibt es Werkzeuge für die programmierte Programmierung. Dokumentationstools wie Sphinx basieren auf diesem Geist: Schreiben Sie Ihren Code und die Dokumentation in dieselbe Datei und generieren Sie daraus eine lesbare Version.

Für Ihr Python-Notebook empfehle ich die Verwendung von Pweave. Dies ist bisher die beste Portierung von Knitr, die ich gefunden habe. Nicht dass Rmarkdown Python-Zellen (oder eine Mischung aus R und Python) vollständig unterstützt.

In jedem Fall habe ich festgestellt, dass die Verwendung des Befehls Pweave pypublish der effizienteste ist. Fügen Sie einfach Kommentare zu Ihren Skripten hinzu und führen Sie Folgendes aus:

pypublish data_analysis.py

um daraus eine klare, gemeinsam nutzbare HTML zu generieren! Jede kommentierte Zeile wird markdown interpretiert, jede Zelle (oder jeder Codeblock) kann ein- oder ausgeblendet werden usw.

Wenn Sie beispielsweise mit diesem Notizbuch pypublish ausführen (beachten Sie die speziellen Kommentartags # ', # + und # %%):

# %% # Dies ist der Titel des Notizbuchs
# + Setup, Echo = False
Pandas als pd importieren
df = pd.DataFrame ({'a': list (range (4))})
# 'Mal sehen, wie eine Handlung aussieht
# + plot_df, echo = False
df.plot.bar ()
# 'Lassen Sie uns jetzt einige sichtbare Berechnungen machen
# + echo = True
a = 1
drucken (a)
# 'Es ist auch möglich, Variable im Kontext zu verwenden: a ist <% a%>
# + echo = True
a = 2
# 'a ist jetzt <% a%>

generiert diesen Bericht:

Ich empfehle, ein externes Tool in PyCharm einzurichten, um Notebooks mit einer Tastenkombination mit der folgenden Konfiguration zu veröffentlichen (beachten Sie den Trick, um ggf. Umgebungsvariablen hinzuzufügen):

Pweave als externe Werkzeugkonfiguration

Fazit

Dies ist kein weiteres Warum Jupyter Notebooks saugen Artikel. Ich habe nichts Persönliches gegen dieses beliebte Werkzeug. Ich wollte nur meine persönlichen Erfahrungen mit ihm teilen. Besonders in einer produktionsorientierten Umgebung bin ich zu einem anderen Workflow gekommen. Was denkst du darüber?

Wünschen Sie weitere Artikel wie diesen? Vergessen Sie nicht, hier oder bei Twitter auf den Folgen-Button zu klicken.

Siehe auch

Must-Have-Funktionen der Messaging-App