Dieses Template bietet eine strukturierte Grundlage für Data Science und Data Analytics Projekte. Es folgt Best Practices für Organisation, Reproduzierbarkeit und kollaboratives Arbeiten.
template/
├── .git/ # Git Repository
├── .venv/ # Virtuelle Python-Umgebung
├── .vscode/ # VS Code Konfiguration
│ ├── extensions.json # Empfohlene VS Code Extensions
│ └── settings.json # Workspace-spezifische Einstellungen
├── data/ # Datenverzeichnis (nicht versioniert)
│ ├── raw/ # Rohdaten
│ └── processed/ # Verarbeitete Daten
├── docs/ # Dokumentation
│ └── project.md # Projektbeschreibung und Anleitungen
├── notebooks/ # Jupyter Notebooks
│ └── 01_exploration.ipynb # Beispiel-Notebook
├── src/ # Python Source Code
│ └── core/
│ ├── __init__.py # Macht core zu einem Package
│ └── data.py # Datenlade-Funktionen
├── .gitignore # Git Ignore Regeln
├── .python-version # Python Version für uv
├── pyproject.toml # Projekt-Konfiguration
├── README.md # Projekt-Beschreibung
└── uv.lock # Abhängigkeiten Lock-File
Enthält VS Code spezifische Konfigurationen:
extensions.json: Empfohlene VS Code Extensions für das Projekt (z.B. Python, Jupyter)settings.json: Workspace-spezifische Einstellungen
Das Datenverzeichnis ist durch .gitignore vom Versionskontrollsystem ausgeschlossen und sollte nicht ins Repository committed werden.
raw/: Ursprüngliche, unveränderte Rohdatenprocessed/: Bereinigte, transformierte oder aggregierte Daten
Wichtig: Rohdaten sollten niemals überschrieben werden. Alle Transformationen werden in verarbeitete Daten gespeichert.
Jupyter Notebooks für explorative Datenanalyse und Experimente.
01_exploration.ipynb: Beispiel-Notebook zum Testen des Setups- Lädt einen Datensatz von Kaggle
- Zeigt erste explorative Analysen
- Dient als Vorlage für weitere Notebooks
Naming Convention: Nummerierung mit Präfix (01*, 02*, ...) für chronologische Reihenfolge.
Python-Module mit wiederverwendbarem Code, der aus Notebooks ausgelagert wird.
__init__.py: Machtcorezu einem Python-Packagedata.py: Funktionen zum Laden und Verarbeiten von Daten (z.B. Kaggle Downloads)
Best Practice: Code, der in mehreren Notebooks verwendet wird, sollte in Module ausgelagert werden.
Zentrale Konfigurationsdatei für das Python-Projekt. Sie definiert Metadaten und Abhängigkeiten.
[project]
name = "dpp-template" # Ändern Sie dies auf Ihren Projektnamen
version = "0.1.0" # Versionsnummer
description = "Add your description here" # Kurze Projektbeschreibung
readme = "README.md" # Pfad zur README-Datei
requires-python = ">=3.14" # Unterstützte Python-VersionPasse diese Felder an dein Projekt an!
Die dependencies Liste enthält alle benötigten Python-Pakete:
dependencies = [
"ipykernel>=7.0.1", # Jupyter Kernel
"kagglehub>=0.3.13", # Kaggle Integration
"matplotlib>=3.10.7", # Plotting
"pandas>=2.3.3", # Datenanalyse
"seaborn>=0.13.2", # Visualisierung
"duckdb>=1.4.1", # In-Memory Datenbank für Analysen mit SQL
"scikit-learn>=1.7.2", # Machine Learning
]ipykernel
Stellt die Verbindung zwischen Jupyter Notebooks und dem Python-Kernel her. Ermöglicht die interaktive Ausführung von Python-Code in Jupyter-Umgebungen.
kagglehub
Offizielles Python-Package für die Integration mit Kaggle, ermöglicht den einfachen Zugriff auf Kaggle-Datasets und -Modelle. Vereinfacht das Herunterladen und Verwalten von Kaggle-Ressourcen direkt aus Python-Code.
matplotlib
Die grundlegende Plotting-Bibliothek für Python, bietet umfangreiche Möglichkeiten zur Erstellung statischer, animierter und interaktiver Visualisierungen. Dient als Basis für viele andere Visualisierungsbibliotheken.
pandas
Die zentrale Bibliothek für Datenanalyse in Python mit leistungsstarken Datenstrukturen wie DataFrame und Series. Bietet intuitive Werkzeuge für Datenmanipulation, -bereinigung und -analyse.
seaborn
High-Level-Visualisierungsbibliothek basierend auf matplotlib, spezialisiert auf statistische Grafiken. Ermöglicht die Erstellung ästhetisch ansprechender und informativer Visualisierungen mit weniger Code.
duckdb
Hochperformante In-Memory SQL-Datenbank, optimiert für analytische Workloads (OLAP). Ermöglicht SQL-Abfragen direkt auf DataFrames und CSV-Dateien ohne externe Datenbankserver.
scikit-learn
Die umfassendste Machine-Learning-Bibliothek für Python mit Algorithmen für Klassifikation, Regression, Clustering und mehr. Bietet eine einheitliche API und umfangreiche Tools für Modelltraining, -evaluation und -präprozessierung.
Das Build System ermöglicht es, den src/core Code als importierbares Python-Package zu verwenden:
[build-system]
requires = ["uv_build>=0.8.9,<0.9.0"]
build-backend = "uv_build"
[tool.uv.build-backend]
module-name = "core"Dadurch kannst du in Notebooks from core.data import ... verwenden.
Definiert Dateien und Ordner, die nicht ins Git Repository committed werden sollen:
- Virtuelle Umgebungen (
.venv/) - Datenverzeichnisse (
data/) - Cache-Dateien (
__pycache__/,*.pyc) - IDE-spezifische Dateien
- Wurde mit gitignore.io generiert
Lock-File, das exakte Versionen aller Abhängigkeiten festhält. Gewährleistet Reproduzierbarkeit.
Wichtig: Diese Datei sollte ins Repository committed werden!
UV ist ein moderner, schneller Python Package Manager. Hier sind die wichtigsten Befehle:
uv add <paketname>Beispiel:
uv add numpy
uv add plotly>=5.0.0Dies fügt das Paket zu pyproject.toml hinzu und aktualisiert uv.lock.
uv remove <paketname>Beispiel:
uv remove numpyuv syncInstalliert alle in pyproject.toml definierten Pakete und bringt die virtuelle Umgebung auf den aktuellen Stand.
Wichtig: Führe uv sync aus nach:
- Clone eines Repositories
- Änderungen an
pyproject.toml - Pull von Updates
- Repository klonen oder Template kopieren
- Abhängigkeiten installieren:
uv sync - Öffne
01_exploration.ipynbin VS Code und Wähle oben rechts dein Environment als Kernel 01_exploration.ipynbausführen, um Setup zu testen.- Bei Problemen an Mentoring wenden
- Analysen in Notebooks durchführen
- Wiederverwendbaren Code in
src/core/Module auslagern - Daten in
data/raw/ablegen (nicht committen!) - Verarbeitete Daten in
data/processed/speichern - Regelmäßig committen mit aussagekräftigen Commit-Messages
- Mindestens einmal pro Tag Änderungen auf GitHub pushen
- Regelmäßig pushen und pullen um Konflikte zu vermeiden
- Nach Änderungen an
pyproject.tomlbzw.uv.lockimmeruv syncausführen
- Daten nicht versionieren: Große Datensätze gehören nicht ins Git Repository
- Reproduzierbarkeit:
uv.lockcommitten für identische Umgebungen - Code-Organisation: Wiederholter Code → Module, Einmalige Analysen → Notebooks
- Dokumentation: README und Docstrings aktuell halten
- Naming: Aussagekräftige Namen für Notebooks und Module