見出し画像

未計量のデータを埋めます

体重計のデータ、statsmodels で ARを使って予測する時に事前のデータ加工が鍵になりそうです。
そこで、体重計のデータを例にして整理する方法を勉強します。

毎日体重計で計量するのは良いのですが、人間ですから計量することを忘れます。
これは計量データが未計測になります。

1日毎にデータが必要なのに未計測、前後の計測値から値を合成する必要があります。
interpolateで、時系列データ専用の補完命令interpolate('time')があります。

体重の計測データを以下で作りました。
2020-5-1 8:0:0,60.1
2020-5-3 8:0:0,60.0
2020-5-3 20:0:0,61.0
2020-5-4 8:0:0,59.2
2020-5-6 8:0:0,60.5
2020-5-7 8:0:0,60.7
2020-5-7 8:5:0,60.8

2020-5-2と2020-5-5のデータがありません。
人間が測定するのだから、1日で1回確実に計測するとは限りません。

休日に体重測定を忘れることもあるし、旅行に行けば計測できません。
最近の体重計なら、バッテリーが切れて計測できない場合もあるでしょう。

2020-5-3と2020-5-7のデータが重複しています。
これは前回のデータを流用しているからです。

読み込んだ時系列データがどうなるか、resampleとinterpolateの前後で変化を見ます。

resample後は以下のデータです。
2020-05-01 60.10
2020-05-02 NaN
2020-05-03 60.50
2020-05-04 59.20
2020-05-05 NaN
2020-05-06 60.50
2020-05-07 60.75

未計量の部分、日付のindexが作られましたが、体重のデータがNaN(欠損値)になっています。
これでは綺麗なデータとは言えませんね。

interpolate後は以下のデータです。
2020-05-01 60.10
2020-05-02 60.30
2020-05-03 60.50
2020-05-04 59.20
2020-05-05 59.85
2020-05-06 60.50
2020-05-07 60.75

2020-05-02と2020-05-05のNaNが無くなり、前後のデータから値が平均値で作られています。
resampleとinterpolateの順番も大事で、逆にするとNaNが出来る綺麗でないデータになります。


ソースコードは以下になります。


#pandasを使う宣言
import pandas as pd

#CSVの読み込み 、日付型では読み込めないので、一旦object型で読み込む
df = pd.read_csv('abc.csv',names=('ds', 'y'), dtype = {'ds':'object', 'y':'float'})


#時系列分析のための構造体を作成する
#最初に数値をfloat型で格納
my_df=pd.Series(df['y'], dtype='float')

#基準となるindexを日時型のdsを変換して格納
my_df.index=pd.to_datetime(df['ds'])

#先頭10個表示
print(my_df.head(10))

#重複データの削除 、日付が欠損している場合の穴埋めだがデータは埋めない。
my_df=my_df.resample('D').mean()

#先頭10個表示
print(my_df.head(10))

#欠損データがあるので 、前後の時間差から、欠損データを合成して穴埋め
my_df=my_df.interpolate('time')

#先頭10個表示
print(my_df.head(10))

#学習 #勉強 #Python #プログラミング



この記事が気に入ったらサポートをしてみませんか?