2 Vorverarbeitung & Validierung einer Zeitreihe
Bevor eine Zeitreihe analysiert wird, muss sie formal korrekt und konsistent sein.
Viele Fehler in späteren Analysen entstehen durch:
- unsortierte Zeitstempel
- doppelte Zeitpunkte
- fehlende Werte
- unregelmäßige Abtastung
- implizite Zeitlücken
Zeitreihenanalyse ist nur so gut wie die Datenbasis. Validierung ist kein optionaler Schritt.
2.1 Beispiel-Zeitreihe mit Problemen
Wir erzeugen bewusst eine fehlerhafte Zeitreihe (unsortiert, Duplikate, Missing Values).
import numpy as np
import pandas as pd
rng = np.random.default_rng(1)
t = pd.date_range("2025-01-01", periods=24*3, freq="h")
y = pd.Series(10 + rng.normal(size=len(t)), index=t, name="signal")
# Probleme erzeugen
y = y.sample(frac=1) # unsortiert
y = pd.concat([y, y.iloc[5:8]]) # Duplikate (append ist deprecated/entfernt)
y.iloc[10:15] = np.nan # fehlende Werte
y.head()
2025-01-02 23:00:00 9.493708
2025-01-01 15:00:00 10.598846
2025-01-02 15:00:00 10.109014
2025-01-01 16:00:00 10.039722
2025-01-02 22:00:00 10.035586
Name: signal, dtype: float64
2.2 Schritt 1: Sortierung sicherstellen
2.3 Schritt 2: Duplikate erkennen und behandeln
Duplikate erkennen:
dup_mask = y.index.duplicated(keep=False)
y[dup_mask].head(10)
2025-01-01 21:00:00 9.724397
2025-01-01 21:00:00 9.724397
2025-01-01 22:00:00 11.294064
2025-01-01 22:00:00 11.294064
2025-01-03 19:00:00 10.759520
2025-01-03 19:00:00 10.759520
Name: signal, dtype: float64
Duplikate müssen methodisch entschieden behandelt werden, z. B.:
- Mittelwert pro Zeitstempel (typisch bei Messwerten)
- ersten/letzten Wert behalten (typisch bei Status-Updates)
- entfernen (wenn klar fehlerhaft)
Beispiel: Mittelwert pro Zeitstempel
y = y.groupby(level=0).mean()
2.4 Schritt 3: Fehlende Werte analysieren
Visualisierung der Lücken
import matplotlib.pyplot as plt
y.plot(title="Zeitreihe mit Missing Values")
plt.show()
Behandlungsmöglichkeiten
y_ffill = y.ffill()
y_interp = y.interpolate("time")
ffill: sinnvoll bei Zustandsdaten („gilt bis zur nächsten Messung“)
interpolate("time"): sinnvoll bei kontinuierlichen Messgrößen
2.5 Schritt 4: Abtastrate prüfen
Ist die Zeitreihe regelmäßig?
diffs = y.index.to_series().diff()
diffs.value_counts().head()
0 days 01:00:00 71
Name: count, dtype: int64
Wenn mehrere Zeitabstände auftreten → unregelmäßige Abtastung oder Zeitlücken.
2.6 Zeitlücken explizit machen
Mit asfreq wird die erwartete Frequenz erzwungen. Fehlende Zeitpunkte werden als NaN sichtbar.
y_regular = y.asfreq("h")
y_regular.isna().sum()
Ohne explizite Frequenz können Zeitlücken unsichtbar bleiben.
2.7 Validierungs-Checkliste
Bevor Sie weiter analysieren:
2.8 Mini-Aufgabe
Erzeugen Sie selbst eine Zeitreihe mit:
- unregelmäßiger Abtastung
- 5 fehlenden Zeitpunkten
- 3 Duplikaten
Implementieren Sie anschließend eine saubere Validierung gemäß Checkliste.