Python-Tools zur automatischen Analyse und Visualisierung von Arbeitszeitdaten mit PDF-Report und Timeline-Generierung.

- 🚀 Features
- 📦 Installation
- 💻 Verwendung
- 📁 CSV-Datei Format
- 📁 Output-Struktur
- 🔧 Konfiguration
- 📊 Beispiel-Workflow
- 🎨 Visualisierungs-Features
- 🐛 Troubleshooting
- 📝 Lizenz
- 🤝 Contributing
- 📧 Support
- Übersichtsdiagramme: Arbeitsstunden pro Monat, Durchschnitte nach Wochentag, Überstunden-Analyse
- Gestapelte Balkendiagramme: Visualisierung aller Arbeitsarten (Anwesenheitszeit, Urlaub, Krankenstand, Feiertage, Zeitausgleich)
- Detaillierte Monatsberichte: Tägliche Stundenübersicht mit Statistiken
- CSV-Export: Tagesreport als CSV-Datei
- Konsolenausgabe: Übersichtliche Zusammenfassung im Terminal
- Großformatige Timeline (5000x1000 Pixel): Jahresübersicht aller Buchungen
- Gestapelte Tagesbalken: Alle Arbeitsarten in einem durchgehenden Diagramm
- Monatliche Delta-Anzeige: Über-/Minusstunden pro Monat mit Urlaubs-, Kranken- und Zeitausgleichstagen
- Wochenend-Markierung:
- Grauer Hintergrund bei keiner Arbeit
- Transparenter oranger Balken bei Wochenendarbeit
- Feiertags-Markierung: Transparenter oranger Balken bei Arbeit an Feiertagen
- Referenzlinien:
- Rote gestrichelte Linie für Soll-Stunden
- Braune gestrichelte Linie bei 10h-Grenze
- Statistikboxen:
- Links oben: Lange Arbeitstage (Gesamt, FT/WE-Tage, >9h, >10h)
- Rechts oben: Jahresstatistik (Delta, Urlaub, Zeitausgleich, Krankenstand)
- Monats-Labels: Monatsnamen mit Trennlinien
- Montags-Achse: Zusätzliche X-Achse mit Montags-Daten
- Anwesenheit: Anwesenheitszeit + Urlaub + Krankenstand + Feiertage (für Soll-Vergleich)
- Tatsächliche Arbeitszeit: Nur Anwesenheitszeit (für Überstunden-Berechnung)
- Feiertage: Automatische Ergänzung an Werktagen ohne Einträge
- Montag-Donnerstag: 8,5h
- Freitag: 5,0h
- Wochenende: nicht berücksichtigt
- Bundesland-spezifisch: Unterstützung aller deutschen Bundesländer via
holidayslibrary
- Python 3.8+
- pip (Python Package Manager)
pip install pandas matplotlib numpy holidaysBeide Tools unterstützen folgende Parameter:
# Grundlegende Verwendung
python generateReport.py [INPUT_FILE] [--bundesland BUNDESLAND] [-m] [-c]
python generateTimeline.py [INPUT_FILE] [--bundesland BUNDESLAND]
# Beispiele
python generateReport.py # Standard: ./2025.csv, Bundesland: BY
python generateReport.py 2024.csv # Eigene Datei mit Standard-Bundesland
python generateReport.py 2024.csv --bundesland BW # Baden-Württemberg
python generateReport.py 2025.csv -m # Mit Monatsdiagrammen
python generateReport.py 2024.csv -c # Mit CSV-Export
python generateReport.py 2024.csv --bundesland BW -m -c # Alles kombiniert
python generateTimeline.py 2025.csv --bundesland HE # Hessen
# Hilfe anzeigen
python generateReport.py --help
python generateTimeline.py --help| Parameter | Tool | Beschreibung | Standard | Pflicht |
|---|---|---|---|---|
INPUT_FILE |
Beide | CSV-Datei mit Arbeitszeitdaten | ./fake.csv |
Nein |
--bundesland |
Beide | Bundesland-Kürzel für Feiertage | BY |
Nein |
-m, --create-monthly-charts |
Report | Erstelle einzelne Monatsdiagramme | False |
Nein |
-c, --create-csv |
Report | Erstelle CSV-Export der Tagesdaten | False |
Nein |
| Kürzel | Bundesland |
|---|---|
BY |
Bayern (Standard) |
BW |
Baden-Württemberg |
BE |
Berlin |
BB |
Brandenburg |
HB |
Bremen |
HH |
Hamburg |
HE |
Hessen |
MV |
Mecklenburg-Vorpommern |
NI |
Niedersachsen |
NW |
Nordrhein-Westfalen |
RP |
Rheinland-Pfalz |
SL |
Saarland |
SN |
Sachsen |
ST |
Sachsen-Anhalt |
SH |
Schleswig-Holstein |
TH |
Thüringen |
Die Eingabedatei muss folgende Spalten enthalten:
| Spalte | Beschreibung | Format | Beispiel |
|---|---|---|---|
Art |
Arbeitsart | Text | Anwesenheitszeit, Urlaub, Krankenstand, Zeitausgleich |
Start |
Startzeit | DD.MM.YYYY HH:MM | 01.01.2025 08:00 |
Ende |
Endzeit | DD.MM.YYYY HH:MM | 01.01.2025 17:00 |
Dauer |
Dauer in Stunden | Komma als Dezimaltrenner | 8,5 |
Pause |
Pausenzeit in Minuten | Zahl | 30 |
Notiz |
Optional | Text | - |
Status |
Optional | Text | - |
Beispiel CSV:
Art,Notiz,Start,Ende,Dauer,Pause,Status
Anwesenheitszeit,,02.01.2025 08:00,02.01.2025 17:00,"8,50",30,Veraenderbar
Urlaub,,03.01.2025 00:00,03.01.2025 00:00,"8,50",0,Veraenderbar
Krankenstand,,06.01.2025 00:00,06.01.2025 00:00,"8,50",0,VeraenderbarNach der Ausführung werden folgende Dateien erstellt:
main/
├── report/
│ ├── report.pdf # Vollständiger PDF-Report (generateReport.py)
│ ├── timeline.png # Timeline-Visualisierung (generateTimeline.py)
│ ├── tages_report.csv # CSV-Export der Tagesdaten (nur mit -c)
│ ├── januar.png # Monatsdiagramm (nur mit -m)
│ ├── februar.png # Monatsdiagramm (nur mit -m)
│ └── ... # Weitere Monatsdiagramme
-
report.pdf: Vollständiger Report mit:
- Zusammenfassungsseite (Gesamtübersicht, Monatsübersicht, Wochentagsübersicht)
- Visualisierungsseiten (4 Hauptdiagramme)
- Detaillierte Monatsseiten mit Statistiken
-
timeline.png: Große Timeline-Visualisierung (5000x1000 Pixel) mit:
- Durchgehende Jahresübersicht
- Monatliche Delta-Boxen
- Statistikboxen für Jahresübersicht und lange Arbeitstage
- Referenzlinien und Markierungen
-
tages_report.csv (nur mit
-c): Tägliche Zusammenfassung aller Buchungen -
Monatsdiagramme (nur mit
-m):- Einzelne PNG-Diagramme pro Monat (300 DPI)
- Dateinamen:
januar.png,februar.png,maerz.png, etc. - Speicherort:
report/Verzeichnis - Detaillierte Tagesansicht mit Statistiken pro Monat
Alle Einstellungen sind zentral in der config.py organisiert. Dies ermöglicht einfache Anpassungen ohne Änderungen am Hauptcode.
Die config.py ist in folgende Sektionen unterteilt:
SOLL_STUNDEN_TAG = {
'Monday': 8.5,
'Tuesday': 8.5,
'Wednesday': 8.5,
'Thursday': 8.5,
'Friday': 5.0,
'Saturday': 0,
'Sunday': 0
}
SOLL_STUNDEN_MONAT = 169COLORS = {
'Anwesenheitszeit': 'steelblue',
'Urlaub': 'darkgreen',
'Krankenstand': 'gray',
'Feiertag': 'orange',
'Zeitausgleich': 'purple'
}
# Soll/Ist-Vergleiche
SOLL_LINE_COLOR = 'red'
IST_BAR_COLOR = 'steelblue'
POSITIVE_COLOR = 'green'
NEGATIVE_COLOR = 'red'ALPHA_BARS = 0.9 # Balkendiagramme
ALPHA_BOXES = 0.7 # Statistikboxen
ALPHA_WEEKEND_WORK = 0.25 # Wochenendarbeit-Overlay
ALPHA_SOLL_LINE = 0.75 # Soll-LinieSOLL_LINE_WIDTH = 2.5
TEN_HOUR_LINE_WIDTH = 2.5
MONTH_LINE_WIDTH = 1.5TIMELINE_WIDTH = 5000 # Pixel
TIMELINE_HEIGHT = 1000 # Pixel
TIMELINE_DPI = 100CHART_WIDTH_A4 = 8.27 # A4 Breite in Inches
CHART_HEIGHT_STANDARD = 5 # Standard Chart-Höhe
DPI_EXPORT_PNG = 300 # Hohe AuflösungTITLE_FONTSIZE_PDF = 24
SUBTITLE_FONTSIZE_PDF = 12
DELTA_BOX_FONTSIZE = 11
LEGEND_FONTSIZE = 16REPORT_DIR = './report'
MONTHLY_DIR = './monthly'Um Einstellungen zu ändern, bearbeiten Sie einfach die config.py:
# Beispiel: Farben ändern
nano config.py
# oder
vim config.pyWichtig: Nach Änderungen in config.py müssen die Skripte neu gestartet werden
# 1. Daten für 2024 analysieren (Bayern)
python generateReport.py 2024.csv
# 2. Timeline für 2024 erstellen
python generateTimeline.py 2024.csv
# 3. Daten für 2025 mit anderem Bundesland und Monatsdiagrammen
python generateReport.py 2025.csv --bundesland NW -m
python generateTimeline.py 2025.csv --bundesland NW
# 4. Mit CSV-Export und Monatsdiagrammen
python generateReport.py 2024.csv -m -c
# 5. Nur CSV-Export
python generateReport.py 2024.csv -cAlle visuellen Einstellungen werden über config.py zentral gesteuert.
- Abmessungen: 5000x1000 Pixel (konfigurierbar:
TIMELINE_WIDTH,TIMELINE_HEIGHT) - Balkenbreite: 1.0 - keine Lücken zwischen Tagen (konfigurierbar:
BAR_WIDTH) - Transparenz (konfigurierbar):
- Wochenend-/Feiertagsarbeit: 25% (
ALPHA_WEEKEND_WORK) - Statistikboxen: 70% (
ALPHA_BOXES) - Soll-Linie: 75% (
ALPHA_SOLL_LINE)
- Wochenend-/Feiertagsarbeit: 25% (
- Farben (konfigurierbar):
- Wochenendarbeit: Orange (
WEEKEND_WORK_COLOR) - Soll-Linie: Rot (
SOLL_LINE_COLOR) - 10h-Grenze: Braun (
TEN_HOUR_LINE_COLOR)
- Wochenendarbeit: Orange (
- Z-Order Management (konfigurierbar): Korrekte Überlagerung von Elementen
- Statistikboxen:
ZORDER_STATISTICS(20) - Delta-Boxen:
ZORDER_DELTA_BOX(15) - Monatslinien:
ZORDER_MONTH_LINES(10) - Soll-Linie:
ZORDER_SOLL_LINE(5) - 10h-Linie:
ZORDER_TEN_HOUR_LINE(2)
- Statistikboxen:
- Schriftgrößen (konfigurierbar):
- Delta-Boxen: 11pt (
DELTA_BOX_FONTSIZE) - Statistikboxen: 9pt (
STATS_BOX_FONTSIZE) - Legende: 16pt (
LEGEND_FONTSIZE)
- Delta-Boxen: 11pt (
- PDF-Format: A4 (8.27 x 11.69 Inches) - konfigurierbar:
PDF_WIDTH_A4,PDF_HEIGHT_A4 - Chart-Größen (konfigurierbar):
- Standard-Charts: 8.27 x 5 Inches (
CHART_WIDTH_A4,CHART_HEIGHT_STANDARD) - Monatsdiagramme: 8.27 x 7 Inches (
CHART_HEIGHT_MONTHLY)
- Standard-Charts: 8.27 x 5 Inches (
- DPI-Einstellungen (konfigurierbar):
- Monatsdiagramm-Export: 300 DPI (
DPI_EXPORT_PNG) - Eingebettete Charts: 150 DPI (
DPI_EMBED_PNG)
- Monatsdiagramm-Export: 300 DPI (
- Farbcodierung (konfigurierbar):
- Positive Deltas: Grün (
POSITIVE_COLOR) - Negative Deltas: Rot (
NEGATIVE_COLOR) - Ist-Balken: Steelblue (
IST_BAR_COLOR)
- Positive Deltas: Grün (
- Linienbreiten (konfigurierbar):
- Soll-Linie: 2.5pt (
SOLL_LINE_WIDTH) - Monatsdiagramm Soll-Linie: 2.0pt (
MONTHLY_SOLL_LINE_WIDTH)
- Soll-Linie: 2.5pt (
- Transparenz (konfigurierbar):
- Balken: 90% (
ALPHA_BARS) - Statistikboxen: 70% (
ALPHA_BOXES)
- Balken: 90% (
Problem: ModuleNotFoundError: No module named 'holidays'
pip install holidaysProblem: Feiertage werden nicht angezeigt
- Prüfen Sie das Bundesland-Kürzel
- Für 2024/2025 unterstützt die
holidayslibrary alle deutschen Bundesländer
Problem: Timeline ist zu groß/zu klein
- Passen Sie die Werte in
config.pyan:TIMELINE_WIDTH = 5000 # Breite in Pixel TIMELINE_HEIGHT = 1000 # Höhe in Pixel TIMELINE_DPI = 100 # Auflösung
Problem: Farben/Schriftgrößen ändern
- Alle visuellen Einstellungen sind in
config.pyzentral konfigurierbar - Ändern Sie die entsprechenden Konstanten und starten Sie das Skript neu
Problem: CSV wird nicht gelesen
- Prüfen Sie das Format (Komma als Delimiter, Semikolon in Dauer)
- Stellen Sie sicher, dass alle Pflicht-Spalten vorhanden sind
Problem: ImportError: cannot import name 'XXX' from 'config'
- Stellen Sie sicher, dass
config.pyim selben Verzeichnis liegt - Prüfen Sie, ob die Konstante in
config.pydefiniert ist