Python で時系列データをリサンプリングする方法 (例付き)
時系列データのリサンプリングとは、新しい期間のデータを要約または集計することを意味します。
次の基本構文を使用して、Python で時系列データをリサンプリングできます。
#find sum of values in column1 by month weekly_df[' column1 '] = df[' column1 ']. resample (' M '). sum () #find mean of values in column1 by week weekly_df[' column1 '] = df[' column1 ']. resample (' W '). mean ()
時系列データを次のような異なる期間にリサンプリングできることに注意してください。
- S : 秒
- min : 分
- H : 時間
- J :日
- W : 週
- M :月
- Q : 四半期
- A : 年
次の例は、実際に時系列データをリサンプリングする方法を示しています。
例: Python で時系列データをリサンプリングする
1 年間にわたる企業の 1 時間ごとの総売上高を示す次のパンダ データフレームがあるとします。
import pandas as pd import numpy as np #make this example reproducible n.p. random . seeds (0) #create DataFrame with hourly index df = pd. DataFrame (index= pd.date_range (' 2020-01-06 ', ' 2020-12-27 ', freq=' h ')) #add column to show sales by hour df[' sales '] = np. random . randint (low=0, high=20, size= len (df. index )) #view first five rows of DataFrame df. head () dirty 2020-01-06 00:00:00 12 2020-01-06 01:00:00 15 2020-01-06 02:00:00 0 2020-01-06 03:00:00 3 2020-01-06 04:00:00 3
販売データを視覚化するために折れ線グラフを作成すると、次のようになります。
import matplotlib. pyplot as plt
#plot time series data
plt. plot (df. index , df. sales , linewidth= 3 )
このグラフは解釈が難しいため、週ごとの売上データを要約することができます。
#create new DataFrame
weekly_df = pd. DataFrame ()
#create 'sales' column that summarizes total sales by week
weekly_df[' sales '] = df[' sales ']. resample (' W '). sum ()
#view first five rows of DataFrame
weekly_df. head ()
dirty
2020-01-12 1519
2020-01-19 1589
2020-01-26 1540
2020-02-02 1562
2020-02-09 1614
この新しいデータフレームは、週ごとの売上の合計を示します。
次に、この週次データを使用して時系列プロットを作成できます。
import matplotlib. pyplot as plt
#plot weekly sales data
plt. plot ( weekly_df.index , weekly_df.sales , linewidth= 3 )
最初の例の 8,545 時間ごとの売上データとは対照的に、51 週ごとの売上データのみを表しているため、このグラフは非常に読みやすくなっています。
注: この例では、販売データを週ごとに要約しましたが、プロットするデータ ポイントの数をさらに少なくしたい場合は、月または四半期ごとに要約することもできます。
追加リソース
次のチュートリアルでは、Python で他の一般的な操作を実行する方法について説明します。
Matplotlib で時系列をプロットする方法
Seaborn で時系列をプロットする方法
Python で時系列から MAPE を計算する方法