TDWI Blog

Mit nativen Notebooks in VS Code noch effizienter mit Jupyter arbeiten

Computational Notebooks wie Jupyter Notebooks und R-Markdown-Notebooks haben sich für analytische Fragestellungen zur Unabdingbarkeit entwickelt. Sie können im Spektrum von Experimentierbaukasten bis hin zum Werkzeug für komplexe Analysen und automatisierte Prozesse eingesetzt werden. Was Stakeholder auch verlangen: Erstellung eines Plots, explorative Datenanalyse, Datentransformation über die Fähigkeiten von SQL und Excel hinaus, Test der Antwortstruktur einer Api oder auch Training eines Machine Learning Modells, Notebooks bieten sich mindestens für den Einstieg oder gar für einen Großteil des Projekts an, weil die Ergebnisse des interaktiven Programmierens schnell sichtbar werden.

Die Integrierte Entwicklungsumgebung (IDE) VS Code hat mit der Einführung von nativen Notebooks Jupyter Notebooks noch einmal auf eine höhere Stufe gehoben und zumindest meine Produktivität deutlich gesteigert. Ein paar Schlüssel-Features möchte ich hier vorstellen, um diese Alternative den Nutzern des Jupyter Web-Interfaces oder JupyterLab schmackhaft zu machen.

Natürlich können Notebooks auch über Web-Interface und JupyterLab genutzt werden anstatt einer IDE wie VS Code oder PyCharm – oft eine Frage des Geschmacks oder der Gewohnheit. Außerdem entwickeln sich diese Tools auch kontinuierlich weiter dank der Arbeit von „Project Jupyter“ – dem open source Schirm-Projekt hinter der Weiterentwicklung der Tools.

Mein persönlicher Einstieg in Analytics begann mit R und daher bin ich Analysen in einer IDE (RStudio) gewöhnt. Dementsprechend fühlte sich Analytics mit Web-Interfaces und JupyterLab irgendwie seltsam an. Außerdem bietet eine starke IDE eine bessere Ausgangsposition für ein Aufgabenspektrum, das Data Engineering, Programmierung und Integration eigener Python Module oder vielfältiger Dateiformate (.yaml, .json, .sql), sowie CLI Eingaben beinhaltet, und bei der eine Git-Integration hilfreich ist. Dazu ruft bei Einsatz von Multi-Cursor jedes Mal eine innere Stimme: „schau an wie viel Zeit ich spare!“ Zuletzt ist für mich ausschlaggebend, dass ich die Notebooks mit deutlich weniger Klicks öffne – ich bin einfach schneller.

Bisher kamen diese Vorteile aber zu einem Preis: die Jupyter Notebook Integration in VS Code war irgendwie unfertig. Das Arbeiten mit Zellen war schwerlich, da Zellen nicht verschoben, aufgespalten oder vereinigt werden konnte, je länger das Notebook, desto unübersichtlich wurde es und ohne Zeilennummern war die Fehlerbehebung ein Graus. Aber nachdem die Entwickler für fast ein Jahr das Feature der „nativen Notebooks“ angekündigt hatten (inzwischen re-branded als „Notebook API“), steht das Feature nach langem Warten stabil zur Verfügung.

Steigen wir mit ein paar kleinen Quality-of-Life Features ein, die aber feine Unterschiede in der Produktivität bringen. Als Erstes zeigen die Zellen die Rechenzeit an. Die ist oft irrelevant und kann in 2 Zeilen Code auch nachgeliefert werden. Jedoch werden diese 2 Zeilen immer dann vergessen, wenn eine längere Berechnung zum ersten Mal gestartet wird und es hinterher doch sehr wichtig ist, ob es 20 oder 200 Sekunden gedauert hat.

Als Zweites sind einige VS Code Features nun für die Notebooks vorhanden, wie Popups mit Informationen zu Variablen. Bei komplexen Datentypen (Dataframes, Listen) ist dies natürlich begrenzt. Aber gerade beim Experimentieren mit Code-Abschnitten kann das schnelle Nachschauen des aktuellen Werts einer Hilfsvariable, die am anderen Ende des Notebooks konfiguriert wird, Zeit sparen und Ablenkungen reduzieren. In normalen Python Skripten sind dazu die Informationen in den Popups etwas umfangreicher, was ein Zeichen dafür ist, dass dies für die Notebooks nachgeliefert wird.

Wenn tiefere Einblicke in Variablen benötigt werden, gibt es als Drittes den Variablenexplorer. Mit einem Klick werden alle Variablen angezeigt und Dataframes können sogar in einem Data Viewer geöffnet und gefiltert werden. So bin ich es von RStudio gewohnt und das Fehlen dieses Features hat mich noch am Ehesten getrieben, eine Alternative zu JupyterLab zu finden.

