Funkce klouzavého okna v pandas

Manipulace s časovými řadami v Pythonu

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Funkce oken v pandas

  • Okna vymezují dílčí období časové řady
  • Výpočet metrik pro dílčí období uvnitř okna
  • Vytvoření nové časové řady metrik
  • Dva typy oken:
    • Klouzavé: stejná velikost, posuvné (toto video)
    • Rozšiřující: obsahují všechny předchozí hodnoty (další video)
Manipulace s časovými řadami v Pythonu

Výpočet klouzavého průměru

data = pd.read_csv('google.csv', parse_dates=['date'], index_col='date')
DatetimeIndex: 1761 entries, 2010-01-04 to 2016-12-30
Data columns (total 1 columns):
price     1761 non-null float64
dtypes: float64(1)

Graf ceny akcií Google v čase

Manipulace s časovými řadami v Pythonu

Výpočet klouzavého průměru

# Integer-based window size
data.rolling(window=30).mean() # fixed # observations
DatetimeIndex: 1761 entries, 2010-01-04 to 2017-05-24
Data columns (total 1 columns):
price    1732 non-null float64
dtypes: float64(1)
  • window=30: počet pracovních dní
  • min_periods: zvolte hodnotu < 30 pro výsledky od prvních dní
Manipulace s časovými řadami v Pythonu

Výpočet klouzavého průměru

# Offset-based window size
data.rolling(window='30D').mean() # fixed period length
DatetimeIndex: 1761 entries, 2010-01-04 to 2017-05-24
Data columns (total 1 columns):
price    1761 non-null float64
dtypes: float64(1)
  • 30D: počet kalendářních dní
Manipulace s časovými řadami v Pythonu

Klouzavý průměr za 90 dní

r90 = data.rolling(window='90D').mean()

google.join(r90.add_suffix('_mean_90')).plot()

Graf klouzavého průměru za 90 dní

Manipulace s časovými řadami v Pythonu

Klouzavé průměry za 90 a 360 dní

data['mean90'] = r90

r360 = data['price'].rolling(window='360D'.mean()
data['mean360'] = r360; data.plot()

Klouzavé průměry za 90 a 360 dní

Manipulace s časovými řadami v Pythonu

Více klouzavých metrik (1)

r = data.price.rolling('90D').agg(['mean', 'std'])

r.plot(subplots = True)

Více klouzavých metrik – průměr a směrodatná odchylka

Manipulace s časovými řadami v Pythonu

Více klouzavých metrik (2)

rolling = data.google.rolling('360D')

q10 = rolling.quantile(0.1).to_frame('q10')
median = rolling.median().to_frame('median')
q90 = rolling.quantile(0.9).to_frame('q90')
pd.concat([q10, median, q90], axis=1).plot()

Více klouzavých metrik – kvantily a medián

Manipulace s časovými řadami v Pythonu

Pojďme procvičovat!

Manipulace s časovými řadami v Pythonu

Preparing Video For Download...