2
1

More than 3 years have passed since last update.

【初心者向け】panadasで移動平均の算出のメモ

Posted at

rolling関数使用の事例

データの分析や予測にあたって、グラフの作成等で移動平均が必要な場面は多いと思います。
sqlでもwindow関数を使用すれば、同様の事は可能だと思いますが、pandasのほうが簡単に実現出来る様に思います。

pandasのrolling関数を利用して、移動平均を算出する場合のメモを投稿します。

以下の様なcsvがあったとすると。
・ターミナルからheadコマンドの結果

csvファイルの一部

$ head dexjpus_20200417.csv 
DATE,DEXJPUS
2015-01-01,
2015-01-02,120.2
2015-01-05,119.64
2015-01-06,118.26
2015-01-07,119.52
2015-01-08,119.51
2015-01-09,118.66
2015-01-12,118.32
2015-01-13,118.16

【1】移動平均の場合、rolling関数は、以下の様に実行しました。
- 1.ローリング関数のmeanで移動平均の処理
- 2.欠損値の処理(この例では、fillnaのbfillを適用)

移動平均算出・欠損値処理

#rolling関数の使用
df = df.rolling('30D' ,min_periods = 1).mean()

#欠損値の処理
df = df.fillna(method ='bfill' )

30日の移動平均の場合
・頻度コード(D)を使用して、'30D'で指定しました

このデータは、最初から空白の値があったのですが、欠損値が無い元データであっても、移動平均を適用すると、nullが発生する為、欠損値の処理をfillna、若しくはdropnaでnullを処理する事になると思います。
・この例では、fillnaでmethodにbfillを適用し、初日の値に翌日の値を適用

df.isnull()
df.isnull()

    DEXJPUS
DATE    
2015-01-01  True
2015-01-02  False
2015-01-05  False
2015-01-06  False
2015-01-07  False

欠損値の処理

fillna

#欠損値の処理
df = df.fillna(method ='bfill' )

df.isnull().sum()

DEXJPUS    0
dtype: int64

【2】データの確認

修正されたデータフレームの一部

df

    DEXJPUS
DATE    
2015-01-01  120.200000
2015-01-02  120.200000
2015-01-05  119.920000
2015-01-06  119.366667
2015-01-07  119.405000

初日のデータが翌日のデータと同じになっているのが確認できる。

データ・セットは、datareaderで取得したfredの為替相場(DEXJPUS)を、csv_readで再利用しました。因みに、以前は取引がない日は、DEXJPUSの値はドット(.)になっていたと思いますが、現在はnullになっている様です。


実行したpythonのコードをまとめると、以下の様な感じです。

# 移動平均の処理の例
# infile = './dexjp_20200417.csv'(fred 対$USの円相場)
import pandas as pd
import numpy as np
import datetime

# csv読み込み
df = pd.read_csv('./dexjpus_20200417.csv' ,index_col=0 ,parse_dates=['DATE'])

# 移動平均の算出(roling関数のmeanを適用)
# 期間は30日で設定の場合(時系列データの場合、頻度コードでも指定できる)
df = df.rolling('30D' ,min_periods = 1).mean()
#欠損値の処理
df = df.fillna(method ='bfill' )
df.isnull().sum()
df

以上、初心者向けpandasで移動平均の算出でした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1