Pandas Data Offsets の活用:CustomBusinessDay オブジェクトで時系列データ分析をレベルアップ

2024-04-02

Pandas Data Offsets と CustomBusinessDay.freqstr

Pandas の Data Offsets は、時系列データの分析に役立つ機能です。特定の期間(日数、月数、年数など)を基準に、日付や時刻を操作したり、新しい日付や時刻を生成することができます。

CustomBusinessDay は、Data Offsets の中でも、祝日を除いた営業日を基準とした操作を可能にするクラスです。freqstr 属性は、この CustomBusinessDay オブジェクトが持つ オフセットの頻度 を文字列で返します。

解説

CustomBusinessDay オブジェクトの作成

from pandas.tseries.offsets import CustomBusinessDay

# 米国の祝日カレンダーを使用
calendar = USFederalHolidayCalendar()

# 2営業日後のオフセットを作成
bday_offset = CustomBusinessDay(2, calendar=calendar)

freqstr 属性

# オフセットの頻度を取得
bday_offset.freqstr

出力例:

'2BUS'

解釈:

  • 2 は、オフセットの 加算/減算する回数 を示します。
  • BUS は、Business Day の略で、営業日 を意味します。

その他の freqstr 属性の例:

  • 1BUS:1営業日後のオフセット
  • CustomBusinessDay(n=3, holidays=['2024-03-14']).freqstr

'3BUS<2024-03-14>':3営業日後のオフセット、2024年3月14日は除外

CustomBusinessDay オブジェクトの使用

# 2024年3月14日から2営業日後の日付を取得
date = pd.to_datetime('2024-03-14') + bday_offset

# 出力例:
# Timestamp('2024-03-16 00:00:00')

注意点:

  • CustomBusinessDay オブジェクトは、祝日カレンダー に依存します。
  • 祝日カレンダーは、自分で作成したり、ライブラリから読み込んだりすることができます。
  • freqstr 属性は、オフセットの頻度を 文字列 で返すため、計算や比較には使用できません。
  • CustomBusinessDay オブジェクトは、祝日を除いた営業日 を基準とした操作を可能にする。
  • freqstr 属性は、CustomBusinessDay オブジェクトが持つ オフセットの頻度 を文字列で返す。


CustomBusinessDay オブジェクトを使ったサンプルコード

祝日カレンダーの指定

from pandas.tseries.offsets import CustomBusinessDay
from pandas.tseries.holiday import USFederalHolidayCalendar

# 米国の祝日カレンダーを使用
calendar = USFederalHolidayCalendar()

# 日本のカレンダーを使用
# calendar = JapanHolidayCalendar()

# 独自の祝日カレンダーを使用
# holidays = pd.to_datetime(['2024-03-14', '2024-03-15'])
# calendar = HolidayCalendar(holidays=holidays)

bday_offset = CustomBusinessDay(2, calendar=calendar)

日付の加算/減算

# 2024年3月14日から2営業日後の日付を取得
date = pd.to_datetime('2024-03-14') + bday_offset

# 出力例:
# Timestamp('2024-03-16 00:00:00')

# 2024年3月16日から1営業日前の日付を取得
date = pd.to_datetime('2024-03-16') - bday_offset

# 出力例:
# Timestamp('2024-03-15 00:00:00')

DatetimeIndex の作成

# 2024年3月14日から2024年3月20日まで、営業日だけのDatetimeIndexを作成
dates = pd.date_range('2024-03-14', '2024-03-20', freq=bday_offset)

# 出力例:
# DatetimeIndex(['2024-03-14', '2024-03-15', '2024-03-16', '2024-03-19'], dtype='datetime64[ns]', freq='<CustomBusinessDay: 2 days>')

時系列データの操作

# 2024年3月14日から2024年3月20日までの株価データを取得
stock_prices = pd.read_csv('stock_prices.csv', index_col='Date')

# 営業日だけの日付に絞り込む
stock_prices = stock_prices.loc[dates]

# 営業日ベースで株価の移動平均を計算
stock_prices['MA'] = stock_prices['Close'].rolling(5).mean()

# 出力例:
#              Open  High   Low  Close   Volume        MA
# Date                                                  
# 2024-03-14  100.0  105.0  95.0  100.0   100000  NaN
# 2024-03-15  101.0  106.0  96.0  101.0   101000  NaN
# 2024-03-16  102.0  107.0  97.0  102.0   102000  101.0
# 2024-03-19  103.0  108.0  98.0  103.0   103000  101.8


CustomBusinessDay オブジェクト 以外の方法

手動で祝日を除外

from pandas import to_datetime

# 祝日のリスト
holidays = pd.to_datetime(['2024-03-14', '2024-03-15'])

# 営業日だけのDatetimeIndexを作成
dates = pd.date_range('2024-03-14', '2024-03-20')

# 祝日を削除
dates = dates[~dates.isin(holidays)]

