DataFrame.ewm() / Series.ewm()

Метод ewm() создаёт объект для экспоненциально взвешенных вычислений (EWM — Exponentially Weighted Moving). Применяется для сглаживания шумных временных рядов: новые значения получают больший вес, старые — экспоненциально меньший.

Сигнатура

DataFrame.ewm(com=None, span=None, halflife=None, alpha=None,
              min_periods=0, adjust=True, ignore_na=False, axis=0)
Series.ewm(com=None, span=None, halflife=None, alpha=None,
           min_periods=0, adjust=True, ignore_na=False, axis=0)

Параметры

Должен быть задан ровно один из:

  • com — центр массы (α = 1 / (1 + com)).

  • span — N-периодный аналог (α = 2 / (span + 1)).

  • halflife — период полураспада.

  • alpha — коэффициент сглаживания напрямую (0 < α ≤ 1).

Доп.: min_periods, adjust, ignore_na.

Возвращаемое значение

Объект ExponentialMovingWindow, к которому применяются .mean(), .std(), .var() и т. д.

Примеры

Пример 1. Сглаживающее среднее

import pandas as pd

s = pd.Series([1, 2, 3, 4, 5])
print(s.ewm(span=3).mean().round(3))
0    1.000
1    1.667
2    2.429
3    3.267
4    4.161
dtype: float64

Пример 2. Фильтрация шума ультразвука

Расстояние с RCWL-9610A зашумлено — сгладим EMA:

import pandas as pd

dist = pd.Series([12.0, 11.5, 12.8, 11.9, 12.1, 11.7])
print(dist.ewm(alpha=0.3).mean().round(2))
0    12.00
1    11.71
2    12.29
3    12.11
4    12.11
5    11.96
dtype: float64

Пример 3. С halflife

import pandas as pd

s = pd.Series([10, 20, 30, 40])
print(s.ewm(halflife=2).mean().round(3))
0    10.000
1    15.858
2    21.882
3    28.305
dtype: float64

Пример 4. Экспоненциальная дисперсия

import pandas as pd

s = pd.Series([1, 3, 2, 5, 4])
print(s.ewm(span=3).std().round(3))
0      NaN
1    1.414
2    0.964
3    1.732
4    1.500
dtype: float64

Пример 5. С min_periods

import pandas as pd

s = pd.Series([1, 2, 3, 4])
print(s.ewm(span=2, min_periods=3).mean().round(3))
0      NaN
1      NaN
2    2.429
3    3.467
dtype: float64

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.