BusinessHour.is_on_offset を使って効率的にビジネス時間処理

2024-04-02

Pandas Data Offsets と BusinessHour.is_on_offset

BusinessHour.is_on_offset は、Data Offsets の中でも、ビジネス時間 に関する判定を行う関数です。この関数は、指定された日時が、ビジネス時間かどうかを判断します。

BusinessHour.is_on_offset(dt)

  • dt: 日時を表すオブジェクト

戻り値

  • True: dt がビジネス時間の場合
  • False: dt がビジネス時間ではない場合

from pandas.tseries.offsets import BusinessHour

# 2024年3月30日 9時00分がビジネス時間かどうか判定
dt = pd.Timestamp('2024-03-30 09:00')
is_on_offset = BusinessHour.is_on_offset(dt)

# True と表示される
print(is_on_offset)

# 2024年3月30日 23時00分がビジネス時間かどうか判定
dt = pd.Timestamp('2024-03-30 23:00')
is_on_offset = BusinessHour.is_on_offset(dt)

# False と表示される
print(is_on_offset)
  • デフォルトのビジネス時間

    • 月曜日から金曜日までの 9時から17時まで
    • 祝日を除く
  • 引数

    • start: ビジネス時間の開始時刻 (デフォルト: 9時)
    • end: ビジネス時間の終了時刻 (デフォルト: 17時)
    • weekmask: 曜日を表すビットマスク (デフォルト: 月曜日から金曜日まで)
    • holidays: 祝日のリスト
  • カスタマイズ

    • 引数を使用して、デフォルトのビジネス時間のカスタマイズが可能

BusinessHour.is_on_offset は、Pandas Data Offsets で提供される便利な関数です。この関数を活用することで、ビジネス時間に関する処理を効率的に行うことができます。



BusinessHour.is_on_offset のサンプルコード

祝日を設定

from pandas.tseries.offsets import BusinessHour

# 祝日を設定
holidays = ['2024-03-21', '2024-05-03']

# 2024年3月21日がビジネス時間かどうか判定
dt = pd.Timestamp('2024-03-21 09:00')
is_on_offset = BusinessHour(holidays=holidays).is_on_offset(dt)

# False と表示される
print(is_on_offset)

週末を設定

from pandas.tseries.offsets import BusinessHour

# 週末を設定
weekmask = 'Mon Tue Wed Thu Fri'

# 2024年3月31日 (土曜日) がビジネス時間かどうか判定
dt = pd.Timestamp('2024-03-31 09:00')
is_on_offset = BusinessHour(weekmask=weekmask).is_on_offset(dt)

# False と表示される
print(is_on_offset)

時間帯を設定

from pandas.tseries.offsets import BusinessHour

# 時間帯を設定
start = '10:00'
end = '18:00'

# 2024年3月30日 9時30分がビジネス時間かどうか判定
dt = pd.Timestamp('2024-03-30 09:30')
is_on_offset = BusinessHour(start=start, end=end).is_on_offset(dt)

# False と表示される
print(is_on_offset)

# 2024年3月30日 17時30分がビジネス時間かどうか判定
dt = pd.Timestamp('2024-03-30 17:30')
is_on_offset = BusinessHour(start=start, end=end).is_on_offset(dt)

# False と表示される
print(is_on_offset)

連続する期間判定

from pandas.tseries.offsets import BusinessHour

# 期間を設定
start_dt = pd.Timestamp('2024-03-28 09:00')
end_dt = pd.Timestamp('2024-03-30 17:00')

# 期間内のすべてのビジネス時間のリストを取得
business_hours = []
for dt in pd.date_range(start_dt, end_dt):
    if BusinessHour().is_on_offset(dt):
        business_hours.append(dt)

# 期間内のビジネス時間の数を表示
print(len(business_hours))

特定の曜日のみ判定

from pandas.tseries.offsets import BusinessHour

# 特定の曜日を設定
weekday = 'Wed'

# 2024年3月27日 (水曜日) がビジネス時間かどうか判定
dt = pd.Timestamp('2024-03-27 09:00')
is_on_offset = BusinessHour(weekmask=weekday).is_on_offset(dt)

# True と表示される
print(is_on_offset)


BusinessHour.is_on_offset 以外の方法

自作関数