# 出力例:
# DatetimeIndex(['2024-03-16', '2024-03-19'], dtype='datetime64[ns]')

注意点:

  • 祝日のリストを自分で作成する必要がある。
  • 祝日の追加・削除が頻繁に発生する場合は、メンテナンスが大変になる。

これらのライブラリは、祝日判定機能営業日数計算機能 を提供しており、CustomBusinessDay オブジェクトよりも柔軟な操作が可能です。

例:

from tseries import TimeSeries

# 米国の祝日カレンダーを使用
calendar = TimeSeries('US')

# 2024年3月14日から2024年3月20日までの営業日だけのDatetimeIndexを作成
dates = calendar.business_days(start_date='2024-03-14', end_date='2024-03-20')

# 出力例:
# DatetimeIndex(['2024-03-14', '2024-03-15', '2024-03-16', '2024-03-19'], dtype='datetime64[ns]')

注意点:

  • ライブラリのインストールが必要。
  • ライブラリの使用方法を習得する必要がある。

CustomBusinessDay オブジェクト 以外にも、手動での祝日除外時系列ライブラリの利用 といった方法があります。

それぞれの方法にはメリットとデメリットがあるため、目的に合った方法を選択する必要があります。




【完全ガイド】 pandas.tseries.offsets.YearBegin で年単位のオフセット計算をマスターしよう!

主な用途年始に基づいて日付を操作する年度末などの特定の日付を取得するカレンダーに基づいてオフセットを計算するYearBegin オブジェクトは、以下の要素で構成されます。offset: オフセットの値。正の値の場合は基準日以降、負の値の場合は基準日以前の日付を指します。



Pandas Data Offsets: MonthBegin.is_quarter_end を活用した四半期分析

pandas. tseries. offsets. MonthBegin. is_quarter_end は、月初めの日付が四半期末かどうかを判定する関数です。四半期とは、1年を4等分した期間です。(1月~3月、4月~6月、7月~9月、10月~12月)


Pandas データオフセット:Tick オブジェクトを使いこなして時系列データ分析をレベルアップ

この解説では、pandas. tseries. offsets. Tick オブジェクトの copy メソッドについて、以下の内容を詳しく説明します。Tick オブジェクトの概要copy メソッドの機能メソッドの引数と戻り値使用例関連するデータオフセット


is_quarter_start メソッドの使い方

この解説では、pandas. tseries. offsets. FY5253Quarter. is_quarter_start メソッドについて、以下の内容を詳しく説明します。FY5253Quarter とは: 米国会計年度に基づく四半期を表す DateOffset オブジェクト


Pandas YearEnd オフセット:DatetimeIndex/Series/Resampling との連携

YearEnd オフセットは、年末 に日付を進めるオフセットです。例えば、2023-03-08 に YearEnd オフセットを適用すると、2023-12-31 になります。YearEnd オフセットは、以下のパラメータを受け取ります。n: オフセットの回数 (デフォルトは 1)



Pandas インデックスオブジェクトの asof_locs メソッド:時系列データ分析とイベントデータ分析に役立つ強力なツール

メソッド名: asof_locs引数: target: 検索対象となる値 allow_exact: Trueの場合、完全一致する位置を返します。Falseの場合、最も近い位置を返します (デフォルト)。target: 検索対象となる値allow_exact: Trueの場合、完全一致する位置を返します。Falseの場合、最も近い位置を返します (デフォルト)。


Pandasで四半期分析をマスターしよう! QuarterEnd.is_quarter_endの使い方を徹底解説

Pandas は Python でデータ分析を行うためのライブラリです。Data Offsets は、日付や時間軸データを操作するための便利な機能です。pandas. tseries. offsets. QuarterEnd. is_quarter_end は、特定の日付が四半期の終わりかどうかを判断するための関数です。


PandasでデータフレームをStata形式に変換する際に発生する「PossiblePrecisionLoss」警告の詳細解説

概要pandas. errors. PossiblePrecisionLoss は、pandas ライブラリでデータフレームを Stata 形式に変換する際に発生する可能性のある警告です。これは、データフレーム内の数値が Stata の整数型 (int64) の範囲を超えている場合に発生します。


pandas.TimedeltaIndex.to_frame() で時間差データを分かりやすく分析

pandas. TimedeltaIndex. to_frame() は、pandas ライブラリの関数で、TimedeltaIndex オブジェクトを DataFrame オブジェクトに変換します。これは、時間差データを分析する際に非常に便利な機能です。


Pandas.io.stata.StataWriter.write_file関数を使ってStata形式のデータファイルを出力する方法

pandas. io. stata. StataWriter. write_file 関数は、PandasのDataFrameをStata形式のデータファイル(.dta)として出力します。Stataは統計分析ソフトウェアであり、この関数は、Pandasで作成したデータフレームをStataで読み込んで分析できるようにするためのものです。