Pandas Fensterfunktionen (rolling / expanding / ewm)

Fensterfunktionen werden verwendet, um gleitende Fensterberechnungen auf Zeitreihen oder geordneten Daten durchzuführen, und sind wichtige Werkzeuge in Bereichen wie Finanzanalyse und Signalverarbeitung.


rolling Gleitendes Fenster

Grundlegende Verwendung

Beispiel

import pandas as pd
import numpy as np

# Zeitreihendaten erstellen
np.random.seed(42)
dates = pd.date_range("2024-01-01", periods=20, freq="D")
ts = pd.Series(np.random.randint(100, 200, 20), index=dates)

print("Originaldaten (erste 10 Zeilen):")
print(ts.head(10))
print()

# 7-Tage-gleitender Durchschnitt
ma7 = ts.rolling(window=7).mean()
print("7-Tage-gleitender Durchschnitt (erste 10 Zeilen):")
print(ma7.head(10))
print()

# Gleitende Summe
rolling_sum = ts.rolling(window=5).sum()
print("Gleitende Summe über 5 Tage:")
print(rolling_sum.head(10))

Typen gleitender Fenster

Beispiel

import pandas as pd
import numpy as np

s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# Feste Fenstergröße
print("Festes Fenster (3):")
print(s.rolling(3).mean())
print()

# Bewegliches Fenster (Zeitfenster)
# Fenster nach 1 Minute
s2 = pd.Series([1, 2, 3, 4, 5], index=pd.date_range("2024-01-01", periods=5, freq="T"))
print("Zeitfenster (1 Minute):")
print(s2.rolling("1min").sum())

expanding Expandierendes Fenster

Das expandierende Fenster akkumuliert vom Anfang bis zur aktuellen Position, wobei die Fenstergröße allmählich zunimmt.

Beispiel

import pandas as pd
import numpy as np

s = pd.Series([1, 2, 3, 4, 5])

# Expandierendes Fenster zur Berechnung des kumulativen Mittelwerts
exp_mean = s.expanding().mean()
print("Kumulativer Mittelwert:")
print(exp_mean)
print()

# Expandierendes Fenster zur Berechnung des kumulativen Maximums
exp_max = s.expanding().max()
print("Kumulatives Maximum:")
print(exp_max)
print()

# Expandierendes Fenster zur Berechnung der Standardabweichung
exp_std = s.expanding().std()
print("Kumulative Standardabweichung:")
print(exp_std)

ewm Exponentiell gewichtete gleitende

Der exponentiell gewichtete gleitende Durchschnitt (EWMA) weist aktuellen Daten ein größeres Gewicht zu.

Beispiel

import pandas as pd
import numpy as np

s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

# Je kleiner alpha, desto größer das Gewicht der aktuellen Daten
ewm_05 = s.ewm(alpha=0.5).mean()
ewm_2 = s.ewm(alpha=0.2).mean()

print("Originaldaten:")
print(s.values)
print("\nalpha=0.5:")
print(ewm_05.values)
print("\nalpha=0.2:")
print(ewm_2.values)
print()

Verwendung von span (Beziehung zu alpha: alpha = 2/(span+1))
ewm_span = s.ewm(span=5).mean()
print("span=5:")
print(ewm_span.values)

EWM reagiert empfindlicher auf Trendänderungen und eignet sich für Szenarien, die eine schnelle Reaktion erfordern.


Praxis: Technische Aktienindikatoren

Beispiel

import pandas as pd
import numpy as np

# Aktienkursdaten simulieren
np.random.seed(42)
dates = pd.date_range("2024-01-01", periods=30, freq="D")
df = pd.DataFrame({
    "Date": dates,
    "Close": 100 + np.random.randn(30).cumsum()
})

# Technische Indikatoren berechnen
# 5-Tage-gleitender Durchschnitt
df["MA5"] = df["Close"].rolling(5).mean()

# 10-Tage-gleitender Durchschnitt
df["MA10"] = df["Close"].rolling(10).mean()

# Exponentiell gewichteter gleitender Durchschnitt über 5 Tage
df["EMA5"] = df["Close"].ewm(span=5).mean()

# Volatilität (rollierende Standardabweichung über 5 Tage)
df["Volatility"] = df["Close"].rolling(5).std()

# Kumulierter Höchstpreis
df["Highest"] = df["Close"].expanding().max()

print("Technische Indikatoren für Aktien:")
print(df.round(2))

Vergleich von Fensterfunktionen

Type Beschreibung Anwendungsfälle
rolling Fenster fester Größe Gleitender Durchschnitt, Volatilität
expanding Kumulatives Fenster Kumulative Statistiken, Stop-Loss/Take-Profit
ewm Exponentiell gewichtet Trendverfolgung, schnelle Reaktion
Andere Erweiterungen