def is_business_hour(dt, start=9, end=17, weekmask='Mon Tue Wed Thu Fri'):
    """
    指定された日時がビジネス時間かどうかを判定する関数

    Args:
        dt: 日時を表すオブジェクト
        start: ビジネス時間の開始時刻 (デフォルト: 9時)
        end: ビジネス時間の終了時刻 (デフォルト: 17時)
        weekmask: 曜日を表すビットマスク (デフォルト: 月曜日から金曜日まで)

    Returns:
        True: dt がビジネス時間の場合
        False: dt がビジネス時間ではない場合
    """

    weekday = dt.weekday()
    hour = dt.hour
    minute = dt.minute

    # 曜日チェック
    if not weekmask[weekday]:
        return False

    # 時間帯チェック
    if hour < start or hour >= end:
        return False

    # 祝日チェック
    # ...

    return True

# 2024年3月30日 9時00分がビジネス時間かどうか判定
dt = pd.Timestamp('2024-03-30 09:00')
is_on_offset = is_business_hour(dt)

# True と表示される
print(is_on_offset)

外部ライブラリ

  • holidays ライブラリ: 祝日判定
  • pytz ライブラリ: タイムゾーン

これらのライブラリを組み合わせて、より複雑なビジネス時間判定を行うことができます。

BusinessHour.is_on_offset は、シンプルで使いやすい関数ですが、複雑な判定を行う場合は、自作関数や外部ライブラリの利用を検討すると良いでしょう。




Pandas.tseries.offsets.BusinessHour.weekmask徹底解説

pandas. tseries. offsets. BusinessHour. weekmask は、BusinessHour オブジェクトで使用される属性で、曜日ごとにビジネスデーとして扱われるかどうかを指定します。デフォルトでは月曜日から金曜日までの営業日がビジネスデーとなりますが、weekmask を使用して、この設定を変更することができます。



pandasで月末までの日数に丸める:MonthEnd.normalize徹底解説

pandas. tseries. offsets. MonthEnd. normalize は、pandas ライブラリの DateOffset オブジェクトの normalize 属性にアクセスするための関数です。この属性は、DateOffset オブジェクトで表される日付を、その月の末日までの日数に丸めるかどうかを制御します。


Pandas Data Offsets と CustomBusinessMonthBegin の完全解説

Pandas は、Python でデータ分析を行うための強力なライブラリです。Data Offsets は、日付や時刻の値に時間的な差分を加算したり減算したりするための機能です。CustomBusinessMonthBegin は、Data Offsets の一種で、特定の条件を満たす月初めのビジネス日を指定することができます。


Pandas Data Offsets: Minute.kwds とは?

pandas. tseries. offsets. Minute. kwds は、Pandasライブラリでタイムシリーズ分析を行う際に使用される DateOffset オブジェクト の属性の一つです。この属性は、分単位 での日付オフセットを定義する際に、追加情報 を指定するために使用されます。


Pandas: Data Offsets - CustomBusinessHour.rollforward のサンプルコード集

CustomBusinessHour は、祝日や営業時間などを考慮したオフセットを設定するためのクラスです。rollforward メソッドは、指定された時刻を次の営業日に進めるためのメソッドです。出力解説サンプルコードでは、まず祝日と営業時間を設定しています。



質問:pandas.tseries.offsets.QuarterEnd.isAnchored の役割と使い方をわかりやすく解説してください。

pandas. tseries. offsets. QuarterEnd. isAnchored は、pandas ライブラリで四半期末の日付オフセットを扱う際に使用されるメソッドです。このメソッドは、オフセットが基点に固定されているかどうか を調べます。


Pandas で年の初めをカスタマイズ: YearBegin.base とその他的方法

YearBegin は、年の初めにオフセットを適用する特殊なオフセットです。YearBegin. base は、このオフセットの基準となる日付を表します。デフォルトでは、YearBegin. base は 1月1日 に設定されています。YearBegin


pandas.tseries.offsets.CustomBusinessMonthBegin.is_year_endの使い方とサンプルコード

pandas. tseries. offsets. CustomBusinessMonthBegin. is_year_end は、pandas ライブラリでカスタムビジネス月始オフセットの日付が年末かどうかを判定する関数です。詳細CustomBusinessMonthBegin は、カスタムビジネス月始オフセットを表すクラスです。


Pandas DataFrameで箱ひげ図を描いてデータ分析をマスター

pandas. DataFrame. boxplot 関数は、DataFrame の列を箱ひげ図として可視化します。箱ひげ図は、データの分布、中央値、外れ値などを視覚的に理解するのに役立ちます。使い方基本的な使い方は以下の通りです。このコードは、df の "col1" と "col2" 列をそれぞれ箱ひげ図として表示します。


Pandas WeekOfMonth.is_quarter_start 属性のユースケース

この解説は、Python ライブラリ Pandas の Data Offsets 機能と、WeekOfMonth オブジェクトの is_quarter_start 属性について、プログラミング初心者にも分かりやすく説明することを目的としています。