Pythonで時を操る!Pandas.Period.hour属性で時間帯分析を自由自在に
pandas.Period.hour
は、pandas
ライブラリで時刻情報を扱うための強力な属性です。Period
型のデータフレームにおける各期間の "時間" 情報を整数値として取得できます。データ分析や可視化において、時間帯に特化した分析や、特定の時間のデータを取り出す際に役立ちます。
属性の詳細
- 用途
- 特定の時間のデータを取り出す
- 時間帯ごとのデータ分析
- 時刻情報に基づいたデータの可視化
- データ型
整数型 (int
) - 取得できる情報
指定された期間における "時間" 情報を 0 から 23 の範囲で整数値として返します。
例
import pandas as pd
# データの作成
dates = pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03'])
periods = pd.Period(dates, freq='D') # 日付を Period 型に変換
# 時間情報の取得
print(periods.hour)
出力
0
0
0
Name: 0, dtype: int64
上記のように、pandas.Period.hour
属性を用いることで、各期間の "時間" 情報を簡単に取得できます。
- 時間帯ごとの顧客行動を可視化する
- 曜日と時間帯を組み合わせたデータ分析を行う
- 時間帯ごとの売上推移を分析する
- 特定の時間帯 (例: 午前9時~11時) のデータを取り出す
- データ分析や可視化の目的に合わせて、適切な属性を選択することが重要です。
pandas.Period
型には、hour
属性以外にもyear
,month
,day
,week
,quarter
,weekday
など、様々な時刻情報にアクセスできる属性があります。
import pandas as pd
# データの作成
dates = pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04'])
values = [10, 20, 30, 40]
periods = pd.Period(dates, freq='D')
df = pd.DataFrame({'Date': dates, 'Value': values})
df['Period'] = periods
# 特定の時間帯のデータのみ抽出
morning_data = df[df['Period'].hour.between(9, 11)]
print(morning_data)
出力
Date Value Period
2 2024-01-02 20 2024-01-02
3 2024-01-03 30 2024-01-03
この例では、pandas.Period.hour
属性と集計処理を用いて、時間帯ごとの売上推移を分析します。
import pandas as pd
# データの作成
dates = pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04'])
values = [10, 20, 30, 40, 50, 60]
periods = pd.Period(dates, freq='D')
df = pd.DataFrame({'Date': dates, 'Value': values})
df['Period'] = periods
# 時間帯ごとの売上集計
hourly_sales = df.groupby('Period')['Value'].sum().reset_index()
print(hourly_sales)
出力
Period Value
0 2024-01-01 10
1 2024-01-02 50
2 2024-01-03 30
3 2024-01-04 60
この例では、pandas.Period.hour
属性と weekday
属性を組み合わせることで、曜日と時間帯ごとのデータ分析を行います。
import pandas as pd
# データの作成
dates = pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05', '2024-01-06'])
values = [10, 20, 30, 40, 50, 60]
periods = pd.Period(dates, freq='D')
df = pd.DataFrame({'Date': dates, 'Value': values})
df['Period'] = periods
df['Weekday'] = df['Period'].weekday
# 曜日と時間帯ごとの売上集計
weekday_hourly_sales = df.groupby(['Weekday', 'Period.hour'])['Value'].sum().unstack()
print(weekday_hourly_sales)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Weekday
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN
そこで、ここでは pandas.Period.hour
の代替方法として、以下の3つの方法をご紹介します。
dt.hour 属性を使用する
pandas.Period
型データフレームは、dt
属性を持つ pandas.Index
オブジェクトとして内部的に表現されます。この dt
属性には、hour
属性を含む様々な時刻情報属性が用意されています。
import pandas as pd
# データの作成
dates = pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03'])
periods = pd.Period(dates, freq='D')
df = pd.DataFrame({'Date': dates, 'Value': [10, 20, 30]})
df['Period'] = periods
# dt.hour 属性で時間情報取得
print(df['Period'].dt.hour)
出力
0 0
1 0
2 0
Name: Period, dtype: int64
strftime() 関数を使用する
strftime()
関数は、datetime
型オブジェクトに対して書式指定された文字列を生成する関数です。Period
型データフレームは datetime
型オブジェクトに変換できるので、strftime()
関数を使って "時間" 情報を含む文字列を取得できます。
import pandas as pd
# データの作成
dates = pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03'])
periods = pd.Period(dates, freq='D')
df = pd.DataFrame({'Date': dates, 'Value': [10, 20, 30]})
df['Period'] = periods
# strftime() 関数で時間情報取得
print(df['Period'].dt.strftime('%H'))
出力
0 00
1 00
2 00
Name: Period, dtype: object
lambda 関数を使用する
lambda
関数を使って、Period
型オブジェクトから "時間" 情報を抽出する匿名関数を作成することもできます。
import pandas as pd
# データの作成
dates = pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03'])
periods = pd.Period(dates, freq='D')
df = pd.DataFrame({'Date': dates, 'Value': [10, 20, 30]})
df['Period'] = periods
# lambda 関数で時間情報取得
print(df['Period'].apply(lambda x: x.hour))
出力
0 0
1 0
2 0
Name: Period, dtype: int64
方法 | 利点 | 欠点 |
---|---|---|
dt.hour 属性 | シンプルで分かりやすい | Period 型データフレームに dt 属性が追加される |
strftime() 関数 | 書式を自由に設定できる | 文字列処理が必要 |
lambda 関数 | 柔軟性が高い | コードが冗長になる可能性がある |