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

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

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

Python コード:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import pandas as pd
dates = pd.date_range(
'2023-01-01',
periods=10,
freq='D')
df = pd.DataFrame(
{'A': range(10)},
index=dates)
wednesdays = df[
df.index.weekday == 2]
print(wednesdays)
import pandas as pd dates = pd.date_range( '2023-01-01', periods=10, freq='D') df = pd.DataFrame( {'A': range(10)}, index=dates) wednesdays = df[ df.index.weekday == 2] print(wednesdays)
import pandas as pd

dates = pd.date_range(
    '2023-01-01', 
    periods=10, 
    freq='D')
df = pd.DataFrame(
    {'A': range(10)}, 
    index=dates)
wednesdays = df[
    df.index.weekday == 2]

print(wednesdays)

 

回答の選択肢:

(A) すべての水曜日のデータ
(B) すべての月曜日のデータ
(C) すべての日曜日のデータ
(D) データフレームには何も表示されない

 

出力例:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
A
2023-01-04 3
A 2023-01-04 3
            A
2023-01-04  3

 

正解:

(A)

 

解説:

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

詳しく説明します。

‘2023-01-01’から始まる日単位の日付範囲を10期間生成します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
dates = pd.date_range(
'2023-01-01',
periods=10,
freq='D')
dates = pd.date_range( '2023-01-01', periods=10, freq='D')
dates = pd.date_range(
    '2023-01-01', 
    periods=10, 
    freq='D')

 

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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'],
dtype='datetime64[ns]', freq='D')
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'], dtype='datetime64[ns]', freq='D')
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'],
              dtype='datetime64[ns]', freq='D')

 

生成した日付をインデックスに持つデータフレームを作成します。データフレームの列’A’には0~9までの範囲の整数が格納されています。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
df = pd.DataFrame(
{'A': range(10)},
index=dates)
df = pd.DataFrame( {'A': range(10)}, index=dates)
df = pd.DataFrame(
    {'A': range(10)}, 
    index=dates)

 

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
A
2023-01-01 0
2023-01-02 1
2023-01-03 2
2023-01-04 3
2023-01-05 4
2023-01-06 5
2023-01-07 6
2023-01-08 7
2023-01-09 8
2023-01-10 9
A 2023-01-01 0 2023-01-02 1 2023-01-03 2 2023-01-04 3 2023-01-05 4 2023-01-06 5 2023-01-07 6 2023-01-08 7 2023-01-09 8 2023-01-10 9
            A
2023-01-01  0
2023-01-02  1
2023-01-03  2
2023-01-04  3
2023-01-05  4
2023-01-06  5
2023-01-07  6
2023-01-08  7
2023-01-09  8
2023-01-10  9

 

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
wednesdays = df[
df.index.weekday == 2]
wednesdays = df[ df.index.weekday == 2]
wednesdays = df[
    df.index.weekday == 2]

 

抽出した水曜日のデータを持つデータフレーム`wednesdays`を表示します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print(wednesdays)
print(wednesdays)
print(wednesdays)

結果として、’2023-01-01’から始まる10日間のうちの水曜日の日付とその’A’列の値が表示されます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
A
2023-01-04 3
A 2023-01-04 3
            A
2023-01-04  3