前提・実現したいこと
Pythonにて、構造化データ(csv)のデータ処理・分析を行っています。
(データ量が数十万行~レベルのため、Excelでの処理は難しく、Pythonにて処理しています。)
基本的には、pandas、numpyを用いたデータ処理、分析で進めています。
今回は、データ処理として、ノイズ平滑化のために、移動平均を取りたいと考えています。
発生している課題
下記のように、ID列を持ったデータの、Score列の移動平均を取りたいと考えています。
Score列に対し、一律に移動平均を出す方法は調べてわかったのですが、
ID列が途中で切り替わった場合=移動平均のくくりが変わる場合
にどのように処理していいかはわかっていません。
使用するデータ
使用データはcsvとして保存しています。
ID列はstr、Score列はintでデータを持っています。
ID | Score | moving_average |
---|---|---|
A | 1 | |
A | 1 | |
A | 2 | |
A | 3 | |
A | 4 | |
A | 5 | |
A | 6 | |
A | 5 | |
A | 1 | |
A | 1 | |
B | 1 | |
B | 2 | |
B | 5 | |
B | 1 | |
C | 1 | |
C | 1 | |
D | 1 | |
D | 8 | |
D | 7 | |
… | … | … |
処理後のデータイメージ
ID | Score | moving_average |
---|---|---|
A | 1 | |
A | 1 | |
A | 2 | 1.33 |
A | 3 | 2 |
A | 4 | 3 |
A | 5 | 4 |
A | 6 | 5 |
A | 5 | 5.33 |
A | 1 | 4 |
A | 1 | 2.33 |
B | 1 | |
B | 2 | |
B | 5 | 2.67 |
B | 1 | 2.67 |
C | 1 | |
C | 1 | |
D | 1 | |
D | 8 | |
D | 7 | 5.33 |
… | … | … |
該当のソースコード・試したこと
ひとまず、IDを無視した移動平均は以下の通り出来ています。
Python
1import numpy as np 2import pandas as pd 3 4df = pd.read_csv("20190404_testdata_movingaverage.csv", header=0) 5 6df["moving_average"] = df["Score"].rolling(window=3).mean() 7 8df.to_csv("20190404_testdata_movingaverage_Processed.csv")
ID | Score | moving_average |
---|---|---|
A | 1 | |
A | 1 | |
A | 2 | 1.33 |
A | 3 | 2 |
A | 4 | 3 |
A | 5 | 4 |
A | 6 | 5 |
A | 5 | 5.33 |
A | 1 | 4 |
A | 1 | 2.33 |
B | 1 | 1 |
B | 2 | 1.33 |
B | 5 | 2.67 |
B | 1 | 2.67 |
C | 1 | 2.33 |
C | 1 | 1 |
D | 1 | 1 |
D | 8 | 3.33 |
D | 7 | 5.33 |
… | … | … |
ここから、IDが切り替わった場合に処理を分けたいと考えています。
補足情報(FW/ツールのバージョンなど)
他のデータ平滑化方法がいいのでは?
そもそももっと情報を・・・
等ありましたら、コメントお願い致します。
回答3件
あなたの回答
tips
プレビュー