Des Weiteren können Plots direkt und ohne Code-Zeilen gespeichert werden. Dies spart Zeit, aber verhindert auch, dass Plots ungewollt überschrieben werden, weil eine Zelle unbedacht ausgeführt wurde. Dies ist außerdem immer noch möglich, wenn das Notebook geschlossen und wieder geöffnet wurde. Beim code-basierten Speichern müsste der gesamte Code bis zum Plot nochmal ausgeführt werden. Im Jupyter Web-Interface ist dies im Prinzip auch möglich, aber nicht in JuypterLab.

Kommen wir nun zu Features, die mein Arbeiten deutlich beeinflusst haben. Das Outline ist ein Inhaltsverzeichnis durch das Abschnitte ausgewählt werden können, und das für einfache Bedienung aus- und eingeklappt werden kann sowie wahlweise nur die Markdown-Zellen oder Markdown- und Code-Zellen zeigt.

Durch die dynamische Arbeit mit Notebooks springe ich viel zwischen Abschnitten, prüfe Code, kopiere Abschnitte, passe Abschnitte an oder füge oben neue Imports hinzu. Durch das Outline geht dies nun viel einfacher und ohne desorientierendes Scrollen. Zudem hat es die Struktur meiner Notebooks verbessert, weil ich das Outline durch eine bessere Struktur bequemer nutzen kann. In der Tat bietet zumindest JupyterLab etwas ähnliches an.

Nochmals deutlich größeren Einfluss auf meine Arbeit mit Notebooks haben die VS Code Erweiterungen. Zunächst sind die Erweiterungen von VS Code nahezu unendlich und in einfachster Form hinzuzufügen. Beispielhaft hervorheben möchte ich den Bracket Pair Colorizer und intelliSense. Durch Ersteres wird farblich, durch Schatten, und durch Verbindungslinien hervorgehoben, wo Klammern geöffnet und geschlossen werden, was viele Fehler bei der Ausführung verhindert. Durch intelliSense werden Code-Vervollständigungen und Funktionsparameter empfohlen, die wertvolle Zeit beim Suchen in Docs spart.

Diese beiden Erweiterungen sind in abgespeckter Form auch in den anderen Tools vorhanden und auch dort werden Erweiterungen angeboten, aber die Erweiterungen in JupyterLab und im Web-Interface sind weniger zahlreich und meiner Erfahrung nach aufwendiger zu aktivieren.

Zuletzt ist das Auf- und Einklappen von Notebook-Abschnitten und Zellen der größte Gewinn für mich. Grundlegend hilft es beim Springen zwischen Abschnitten, da Teile des Notebooks ausgeblendet werden, die gerade nicht gebraucht werden. Das Finden von relevanten Teilen und das Zurückfinden zum aktuell bearbeiteten Teil ist deutlich angenehmer und weniger konfus.

Durch das Feature kann ich mein Notebook aber auch auf einfachste Weise so aussehen lassen, dass es nur die Abschnitte meiner analytischen Story zeigt, anstatt diese für ein Meeting zum Beispiel in PowerPoint aufzubereiten. Dies spart wertvolle Zeit vor dem Meeting, gibt mir unter bestimmten Voraussetzungen im Meeting eine ganze andere Möglichkeit auf spontane Fragen zu reagieren. Falls dann doch ein Handout gebraucht wird, kann ich die, für die Stakeholder interessanten Punkte, zusammenstellen und habe nicht vorher auch uninteressante Teile aufbereitet.

Das Notebook ist – natürlich nicht für alle Meetings – ein Präsentationsmedium geworden, dass nun ohne viel ablenkendes Scrollen die gewünschte Story zeigen kann.

Abschließend muss gesagt werden, dass auch native Notebooks in VS Code nicht fehlerfrei sind. Nicht alle Erweiterungen funktionieren und der Linter macht die seltsamsten Sachen (seit dem letzten Update deutlich weniger). Probleme wie das diagonale Scrollen, wenn man eigentlich seitwärts durch den Dataframe-Output scrollen möchte, musste über Updates gelöst werden. Aber die Entwickler sind spürbar mit der Weiterentwicklung beschäftigt und fragen Probleme und Wünsche über Surveys ab. Ich bin begeistert von den Möglichkeiten, aber wie eingangs erwähnt, ist die Wahl des Tools für das Arbeiten mit Notebooks einerseits eine stetig neu zu evaluierende Entscheidung und andererseits eine Frage des Geschmacks. Und dieser Artikel soll lediglich den Appetit anregen.

Externe Links

  • VS Code Notebook API: https://code.visualstudio.com/api/extension-guides/notebook
  • Project Juypter: https://jupyter.org/
  • Vorstellung von “Nativen Notebooks” (Apr. 2021, ca. 60 Min): https://youtu.be/D-AXZZDTQhM
  • Ankündigung von Core-Features der „Nativen Notebooks“ (Jan. 2021, ca. 12 Min): https://youtu.be/g5EykzAsCC0

Der Beitrag spiegelt die Meinung der Autoren wider und ist keine allgemeingültige Meinung des TDWI. Als TDWI bieten wir die Plattform, alle Themen und Sichtweisen zu diskutieren. *

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.