J'aimerais ajouter un calcul de moyenne mobile à ma série chronologique d'échanges.
Données originales de Quandl
Exchange = Quandl.get ("BUNDESBANK/BBEX3_D_SEK_USD_CA_AC_000", authtoken = "xxxxxxx")
Value
Date
1989-01-02 6.10500
1989-01-03 6.07500
1989-01-04 6.10750
1989-01-05 6.15250
1989-01-09 6.25500
1989-01-10 6.24250
1989-01-11 6.26250
1989-01-12 6.23250
1989-01-13 6.27750
1989-01-16 6.31250
MovingAverage = pd.rolling_mean (Exchange, 5)
Value
Date
1989-01-02 NaN
1989-01-03 NaN
1989-01-04 NaN
1989-01-05 NaN
1989-01-09 6.13900
1989-01-10 6.16650
1989-01-11 6.20400
1989-01-12 6.22900
1989-01-13 6.25400
1989-01-16 6.26550
Je voudrais ajouter la moyenne mobile calculée en tant que nouvelle colonne à droite après "Valeur" en utilisant le même index (Date). De préférence, j'aimerais également renommer la moyenne mobile calculée en "MA".
La moyenne glissante renvoie un Series
, il vous suffit de l'ajouter comme nouvelle colonne de votre DataFrame
(MA
) comme décrit ci-dessous.
Pour information, le rolling_mean
La fonction est obsolète dans pandas versions plus récentes. J'ai utilisé la nouvelle méthode dans mon exemple, voir ci-dessous une citation de pandas documentation
Avertissement Avant la version 0.18.0,
pd.rolling_*
,pd.expanding_*
, etpd.ewm*
étaient des fonctions de niveau module et sont maintenant obsolètes. Ceux-ci sont remplacés en utilisantRolling
,Expanding
etEWM.
objets et un appel de méthode correspondant.
df['MA'] = df.rolling(window=5).mean()
print(df)
# Value MA
# Date
# 1989-01-02 6.11 NaN
# 1989-01-03 6.08 NaN
# 1989-01-04 6.11 NaN
# 1989-01-05 6.15 NaN
# 1989-01-09 6.25 6.14
# 1989-01-10 6.24 6.17
# 1989-01-11 6.26 6.20
# 1989-01-12 6.23 6.23
# 1989-01-13 6.28 6.25
# 1989-01-16 6.31 6.27
Si vous calculez plus d'une moyenne mobile:
for i in range(2,10):
df['MA{}'.format(i)] = df.rolling(window=i).mean()
Ensuite, vous pouvez faire une moyenne globale de tous les MA
df[[f for f in list(df) if "MA" in f]].mean(axis=1)
Une moyenne mobile peut également être calculée et visualisée directement dans un graphique à courbes à l'aide du code suivant:
Exemple utilisant des données de cours boursier:
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import datetime
plt.style.use('ggplot')
# Input variables
start = datetime.datetime(2016, 1, 01)
end = datetime.datetime(2018, 3, 29)
stock = 'WFC'
# Extrating data
df = web.DataReader(stock,'morningstar', start, end)
df = df['Close']
print df
plt.plot(df['WFC'],label= 'Close')
plt.plot(df['WFC'].rolling(9).mean(),label= 'MA 9 days')
plt.plot(df['WFC'].rolling(21).mean(),label= 'MA 21 days')
plt.legend(loc='best')
plt.title('Wells Fargo\nClose and Moving Averages')
plt.show()
Tutoriel sur la façon de procéder: https://youtu.be/XWAPpyF62Vg