Blanktar

  1. top
  2. blog
  3. 2015
  4. 12

pythonのpandasで移動平均を出したい

最近pandasを触っております。 pandasで何をしているのかというと、FXの価格データをこねくり回しております。統計楽しいね。

で、pandasで移動平均を出します。今回出すのはとりあえず単純移動平均(SMA)と、指数移動平均(EMA)の二つ。

単純移動平均を出すにはpandas.rolling_meanを使って、以下のようにします。

>>> import numpy
>>> import pandas

>>> data = numpy.array(range(10))

>>> pandas.rolling_mean(data, 2)
array([ nan,  0.5,  1.5,  2.5,  3.5,  4.5,  5.5,  6.5,  7.5,  8.5])

>>> pandas.rolling_mean(data, 3)
array([ nan,  nan,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.])

こんな感じ。シンプル。

nanになって欲しくないときは、以下のようにして最小の範囲を指定すればおっけーです。

>>> pandas.rolling_mean(data, 2, 1)
array([ 0.,  0.5,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.])

次は指数移動平均。といってもあまり変わりません。

>>> data = numpy.array(range(10))

>>> pandas.ewma(data, span=2)
array([ 0.        ,  0.75      ,  1.61538462,  2.55      ,  3.52066116,
        4.50824176,  5.5032022 ,  6.50121951,  7.50045727,  8.50016935])

>>> pandas.ewma(data, span=3)
array([ 0.        ,  0.66666667,  1.42857143,  2.26666667,  3.16129032,
        4.0952381 ,  5.05511811,  6.03137255,  7.01761252,  8.00977517])

こっちもシンプル。

どっちの関数も引数にnumpy.arrayを渡せばnumpy.arrayで返って来て、pandas.Seriesならpandas.Series、pandas.DataFrameならpandas.DataFrameで返って来ます。 tupleやlistだとエラーになります。注意。