Einführung#

Zielgruppe#

Die Nutzung von Jupyter-Notebooks ist vielfältig und reicht von den Datenwissenschaften über Data-Engineering und Datenanalyse bis hin zu System-Engineering. Dabei sind die Fähigkeiten und Arbeitsabläufe der einzelnen Zielgruppen sehr unterschiedlich. Eine der großen Stärken von Jupyter-Notebooks ist jedoch, dass sie eine enge Zusammenarbeit dieser unterschiedlichen Fachgruppen in funktionsübergreifenden Teams ermöglichen.

  • Data Scientists erforschen Daten mit verschiedenen Parametern und fassen die Ergebnisse zusammen.

  • Data-Engineers überprüfen die Qualität des Codes und machen den Code robuster, effizienter und skalierbar.

  • Data-Analysts verwenden den von Data-Engineers bereitgestellten Code, um systematisch die Daten zu analysieren.

  • System-Engineers stellen die Forschungsplattform auf Basis des JupyterHub bereit, auf der die anderen Rollen ihre Arbeit ausführen können.

Im ersten Teil dieses Tutorial wenden wir uns zunächst an das System-Engineering, das eine Plattform auf Basis von Jupyter-Notebooks aufbauen und betreiben will. In der Folge erläutern wir dann, wie diese Plattform effektiv von den Fachgruppen in den Datenwissenschaften, im Data-Engineering und und in der Datenanalyse genutzt werden kann.

Aufbau des Jupyter-Tutorial#

Das Jupyter-Tutorial folgt ab Kapitel 3 dem prototypischen Verlauf eines Forschungsprojekts:

  1. Arbeitsbereich einrichten mit der Installation und Konfiguration von IPython, Jupyter mit nbextensions und ipywidgets.

  2. Daten sammeln, entweder durch eine Rest-API oder direkt von einer HTML-Seite.

  3. Daten bereinigen ist eine wiederkehrende Aufgabe, die u.a. redundante, inkonsistente oder falsch formatierte Daten entfernen oder modifizieren soll.

  4. Erschließen der Daten – Daten visualisieren umfasst explorative Analysen und das Visualisieren von Daten.

  5. Refactoring umfasst das Parametrisieren, Validieren und Performance-Optimierungen.

  6. Produkt erstellen umfasst Testen, Logging und Dokumentieren der Methoden und Funktionen. Das Erstellen von Bibliotheken und Paketen findet ihr in unserem our Python Basics Tutorial.

  7. Web-Anwendungen können entweder aus Jupyter-Notebooks Dashboards generieren oder umfassendere Applikationslogik benötigen, wie z.B. in Bokeh-Plots in Flask einbinden demonstriert, oder Daten über eine RESTful API bereitstellen.

Warum Jupyter?#

Wie können nun diese vielfältigen Aufgaben vereinfacht werden? Es wird sich kaum ein Werkzeug finden, das all diese Aufgaben abdeckt und selbst für einzelne Aufgaben sind häufig mehrere Werkzeuge notwendig. Daher suchen wir auf einer abstrakteren Ebene allgemeinere Muster für Tools und Sprachen, mit denen Daten analysiert und visualisiert sowie ein Projekt dokumentiert und präsentiert werden kann. Genau dies streben wir mit dem Project Jupyter an.

Das Projekt Jupyter startete 2014 mit dem Ziel, ein konsistentes Set von Open-Source-Tools für wissenschaftliche Forschung, reproduzierbare Workflows, Computational Narratives und Datenanalyse zu erstellen. Bereits 2017 wurde Jupyter dann mit dem ACM Software Systems Award ausgezeichnet - eine prestigeträchtige Auszeichnung, die es u.a. mit Unix und dem Web teilt.

Um zu verstehen, warum Jupyter-Notebooks so erfolgreich sind, schauen wir uns die Kernfunktionen einmal genauer an:

Jupyter Notebook Format

Jupyter Notebooks sind ein offenes, auf JSON basierendes Dokumentenformat mit vollständigen Aufzeichnungen der Sitzungen des Benutzers und des enthaltenen Codes.

Interactive Computing Protocol

Das Notebook kommuniziert mit einem Rechenkernel über das Interactive Computing Protocol, einem offenen Netzwerkprotokoll basierend auf JSON-Daten über ZMQ und WebSockets.

Kernels

Rechenkernel sind Prozesse, die interaktiven Code in einer bestimmten Programmiersprache ausführen und die Ausgabe an den Benutzer zurückgeben.

Jupyter-Infrastruktur#

Eine Plattform für die oben genannten Use Cases erfordert eine umfangreiche Infrastruktur, die nicht nur die Bereitstellung der Kernel sowie die Parametrisierung, Zeitsteuerung und Parallelisierung von Notebooks erlaubt, sondern darüberhinaus auch die gleichmäßige Bereitstellung der Ressourcen.

Mit diesem Tutorial wird eine Plattform bereitgestellt, die über Jupyter Notebooks hinaus schnelle, flexible und umfassende Datenanalysen ermöglicht. Aktuell gehen wir jedoch noch nicht darauf ein, wie sie sich um Streaming Pipelines und Domain Driven Data Stores erweitern lässt.

Die Beispiele des Jupyter-Tutorials könnt ihr jedoch auch lokal erstellen und ausführen.

:

Status#

Contributors License pre-commit.ci status Docs Pyup DOI Mastodon

:

Folge uns#

Pull-Requests#

Wenn ihr Vorschläge für Verbesserungen und Ergänzungen habt, empfehle ich euch, einen Fork meines GitHub-Repository zu erstellen und darin eure Änderungen vorzunehmen. Gerne dürft ihr auch einen Pull Request stellen. Sofern die darin enthaltenen Änderungen klein und atomar sind, schaue ich mir eure Vorschläge gerne an.