Meine verschiedenen Jupyter Notebooks [1] gruppiere ich in eigenständige Projekte. Dazu nutze ich eine einfache Verzeichnisstruktur, in welcher die Projekte als Unterverzeichnisse im Verzeichnis für Projekte hinterlegt sind. Die Verzeichnisstruktur der Projekte ist dann projektspezifisch. Die Jupyter-Umgebung wird durch die Anaconda Distribution for Python [2] mitinstalliert und eingerichtet. Um die via Jupyter Notebooks realisierten Dashboards aufzurufen, nutze ich das folgende. Mein Grundschema besteht dabei aus einer Jupyter Notebook Datei (Endung .ipynb), die als Dashboard bzw. Einstiegspunkt fungiert, und eine Batchscript-Datei (unter Windows) [3] zum Starten von Jupyter Notebook mit dem als Einstiegspunkt fungierenden Dashboard (Übergabe des Dateinamen als Parameter für Jupyter Notebook).

Grundschema für die Strukturierung aller Projekte

Dieses Grundschema wende ich sowohl auf das gesamte Projektverzeichnis als auch in den jeweiligen Projektverzeichnissen an. Die Dashboardseite der einzelnen Projekte werden im Hauptdashboard via Markdown einfach verlinkt und der Link öffnet dann die Projektdashboardseite. Möchte ich ein spezifisches Projekt aufrufen, nutze ich die dort ebenfalls hinterlegte Batchscript-Datei zum Aufrufen des jeweiligen Projektdashboards. Das Grundschema ist folgendermaßen aufgebaut:

Projekte
    |- projectslandingpage.ipynb
    |- init_jupyter.bat
    |- Projekt A
    |- Projekt B
    |- …
    |- Projekt n

Das Wurzelverzeichnis Projekte enthält sämtliche Projekte als Unterverzeichnisse sowie die Jupyter Notebook-Datei projectslandingpage.ipynb als Startseite bzw. Landing Page und verlinkt auf die einzelnen Dashboards der Projekte. Das Batchscript init_jupyter.bat (siehe unten) startet die Jupyter Notebook-Umgebung und ruft die Landing Page im Projektverzeichnis auf.

Grundschema für die Verzeichnisstruktur der jeweiligen Projekte

Auch die jeweiligen Projekte werden über Unterverzeichnisse strukturiert. Grundsätzlich nutze ich folgende Unterverzeichnisse zur Strukturierung meiner Jupyter Projekte:

    |- Projekt A
        |- data
        |- images
        |- notebooks
        |- scripts
        |- results
        |- dashboard.ipynb
        |- init_<projectname>.bat

Die Jupyter Notebook-Datei dashboard.ipynb ist die Startseite bzw. Landing Page für das jeweilige Projekt. Dort können dann weitere Subdashboards verlinkt sein oder alle relevanten Informationen angezeigt werden. Um schnell auf ein bestimmtes Projekt zugreifen zu können, wird in jedem Projektverzeichnis ebenfalls eine Batchdatei (siehe unten) abgelegt, welche die Jupyter-Umgebung mit Aufruf des Dashboards des Projektes startet.

Die Daten für die Analysen werden im Unterverzeichnis data gespeichert und können auch die Rohdaten in verschiedenen Dateiformaten (z. B. Excel-Dateien, json-Dateien [4], csv-Dateien [5]) sein. Sollen Bilder im Dashboard angezeigt werden sind diese in images abgelegt. Das Verzeichnis notebooks enthält die Jupyter-Dateien für die Subdashboards, welche auf eine spezifische Fragestellung fokussiert eingehen. Um die Dashboards übersichtlich zu halten, werden die Algorithmen in Python-Scripte gekappelt und im Verzeichnis scripts abgelegt. Das Verzeichnis results wird zur Ablage von Datenexporten genutzt, um beispielsweise Ergebnisse als csv-Datei für die Weiterverarbeitung oder Berichte als PDF-Datei bereitzustellen.

Nicht genutzte Verzeichnisse lasse ich in der Regel weg, um die Projektverzeichnisse übersichtlich zu halten. Die Struktur dient als Basis und zur Orientierung. Sie ist keinesfalls dogmatisch.

Jupyter-Umgebung mit Aufruf der Landing Page starten

Zum Starten der Jupyter Umgebung mit direktem Aufruf der Landing Page aus dem Projekte-Wurzelverzeichnis heraus nutze ich eine Batchdatei. Der Aufbau der Batchdatei init_jupyter.bat:

@echo off
set "currentDirectory=%cd%
C:\ProgramData\Anaconda3\python.exe C:\ProgramData\Anaconda3\cwp.py C:\ProgramData\Anaconda3
C:\ProgramData\Anaconda3\python.exe C:\ProgramData\Anaconda3\Scripts\jupyter-notebook-script.py "%currentDirectory%\projectslandingpage.ipynb"

Mittels des Befehls @echo off in der ersten Zeile wird die Ausgabe der aufgerufenen Befehlen unterdrückt. In Zeile 2 wird das aktuelle Arbeitsverzeichnis der Batchdatei auf den Speicherort der Batchdatei gesetzt. Das Verzeichnis fungiert dann als Wurzelverzeichnis und ist der Anker für die relativen Pfadangaben. Mit Zeile 3 und 4 wird die Jupyter-Umgebung gestartet. Dabei wird die Landing Page bzw. das Dashboard des jeweiligen Projektes als Parameter übergeben, sodass die Jupyter-Umgebung im Webbrowser direkt die Landing Page bzw. das Dashboard des Projektes aufruft und anzeigt. Die projektspezifischen Batchdateien unterscheiden sich von init_jupyter.bat nur beim an die Jupyter-Umgebung übergebenen Parameter. Statt die Landing Page des Wurzelverzeichnisses für die Projekte wird dann das jeweilige Dashboard des Projektes übergeben (also dashboard.ipynb anstatt projectslandingpage.ipynb).

Links und Quellen

[1] Webseite zu Jupyter, Project Jupyter, https://jupyter.org (Zugriff 22. Dezember 2023).

[2] Anaconda Distribution for Python, Anaconda Inc., https://www.anaconda.com (Zugriff am 22. Dezember 2023).

[3] Batchscripte unter Windows, deutschsprachige Wikipedia, https://de.wikipedia.org/wiki/Stapelverarbeitungsdatei (Zugriff am 22. Dezember 2023).

[4] JavaScript Object Notation, deutschsprachige Wikipedia, https://de.wikipedia.org/wiki/JavaScript_Object_Notation (Zugriff am 22. Dezember 2023).

[5] Comma-Separated Values (CSV, Dateiformat), deutschsprachige Wikipedia, https://de.wikipedia.org/wiki/CSV_(Dateiformat) (Zugriff am 22. Dezember 2023).