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.