2  2 Vorverarbeitung & Validierung einer Zeitreihe

3 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
Merke

Zeitreihenanalyse ist nur so gut wie die Datenbasis. Validierung ist kein optionaler Schritt.

3.1 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

3.2 2.2 Schritt 1: Sortierung sicherstellen

y = y.sort_index()

3.3 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()

3.4 2.4 Schritt 3: Fehlende Werte analysieren

y.isna().sum()
np.int64(5)

3.4.1 Visualisierung der Lücken

import matplotlib.pyplot as plt

y.plot(title="Zeitreihe mit Missing Values")
plt.show()

3.4.2 Behandlungsmöglichkeiten

y_ffill = y.ffill()
y_interp = y.interpolate("time")
Entscheidungshilfe
  • ffill: sinnvoll bei Zustandsdaten („gilt bis zur nächsten Messung“)
  • interpolate("time"): sinnvoll bei kontinuierlichen Messgrößen

3.5 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.

3.6 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()
np.int64(5)
Achtung

Ohne explizite Frequenz können Zeitlücken unsichtbar bleiben.

3.7 2.7 Validierungs-Checkliste

Bevor Sie weiter analysieren:

3.8 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.