Python 時系列分析 1,000本ノック
– ノック21: 時系列データの特定の曜日抽出 –

Python 時系列分析 1,000本ノック– ノック21: 時系列データの特定の曜日抽出 –

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

Python コード:

import pandas as pd

dates = pd.date_range(
    start='2023-01-01', 
    end='2023-01-31', 
    freq='D')

df = pd.DataFrame(
    index=dates, 
    columns=['A'])

week = df[df.index.weekday > 4]

print(week.index)

 

回答の選択肢:

(A) 1月の全日付
(B) 1月の平日の日付
(C) 1月の土日の日付
(D) 1月の金土日の日付

 

出力例:

DatetimeIndex(['2023-01-01', '2023-01-07', '2023-01-08', '2023-01-14',
               '2023-01-15', '2023-01-21', '2023-01-22', '2023-01-28',
               '2023-01-29'],
              dtype='datetime64[ns]', freq=None)

 

正解:

(C)

 

解説:

このコードは、指定した期間の日付範囲でデータフレームを作成し、その中から週末(土曜日と日曜日)の日付だけを抽出しています。

詳しく説明します。

2023年1月の全日付を生成します。ここで、頻度として指定している’D’は「日」を意味します。

dates = pd.date_range(
    start='2023-01-01', 
    end='2023-01-31', 
    freq='D')

 

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

DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04',
               '2023-01-05', '2023-01-06', '2023-01-07', '2023-01-08',
               '2023-01-09', '2023-01-10', '2023-01-11', '2023-01-12',
               '2023-01-13', '2023-01-14', '2023-01-15', '2023-01-16',
               '2023-01-17', '2023-01-18', '2023-01-19', '2023-01-20',
               '2023-01-21', '2023-01-22', '2023-01-23', '2023-01-24',
               '2023-01-25', '2023-01-26', '2023-01-27', '2023-01-28',
               '2023-01-29', '2023-01-30', '2023-01-31'],
              dtype='datetime64[ns]', freq='D')

 

生成した日付をインデックスに持つ、1つの列’A’を持つデータフレームを作成します。

df = pd.DataFrame(
    index=dates, 
    columns=['A'])

 

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

              A
2023-01-01  NaN
2023-01-02  NaN
2023-01-03  NaN
2023-01-04  NaN
2023-01-05  NaN
2023-01-06  NaN
2023-01-07  NaN
2023-01-08  NaN
2023-01-09  NaN
2023-01-10  NaN
2023-01-11  NaN
2023-01-12  NaN
2023-01-13  NaN
2023-01-14  NaN
2023-01-15  NaN
2023-01-16  NaN
2023-01-17  NaN
2023-01-18  NaN
2023-01-19  NaN
2023-01-20  NaN
2023-01-21  NaN
2023-01-22  NaN
2023-01-23  NaN
2023-01-24  NaN
2023-01-25  NaN
2023-01-26  NaN
2023-01-27  NaN
2023-01-28  NaN
2023-01-29  NaN
2023-01-30  NaN
2023-01-31  NaN

 

データフレームのインデックス(日付)から曜日を取得し、それが4より大きい(Pythonでは月曜日が0、日曜日が6なので、これは土曜日と日曜日を表します)場合のみのデータを新たなデータフレーム`week`に格納します。

week = df[df.index.weekday > 4]

 

新たに作成した週末だけのデータを持つデータフレーム`week`のインデックス、つまり週末の日付を表示します。

print(week.index)

 

結果として、2023年1月の週末(土曜日と日曜日)の日付が表示されます。

DatetimeIndex(['2023-01-01', '2023-01-07', '2023-01-08', '2023-01-14',
               '2023-01-15', '2023-01-21', '2023-01-22', '2023-01-28',
               '2023-01-29'],
              dtype='datetime64[ns]', freq=None)

Python 時系列分析 1,000本ノック– ノック22: 時系列データの差分処理 –