Python 時系列分析 1,000本ノック
– ノック15: 時系列データのリサンプリング –

Python 時系列分析 1,000本ノック– ノック15: 時系列データのリサンプリング –

次の Python コードの出力はどれでしょうか?

Python コード:

import pandas as pd
import numpy as np

np.random.seed(5)
dates = pd.date_range(
    '2023-01-01', 
    periods=6, 
    freq='D')

df = pd.DataFrame(
    np.random.randn(6, 1), 
    index=dates, 
    columns=['A'])

print(df.resample('3D').sum())

 

回答の選択肢:

(A) 3日ごとの合計値
(B) 各日のランダムな値
(C) 週ごとの合計値
(D) 月ごとの合計値

 

出力例:

                   A
2023-01-01  2.541129
2023-01-04  1.439999

 

正解:

(A)

 

解説:

このコードは、ランダムな値を含む時系列データフレームを作成し、そのデータを3日ごとにリサンプリングしています。リサンプリングの際には、各3日間の合計値が計算されます。

詳しく説明します。

まず、’2023-01-01’から始まる日ごとの日付範囲を6期間作成します。

dates = pd.date_range(
    '2023-01-01', 
    periods=6, 
    freq='D')

 

datesに格納されているデータは次のようになっています。

DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04',
               '2023-01-05', '2023-01-06'],
              dtype='datetime64[ns]', freq='D')

 

次に、この日付範囲をインデックスとして、6行1列のランダムな値を含むデータフレームを作成します。このデータフレームの列名は ‘A’ となっています。

df = pd.DataFrame(
    np.random.randn(6, 1), 
    index=dates, 
    columns=['A'])

 

例えば、dfに格納されているデータは次のようになっています。ランダムな値を入れているため、人によって値は異なります。

                   A
2023-01-01  0.441227
2023-01-02 -0.330870
2023-01-03  2.430771
2023-01-04 -0.252092
2023-01-05  0.109610
2023-01-06  1.582481

 

最後に、データフレームの`resample`メソッドを使って、3日ごとにデータをリサンプリングします。

print(df.resample('3D').sum())

 

この場合、リサンプリングの操作は合計値の計算(`sum()`)です。つまり、各3日間のデータの合計が新しいデータフレームの値となります。

                   A
2023-01-01  2.541129
2023-01-04  1.439999

Python 時系列分析 1,000本ノック– ノック16: 時系列データのシフト –