Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでデータフレームの調整済み・未調整EWM(指数加重移動平均)を計算する方法

pandasでは、ewm()メソッドを使うことで、欠損値(NaN)を含むデータフレームに対しても指数加重移動平均(EWM:Exponentially Weighted Mean)を簡単に計算できます。この記事では、調整済み(adjust=True)と未調整(adjust=False)の2種類のEWMを計算する方法を解説します。

期待される出力

あるデータフレームに対して、調整済みと未調整それぞれのEWMを計算すると、結果は以下のようになります。

adjusted ewm:
      Id        Age
0 1.000000 12.000000
1 1.750000 12.750000
2 2.615385 12.230769
3 2.615385 13.425000
4 4.670213 14.479339
non adjusted ewm:
      Id        Age
0 1.000000 12.000000
1 1.666667 12.666667
2 2.555556 12.222222
3 2.555556 13.407407
4 4.650794 14.469136

解決手順

以下の手順に従って問題を解決していきます。

  • まず、対象となるデータフレームを定義します。
  • 減衰係数(com)を0.5として、df.ewm(com=0.5).mean()を使って調整済みEWMを計算します。
df.ewm(com=0.5).mean()
  • 同様に、adjust=Falseを指定したdf.ewm(com=0.5, adjust=False).mean()を使って未調整EWMを計算します。
df.ewm(com=0.5, adjust=False).mean()

補足:adjustパラメータの違い

adjust=True(デフォルト)は重みを初期時点まで遡って正規化して計算する方式で、adjust=Falseは再帰的な式で逐次計算する方式です。どちらも欠損値は自動的にスキップされ、直前の有効な値から計算が続行されます。

サンプルコード

import numpy as np
import pandas as pd

df = pd.DataFrame({'Id': [1, 2, 3, np.nan, 5],
                   'Age': [12, 13, 12, 14, 15]})
print(df)
print("adjusted ewm:\n", df.ewm(com=0.5).mean())
print("non adjusted ewm:\n", df.ewm(com=0.5, adjust=False).mean())

実行結果

Id   Age
0  1.0   12
1  2.0   13
2  3.0   12
3  NaN   14
4  5.0   15
adjusted ewm:
      Id        Age
0 1.000000 12.000000
1 1.750000 12.750000
2 2.615385 12.230769
3 2.615385 13.425000
4 4.670213 14.479339
non adjusted ewm:
      Id        Age
0 1.000000 12.000000
1 1.666667 12.666667
2 2.555556 12.222222
3 2.555556 13.407407
4 4.650794 14.469136

このように、ewm()メソッドのadjust引数を切り替えるだけで、2つの異なる計算方式の指数加重移動平均を柔軟に取得できます。時系列データの平滑化やトレンド分析などにぜひ活用してください。

  1. PythonでPandas Seriesのすべての要素を四捨五入する方法

    PandasのSeriesに含まれる浮動小数点数を四捨五入したい場面はよくあります。本記事では、Seriesのすべての要素を丸めるための2つの方法を、具体的なコード例とともに解説します。入力データと期待される出力まず、以下のようなSeriesが与えられていると仮定します。0 1.3 1 2.6 2 3.9 3 4.8 4 5.6これらの値を四捨五入すると、次の出力が得られます。0 1.0 1 3.0 2 4.0 3 5.0 4 6.0方法1:round()メソッドを使うPandasのSeriesには、数値を丸めるためのround()メ

  2. Pythonで数Nの桁数を数えるプログラムの書き方

    ある数Nが与えられたとき、その数に含まれる桁の総数を求めることを考えましょう。例えば以下のようなケースです。入力例1:N = 891452出力:6解説: 与えられた数891452は6桁の数字で構成されているため、この場合は「6」を返します。入力例2:N = 0074515出力:5解説: 先頭の0を除いた有効な桁数が5桁であるため、出力は「5」となります。この問題を解くためのアプローチこの問題は、次の手順で解決できます。数値nを入力として受け取ります。関数countDigits(n)が入力nを受け取り、桁数をカウントして返します。数値の各桁に対してループ処理を行い、カウンター変数を1ずつ増加させ