Hoe voortschrijdende gemiddelden in python te berekenen
Een voortschrijdend gemiddelde is een techniek die kan worden gebruikt om tijdreeksgegevens glad te strijken om „ruis“ in de gegevens te verminderen en gemakkelijker patronen en trends te identificeren.
Het idee achter een voortschrijdend gemiddelde is om het gemiddelde van een aantal voorgaande perioden te nemen om zo tot een ‘voortschrijdend gemiddelde’ voor een bepaalde periode te komen.
In deze tutorial wordt uitgelegd hoe u voortschrijdende gemiddelden in Python kunt berekenen.
Voorbeeld: voortschrijdende gemiddelden in Python
Stel dat we de volgende tabel hebben die de totale omzet van een bepaald bedrijf over 10 perioden weergeeft:
x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]
Methode 1: Gebruik de cumsum()-functie.
Eén manier om het voortschrijdend gemiddelde te berekenen is door de functie cumsum() te gebruiken:
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])
Zo interpreteert u het resultaat:
- Het voortschrijdend gemiddelde van de derde periode is 47. Het wordt berekend als het gemiddelde van de eerste drie perioden: (50+55+36)/3 = 47 .
- Het voortschrijdend gemiddelde voor de vierde periode bedraagt 46,67. Dit wordt berekend als het gemiddelde van de drie voorgaande perioden: (55+36+49)/3 = 46,67 .
Enzovoort.
Methode 2: Gebruik panda’s.
Een andere manier om het voortschrijdend gemiddelde te berekenen is door een panda-gebaseerde functie te schrijven:
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])
Deze methode levert exact dezelfde resultaten op als de vorige methode, maar werkt doorgaans sneller op grotere arrays.
Houd er rekening mee dat u ook een willekeurig aantal voorgaande perioden kunt opgeven om te gebruiken bij de berekening van het voortschrijdend gemiddelde. U kunt er bijvoorbeeld de voorkeur aan geven n=5 te gebruiken:
#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])
Hoe meer perioden u gebruikt om het voortschrijdend gemiddelde te berekenen, hoe vloeiender de lijn van het voortschrijdend gemiddelde zal zijn.