Jupyter Notebook verwenden

Im ersten Teil des Python-Tutorials wurden die Grundlagen der Programmiersprache Python erläutert, unter Verwendung von Jupyter Notebook als Entwicklungs- und Laufzeitumgebung. Hier wird nun konkret der Einstieg in Jupyter Notebook vermittelt.

Die interaktive webbasierte Anwendung Jupyter Notebook ist 2014 im Rahmen des Project Jupyter entstanden. Project Jupyter entwickelt quelloffene Software für interaktive und kollaborative Datenanalyse. Die entwickelten Tools sind für mehrere Programmiersprachen ausgelegt und unterstützen z.B. die Sprachen Python, R und Julia.

  Motivation

Jupyter Notebook als Weiterentwicklung von IPython ist die erfolgreichste Software des Project Jupyter, weitere Entwicklungen sind JupyterHub, eine Server-Umgebung für Jupyter Notebook, und JupyterLab, eine neuere Benutzeroberfläche für Jupyter Notebook. Jupyter Notebooks werden im Umfeld der Datenanalyse und des Maschinellen Lernens mit Python eingesetzt, sowie im Rahmen von Forschung und Lehre, um z.B. Einsteigern die Grundlagen der Programmiersprache Python zu vermitteln, oder als unterstützendes Tool um Fächer wie Algorithmen und Datenstrukturen, Numerische Methoden, Maschinelles Lernen oder auch IT-Sicherheit zu lehren.

Warum Jupyter Notebook?

Jupyter Notebooks sind für Schüler, Studierende, Dozenten und Forscher interessant, die sich mit der Programmiersprache Python oder mit Datenanalyse / Maschinellem Lernen beschäftigen, und ihren dokumentierten Code interaktiv und kollaborativ mit anderen (auch Nicht-Experten) teilen wollen. Jupyter Notebooks können über die Plattform Jupyter Binder oder auch als Google Colab Notebooks kostenlos in der Cloud veröffentlicht werden.

Warum JupyterLab?

JupyterLab ist die erweiterte Version von Jupyter Notebook, mit zusätzlicher Funktionalität und mehr Konfigurationsmöglichkeiten. Man kann seit Jupyter Notebook Version 7 problemlos zwischen den beiden Umgebungen wechseln, also dasselbe Notebook mal in der klassischen und mal in der erweiterten Umgebung öffnen und so herausfinden, welche davon der eigenen Arbeitsweise mehr zusagt.

  Übersicht

Diese Kurzanleitung zum Verwenden von Jupyter Notebook ist in 7 Abschnitte gegliedert. Zunächst wird die Kern-Funktionalität der Jupyter Notebook-Anwendung erläutert, danach das Erstellen eines Python-Notebooks in drei Schritten. Die wichtigsten Elemente der Markdown-Syntax zum Dokumentieren des Codes werden beschrieben, ebenso einige weniger offensichtliche Details bei der Verwendung von Command und Edit-Mode.


YouTube-Video

Der Einstieg in Jupyter Notebook wird durch ein Video (Screencast mit zusätzlichen Erläuterungen) veranschaulicht.



1 Was ist ein Jupyter Notebook?

Jupyter Notebook ist eine webbasierte Umgebung, die das Erstellen, Dokumentieren und Teilen von Demonstratoren unterstützt, und zwar insbesondere im Umfeld der Datenanalyse. In einem Jupyter Notebook kann man Code schreiben und ausführen, Daten visualisieren, und diesen Code auch mit anderen teilen. Das Besondere an Jupyter Notebook ist, dass der Code und die Beschreibung des Codes in unabhängige Zellen geschrieben werden, so dass einzelne Codeblöcke individuell ausgeführt werden können.

Als Jupyter Notebook wird kontextabhängig die webbasierte Umgebung bezeichnet, in der die Notizbücher erstellt, geändert und ausgeführt werden, oder auch das interaktive Dokument ("Notizbuch", "Jupyter Notebook"), das man darin erstellt hat. Jupyter Notebooks haben die Datei-Endung ipynb, z.B. Demo-PY1.ipynb oder Python-Tutorial.ipynb. Öffnet man eine *.ipynb-Datei mit einem einfachen Texteditor, z.B. Notepad++, stellt man fest, dass es sich um eine JSON-Datei handelt, ein für den Menschen lesbares Datenaustauschformat, das in Webanwendungen häufig für die Datenspeicherung eingesetzt wird.

