交換時系列に移動平均計算を追加したいと思います。
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
同じインデックス(日付)を使用して、計算された移動平均を「値」の直後に新しい列として追加したいと思います。計算された移動平均の名前を「MA」に変更することもできます
ローリング平均はSeries
を返します。以下で説明するように、DataFrame
(MA
)の新しい列として追加するだけです。
詳細については、pandas新しいバージョンでrolling_mean
関数が非推奨になりました。私の例では新しいメソッドを使用しました。以下のpandasからの引用を参照してください documentation
警告バージョン0.18.0より前では、
pd.rolling_*
、pd.expanding_*
、およびpd.ewm*
はモジュールレベルの関数であり、廃止されました。これらは、Rolling
、Expanding
、およびEWM.
オブジェクトと、対応するメソッド呼び出しを使用して置き換えられます。
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
複数の移動平均を計算する場合:
for i in range(2,10):
df['MA{}'.format(i)] = df.rolling(window=i).mean()
次に、すべてのMAの集計平均を行うことができます
df[[f for f in list(df) if "MA" in f]].mean(axis=1)
次のコードを使用して、移動平均を計算し、折れ線グラフで直接視覚化することもできます。
株価データを使用した例:
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()
これを行う方法に関するチュートリアル: https://youtu.be/XWAPpyF62Vg