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