Die Codeblöcke, die einzeln ausgeführt werden können, nennt man Code-Zellen (engl. code cells), und das Programm, das sie ausführen kann, nennt man den IPython-Kernel. Der Kernel kann über den Menüpunkt "Kernel" auf verschiedene Arten gestartet und gestoppt werden, dies ist nützlich, wenn man das Notebook zurücksetzen, alle Ausgaben löschen und neu starten will.

1-1 Jupyter Notebook installieren

Um Jupyter Notebooks mit Python-Code erstellen zu können, benötigt man eine aktuelle Python-Installation sowie die Jupyter Notebook-Installation selber, beides kann man über die Data Science Plattform Anaconda beziehen. Dies ist das Vorgehen, das in der offiziellen Jupyter-Dokumentation empfohlen wird.

Weitere Details der Installation von Python und Anaconda sind im Abschnitt Vorbereitung: Installation von Python und Anaconda beschrieben. Bei der Installation von Anaconda werden die Paketverwaltungstools pip und conda gleich mit installiert, mit deren Hilfe man von der Kommandozeile aus weitere Python-Pakete verwalten kann.

2 Jupyter Notebook-Anwendung starten

Zunächst starten wir die Jupyter Notebook-Anwendung, entweder über den Anaconda-Navigator, oder auch direkt über Programme > Jupyter Notebook. Die Jupyter Notebook-Anwendung wird im Webbrowser geöffnet, mit der Adresse http://localhost:8888/tree, und sieht ähnlich aus wie in der Abbildung unten. Die Anwendung zeigt das Startverzeichnis an, unter dem Notebooks abgelegt werden können. In diesem Startverzeichnis wird ein Ordner "elab2go" angelegt, den wir als Workspace verwenden, der alle unsere Jupyter Notebooks enthält. In diesem Workspace legen wir weitere Unterordner an, die zusammengehörende Notebooks und Daten-Dateien gruppieren. Im Ordner Demo-PY1 liegen z.B. alle Dokumente (Jupyter Notebooks, csv-Dateien etc.) die zu Demo-PY1 gehören.

Jupyter Notebook Erläuterung


Die Startseite der Jupyter Notebook-Anwendung ist in drei Reiterkarten ("Files", "Running" und "Clusters") organisiert.

  • In der "Files"-Ansicht werden die Jupyter Notebooks erstellt und verwaltet.
  • Unter dem Menüpunkt "New" können neue Jupyter Notebooks, Textdateien oder Ordner erstellt werden.
  • In der "Running"-Ansicht werden die gerade laufenden Jupyter Notebooks angezeigt.

3 Jupyter Notebook in drei Schritten erstellen

Nachdem die Jupyter Notebook-Anwendung läuft, erstellen wir ein erstes "Notizbuch" und zeigen daran die grundlegende Funktionalität.


3-1 Neues Notebook erstellen

Über den Menüpunkt "New > Python 3" erstellen wir ein neues Python3-Notizbuch mit der Endung ".ipynb". Da noch kein Name vergeben wurde, erhält das Notebook automatisch den Default-Namen "Untitled". Zunächst wird eine leere Eingabezelle angezeigt, mit "In" beschriftet, vgl. Abbildung.

Der Code in einem Jupyter Notebook wird in Zellen (cells) erstellt und ausgeführt. Zellen sind entweder Code-Zellen, die Python-Code enthalten, oder Markdown-Zellen, die die Dokumentation der nachfolgenden Codezelle in einer speziellen Markdown-Syntax oder in HTML-Syntax enthalten.

Jupyter Notebook Erläuterung


