Python pandas 時系列補間と正規化 質問する

Python pandas 時系列補間と正規化 質問する

初めて Python Pandas を使用しています。5 分遅れのトラフィック データが csv 形式で保存されています。

...
2015-01-04 08:29:05,271238
2015-01-04 08:34:05,329285
2015-01-04 08:39:05,-1
2015-01-04 08:44:05,260260
2015-01-04 08:49:05,263711
...

いくつかの問題があります:

  • 一部のタイムスタンプにデータが欠落しています (-1)
  • 欠落したエントリ(連続2/3時間も)
  • 観測の頻度は正確に5分ではなく、実際には時々数秒遅れる。

定期的な時系列、つまり (正確に) 5 分ごとにエントリがある (欠損値がない) ものを取得したいと思います。次のコードを使用して時系列を補間し、-1 値を近似することに成功しました。

ts = pd.TimeSeries(values, index=timestamps)
ts.interpolate(method='cubic', downcast='infer')

観測の頻度を補間して正規化するにはどうすればよいでしょうか? ご協力ありがとうございました。

ベストアンサー1

s を NaN に変更します-1

ts[ts==-1] = np.nan

次に、5 分間隔でデータを再サンプリングします。

ts = ts.resample('5T')

デフォルトでは、2 つの測定値が同じ 5 分間に収まる場合、それらresampleの値が平均化されることに注意してください。

最後に、時間に応じて時系列を線形補間することができます。

ts = ts.interpolate(method='time')

データがすでに約 5 分間隔で設定されているように見えるため、3 次補間またはスプライン補間によって曲線を滑らかにするために、より短い間隔で再サンプリングする必要がある可能性があります。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

values = [271238, 329285, -1, 260260, 263711]
timestamps = pd.to_datetime(['2015-01-04 08:29:05',
                             '2015-01-04 08:34:05',
                             '2015-01-04 08:39:05',
                             '2015-01-04 08:44:05',
                             '2015-01-04 08:49:05'])

ts = pd.Series(values, index=timestamps)
ts[ts==-1] = np.nan
ts = ts.resample('T').mean()

ts.interpolate(method='spline', order=3).plot()
ts.interpolate(method='time').plot()
lines, labels = plt.gca().get_legend_handles_labels()
labels = ['spline', 'time']
plt.legend(lines, labels, loc='best')
plt.show()

ここに画像の説明を入力してください

おすすめ記事