Скользящие оконные функции в pandas

Работа с временными рядами в Python

Stefan Jansen

Founder & Lead Data Scientist at Applied Artificial Intelligence

Оконные функции в pandas

  • Окна выделяют подпериоды временного ряда
  • Метрики рассчитываются для каждого подпериода внутри окна
  • Результат — новый временной ряд метрик
  • Два типа окон:
    • Скользящее: фиксированного размера, сдвигается (это видео)
    • Расширяющееся: включает все предыдущие значения (следующее видео)
Работа с временными рядами в Python

Вычисление скользящего среднего

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)

Скользящие оконные функции в pandas — слайд 010

Работа с временными рядами в Python

Вычисление скользящего среднего

# 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: количество рабочих дней
  • min_periods: задайте значение < 30, чтобы получить результаты с первых дней
Работа с временными рядами в Python

Вычисление скользящего среднего

# 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: количество календарных дней
Работа с временными рядами в Python

Скользящее среднее за 90 дней

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

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

Скользящее среднее за 90 дней — слайд 017

Работа с временными рядами в Python

Скользящие средние за 90 и 360 дней

data['mean90'] = r90

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

Скользящие средние за 90 и 360 дней — слайд 020

Работа с временными рядами в Python

Несколько скользящих метрик (1)

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

r.plot(subplots = True)

Несколько скользящих метрик (1) — слайд 022

Работа с временными рядами в Python

Несколько скользящих метрик (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()

Несколько скользящих метрик (2) — слайд 024

Работа с временными рядами в Python

Давайте потренируемся!

Работа с временными рядами в Python

Preparing Video For Download...