Die Menüleiste eines Jupyter Notebooks enthält die Menüpunkte File, Edit, View, Insert, Cell, Widgets.

  • File: hierüber können Notebooks erstellt, verwaltet und in unterschiedlichen Formaten gespeichert werden.
  • Edit: hier sind die Funktionen zum Bearbeiten von Zellen (Kopieren, Löschen, Verschieben).
  • View: hier sind die Funktionen, um die Ansicht zu verändern, z.B. einzelne Bereiche auszublenden.
  • Cell: hier kann der Typ einer Zelle eingestellt werden (Code oder Markdown), und die Zellen können einzeln oder gruppiert ausgeführt werden.
  • Kernel: hier kann der Kernel gestoppt und neu gestartet werden, z.B. um die Ausgabe zurückzusetzen und neu anzufangen.


Jupyter Notebooks können über den Menüpunkt File > Download as in verschiedene andere Dateiformate exportiert werden: als PDF, HTML oder LaTeX-Datei.

3-2 Code eingeben

Im nächsten Schritt geben wir in die erste Codezelle des Jupyter Notebooks Python-Anweisungen ein. Eine einzelne Codezelle wird durch Auswählen des Codeblocks und Anklicken des Run-Buttons in der zweiten Menüleiste ausgeführt. Die Ausgabe erfolgt direkt unterhalb des ausgewählten Codeblocks. Unterhalb des Menüpunkts Cells gibt es noch weitere Möglichkeiten, den Code auszuführen: Run All führt alle Zellen aus, Run All Below führt die aktuelle Zelle und alle ihr nachfolgenden Zellen aus.

Jupyter Notebook Erläuterung


Wir geben in die leere Zelle den Befehl print("Hello World") ein und führen den Code durch Anklicken des Run-Buttons aus. Der Text "Hello World" erscheint unterhalb des Codes.


3-3 Weitere Zellen einfügen

In diesem Schritt erweitern wir das Jupyter Notebook, indem wir mehrere Zellen oberhalb und unterhalb der ersten Zelle eingeben, den Zellentyp ändern, und wahlweise einzelne oder alle Zellen ausführen. Das Jupyter Notebook wird durch passendes Hinzufügen von Code- und Markdownzellen ausgebaut: Codezellen enthalten den ausführbaren Python-Code, Markdown-Zellen enthalten formatierte Kommentare mit zusätzlichen Erläuterungen und Anleitungen.

Jupyter Notebook Erläuterung


  • Füge oberhalb der ersten Codezelle eine weitere Zelle ein, und ändere ihren Typ in Markdown. In diese Zelle schreiben wir eine Erläuterung bzw. Dokumentation der Codezelle in Markdown-Syntax oder in HTML-Syntax.
  • Füge unterhalb der Codezeile mit dem print()-Befehl zwei weitere Codezellen ein und gebe die im Bild gezeigten Anweisungen ein.


Die Zellen in einem Jupyter Notebook können grundsätzlich in beliebiger Reihenfolge ausgeführt werden, jedoch wird eine sequentielle Abarbeitung von oben nach unten meist durch die Ablauflogik des entwickelten Skripts vorgeschrieben. Z.B. müssen die benötigten Pakete importiert werden, ehe man die darin enthaltenen Funktionen verwenden kann.

3-4 Command- und Edit-Mode

In einem Jupyter Notebook arbeitet man in zwei Modi. Im Command-Mode, der mit (ESC) eingeleitet wird, kann man Zellen erstellen, verschieben oder löschen, den Typ einer Zelle festlegen (Code oder Markdown), und Zellen ausführen. Im Edit-Mode werden die Zellen editiert. Der gerade aktive Modus einer Zelle wird durch die Umrahmungsfarbe hervorgehoben. Blau bedeutet: Command-Mode, grün bedeutet: Edit-Mode.
Die verschiedenen Befehle können entweder über Menüpunkte in der Benutzeroberfläche ausgewählt werden, oder über Tastenkürzel der Form STRG+<Buchstabe>. Letzteres geht mit der Zeit schneller.

Um zum Beispiel eine Zelle über Tastenkürzel als Markdown-Zelle festzulegen, wählt man die Zelle aus, klickt dann ESC, und danach M. Besonders nützliche Tastenkürzel sind:

4 Code dokumentieren mit Markdown Syntax

Um ein Jupyter Notebook ansprechend zu gestalten, werden die Markdown-Zellen als benutzerfreundliche Dokumentation ausgebaut. Markdown-Zellen können einerseits in einer speziellen Markdown-Syntax editiert werden, die in HTML umgewandelt wird, es kann jedoch auch direkt HTML verwendet werden. Um z.B. kursiven Text zu erhalten, wird vor und nach den Text je ein Stern (*) gesetzt, um fett markierten Text zu erhalten, werden vor und nach den Text je zwei Sterne gesetzt.

