Как рассчитать скользящие средние в Python


Скользящее среднее — это метод, который можно использовать для сглаживания данных временных рядов, чтобы уменьшить «шум» в данных и упростить выявление закономерностей и тенденций.

Идея скользящей средней состоит в том, чтобы взять среднее значение за определенное количество предыдущих периодов, чтобы получить «скользящую среднюю» для данного периода.

В этом руководстве объясняется, как рассчитать скользящие средние в Python.

Пример: скользящие средние в Python

Предположим, у нас есть следующий массив, который показывает общий объем продаж определенной компании за 10 периодов:

x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]

Способ 1: Используйте функцию cumsum().

Один из способов вычислить скользящее среднее — использовать функцию cumsum():

import numpy as np

#define moving average function
def moving_avg(x, n):
 cumsum = np.cumsum(np.insert(x, 0, 0)) 
 return (cumsum[n:] - cumsum[:-n]) / float(n)

#calculate moving average using previous 3 time periods
n = 3
moving_avg(x, n):

array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])

Вот как интерпретировать вывод:

  • Скользящее среднее в третьем периоде равно 47. Оно рассчитывается как среднее первых трех периодов: (50+55+36)/3 = 47 .
  • Скользящая средняя в четвертом периоде равна 46,67. Это рассчитывается как среднее значение за предыдущие три периода: (55+36+49)/3 = 46,67 .

И так далее.

Способ 2: Используйте панд.

Другой способ вычислить скользящее среднее — написать функцию на основе pandas:

import pandas as pd

#define array to use and number of previous periods to use in calculation 
x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]
n=3

#calculate moving average
pd.Series(x).rolling(window=n).mean().iloc[n-1:].values

array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])

Этот метод дает те же результаты, что и предыдущий метод, но работает быстрее на больших массивах.

Обратите внимание, что вы также можете указать любое количество предыдущих периодов времени для использования в расчете скользящей средней. Например, возможно, вы предпочитаете использовать n=5:

#use 5 previous periods to calculate moving average 
n=5

#calculate moving average
pd.Series(x).rolling(window=n).mean().iloc[n-1:].values

array([54.8, 59.8, 69. , 79. , 85.2, 89.2])

Чем больше периодов вы используете для расчета скользящей средней, тем более «сглаженной» будет линия скользящей средней.

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.