* kursiver Text *
** fetter Text **

Die am häufigsten verwendeten Markdown-Tags sind diejenigen zum Erstellen von Überschriften und Listen, weiterhin können auch Blockzitate und Links verwendet werden, oder mathematische Formeln mit LaTeX eingebettet werden.


4-1 Überschriften erstellen

Überschriften werden mit Hilfe des Raute-Symbols erstellt. Die Anzahl der Rauten legt die Ebene der Überschrift fest: eine Raute erzeugt eine Überschrift der ersten Ebene, entspricht also einem H1-Element in HTML, zwei Rauten erzeugen eine Überschrift der zweiten Ebene etc.

# Abschnitt 1 (H1)
## Abschnitt 1.1 (H2)
### Abschnitt 1.1.1 (H3)

4-2 Listen erstellen

Ungeordnete Listen werden mit Hilfe des Stern-Symbols erstellt, alternativ kann auch + oder - verwendet werden, in jedem Fall generiert die Markdown-Syntax damit eine ungeordnete HTML-Liste. Geordnete Listen werden mit Hilfe einer Nummerierung erzeugt, die man selber vergibt.

**Ungeordnete Liste**
* Erster Eintrag
* Zweiter Eintrag
* Dritter Eintrag

**Geordnete Liste**
1. Erster Eintrag
2. Zweiter Eintrag
3. Dritter Eintrag

4-3 Codeblöcke einbetten

Um einen Codeblock in Markdown einzubetten, muss jede Zeile des Code um mindestens 4 Leerzeichen eingerückt werden. Dies ist dann nützlich, wenn man in der Markdown-Zelle einen nachfolgenden Code näher erklärt.

** Die folgende Funktion berechnet die Summe der Eingabeparameter **

    def add(x, y):
	    return x + y
    add(2, 3)

4-4 Verlinkungen einfügen

In Jupyter Notebook können sowohl interne als auch externe Verlinkungen verwendet werden. Interne Verlinkungen sind nützlich, um z.B. ein Inhaltsverzeichnis zu erzeugen, externe Verlinkungen, um Quellen oder andere Notebooks zu verlinken. Verlinkungen können auf verschiedene Arten in eine Markdown-Zelle eingefügt werden. Entweder man gibt einfach die URL an, diese wird dann als Link interpretiert. Oder man setzt einen selbst vergebenen Namen für den Link in eckige Klammern, gefolgt von der URL, die man in runde Klammern setzt. Die zweite Variante ist dann praktisch, wenn es sich um lange unhandliche URLs handelt.

Python Tutorial auf elab2go (deutsch): https://www.elab2go.de/demo-py1/
[Python Tutorial auf elab2go (deutsch)](https://www.elab2go.de/demo-py1/)

4-5 Markdown-Beispiel

Das folgende Beispiel zeigt einen größeren Text, der mittels Markdown-Syntax formatiert wurde.

Markdown-Syntax Ausgabe
# Abschnitt 1 (H1)
## Abschnitt 1.1 (H2)

**Ungeordnete Liste**
* Erster Eintrag
* Zweiter Eintrag
* Dritter Eintrag

**Geordnete Liste**
1. Erster Eintrag
2. Zweiter Eintrag
3. Dritter Eintrag
> Blockzitat mit zwei Abschnitten. 
>
> Lorem ipsum dolor sit amet
> consectetuer adipiscing elit 
> 
> Donec sit amet nisl  
> Aliquam semper ipsum sit amet velit

Markdown-Syntax in Jupyter Notebook

5 JupyterLab

JupyterLab ist eine webbasierte Entwicklungsumgebung aus dem Angebot der "Project Jupyter"-Entwickler, mit erweiterter Funktionalität für die Erstellung von Data Science-Projekten mit Python. Jupyter Notebooks (d.h. ipynb-Dateien) können genausogut auch in JupyterLab ausgeführt werden. Seit der Jupyter Notebook Version 7.0 kann man ein Jupyter Notebook wahlweise in der klassischen einfachen Umgebung oder in Jupyter Lab öffnen.

5-1 Jupyter Notebook vs. JupyterLab

Was ist also der Unterschied zwischen der einfachen Jupyter Notebook- und der erweiterten JupyterLab-Umgebung? Die Jupyter Notebook-Anwendung ist dokumentenzentriert, d.h. der Fokus ist auf dem Erstellen und Bearbeiten einzelner Notebooks. Ein Workflow, um mit mehrereren Skripten zu arbeiten, oder auch die Fehlersuche per Debuggen werden nicht unterstützt. Die JupyterLab-Anwendung hingegen ist eine integrierte Entwicklungsumgebung, in der das Arbeiten mit mehreren Notebooks und Python-Skripten und auch das Debuggen unterstützt werden.

Ein weiterer Unterschied besteht darin, wie neue Notebooks im Browser geöffnet werden. Bei Jupyter Notebook: Nach Öffnen der Startseite mittels der URL http://localhost:8888/tree werden evtl. vorhandene Notebooks angezeigt. Jedes neu erstellte Notebook wird dann in einem neuen Browser-Tab erstellt, und um zurück zur Übersicht zu gelangen, wechselt man erneut in das Tab mit der Startseite. Bei JupyterLab: Nach Öffnen der Startseite werden im JupyterLab File-Browser die Dateien des ausgewählten Dateiordners angezeigt. Die aktiven Jupyter Notebooks werden jeweils im JupyterLab Code-Editor angezeigt, alles in demselben Tab.

5-2 Aufbau JupyterLab

Die Benutzeroberfläche von JupyterLab ist in Menüleiste, Seitenleiste und drei Panels organisiert, die für die Entwicklung und Ausführung von Skripten verwendet werden: links Datei-Browser, mittig Code-Editor, rechts Debug-Fenster.

Jupyter Lab Benutzeroberfläche
Die Debugging-Funktionalität ist einerseits hilfreich, da man per Breakpoints den Inhalt von Variablen und Datenstrukturen auch ohne viele print-Ausgaben einsehen kann. Andererseits ist das Debugging in JupyterLab wegen dem eingeschränkten Platz bei der Aufteilung der verschiedenen Fenster ( Variablen, Call Stack etc.) aktuell nur eingeschränkt nützlich bzw. benutzerfreundlich.

6 Jupyter Notebook in der Cloud

Die lokale Installation von Jupyter Notebook auf einem PC über Anaconda lohnt sich vor allem dann, wenn man regelmäßig Python programmiert und auch die anderen Python-Tools wie Spyder, VSCode oder Paketverwaltung benötigt, und sie ermöglicht keine Zusammenarbeit oder Teilen der erstellten Notebooks. Wer Jupyter Notebook ohne eigene Installation einsetzen möchte, kann auf Cloud-Angebote wie Google Colab und Binder zurückgreifen. Google Colab kann ohne weiteres auch von Einsteigern für das Entwickeln und Teilen von Notebooks eingesetzt werden, Binder hingegen richtet sich eher an Programmierer, die auch lokal programmieren und die Notebooks in der Cloud teilen möchten.

6-1 Google Colab

Google bietet mit Google Colaboratory eine Jupyter Notebook-Erweiterung als Cloud Dienst an, der sich sowohl an Python-Einsteiger als auch an Experten richtet, die für ihre Machine Learning-Projekte die Google Rechenleistung nutzen möchten.
Ein über die Colaboratory erstelltes Google Colab-Notebook ist ein Jupyter Notebook, das um zusätzliche Funktionalität erweitert wurde und auf den Cloud-Servern von Google ausführt wird, hierbei profitiert man von der Rechenleistung (GPU und TPU), die Google kostenlos bereitstellt.

Um Google Colab zu verwenden, benötigt man lediglich ein Google Account. Die über die Colaboratory-Webseite colab.research.google.com erstellten Notebooks werden automatisch im eigenen Google-Drive Bereich gespeichert.

Die Colaboratory-App hat zwei Menüleisten: in der oberen horizontalen Menüleiste befinden sich links die Menüpunkte Datei, Bearbeiten, Anzeige, Einfügen, Laufzeit, Tools, Hilfe und rechts die Menüpunkte Kommentar, Teilen, Einstellungen. In der linken seitlichen Menüleiste ist systemnahe Funktionalität gruppiert: hier befindet sich die Suche, man kann über einen Datei-Explorer das zugeordnete Verzeichnis einsehen und über ein Laufzeitterminal Kommandozeilen-Befehle eingeben.


Google Colab Notebook Erläuterung

Google Colab Notebook: Aufbau

Die Abbildung zeigt ein neu erstelltes Colab Notebook, in das eine Markdownzelle und zwei Codezellen eingefügt wurden. Das Notebook heißt zunächst Untitled und hat wie ein normales Jupyter Notebook die Endung *.ipynb.

Das Notebook wurde einmal ausgeführt, die Ausgabe der einzelnen Codezellen sieht man jeweils im Ausgabebereich unterhalb der Zelle, z.B. steht unterhalb der Zelle [1] der ausgegebene Text "Hello World!".

6-2 Binder

Binder (mybinder.org) ist eine Webanwendung, mit der Benutzer gemeinsam nutzbare, interaktive und reproduzierbare Umgebungen aus Code-Repositories, z.B. GitHub erstellen können. Die Verwendung von Binder als Laufzeitumgebung bietet sich z.B. an, falls man eine Sammlung von Jupyter Notebooks kollaborativ bearbeiten, versionieren und auch veröffentlichen möchte. Github und Binder sind Tools für Programmierexperten, vor ihrem Einsatz sollte man sich mit dem Lebenszyklus der Softwareentwicklung, mit Sicherheitsaspekten und Lizenzmodellen vertraut machen.

Binder als Laufzeitumgebung mit Github verküpfen
Github ist eine kostenlose Versionsverwaltung für Software-Projekte, die von Entwicklern genutzt wird, um Code kollaborativ zu bearbeiten, organisieren und versionieren. Insbesondere kann Github verwendet werden, um Jupyter Notebooks zu veröffentlichen. Für das Ausführen der auf Github veröffentlichten Notebooks kann anschließend die Cloud-Plattform Binder eingesetzt werden. In einem ersten Schritt muss ein Github-Account und Projektarchiv (engl. Repository) erstellt werden, in das die zu veröffentlichenden Jupyter Notebooks hochgeladen werden. Wichtig dabei ist, dass das Repository als öffentlich markiert und mit einer passenden Lizenz versehen wird. Das Github-Repository wird in einem zweiten Schritt über seine URL an Binder übergeben und kann darüber ausgeführt werden.

Binder Konfiguration für Github-Repository Binder-Laufzeitumgebung für Github-Repository

Die Abbildung zeigt die Konfigurationsseite von mybinder.org. Für die Binder Konfiguration reicht es, die URL des zuvor erstellten Github-Repositories einzugeben und mit Launch die Laufzeitumgebung zu starten.

Binder-Laufzeitumgebung: Konfigurationsseite

Die Abbildung zeigt die Binder-Laufzeitumgebung, in der eines der Notebooks ausgewählt wurde und ausgeführt wird.

Binder-Laufzeitumgebung: Ausführen eines Notebooks


7 Jupyter Notebook vs MATLAB Live Script

Von der Funktionalität und Arbeitsweise her ist ein Jupyter Notebook vergleichbar mit einem MATLAB Live Script, das in Demo-MAT1: Der Einstieg in MATLAB Live Scripts beschrieben ist. In beiden Entwicklungsumgebungen hat man Codezellen, in die man den Quellcode eingibt, und Markdownzellen, die die Dokumentation des Codes enthalten. Jupyter Notebooks können alleinstehend verwendet werden, z.B. im Unterricht, um Schüler / Studenten eine erste Programmiersprache zu lehren, während MATLAB LiveScripts nur in der MATLAB Plattform verwendet werden können, z.B. von Ingenieuren, die damit ihre MATLAB-Prototypen und Demos besser dokumentieren können.

Autoren, Tools und Quellen

Autor:
 Prof. Dr. Eva Maria Kiss

Mit Beiträgen von:
 M.Sc. Anke Welz


Tools:

elab2go-Links:

Quellen und weiterführende Links: