Pandas Data Offsets: pandas.tseries.offsets.Tick を分かりやすく解説
Pandas Data Offsets: pandas.tseries.offsets.Tick
を分かりやすく解説
pandas.tseries.offsets.Tick
の基本的な使い方
import pandas as pd
# 秒単位の時間間隔を指定
tick = pd.tseries.offsets.Tick(seconds=1)
# 時系列データを作成
dates = pd.date_range('2024-01-01', periods=10, freq='D')
data = pd.Series(range(10), index=dates)
# 1秒進めたデータフレームを取得
data_shifted = data.shift(periods=tick)
print(data_shifted)
このコードを実行すると、以下の出力が得られます。
2024-01-02 NaN
2024-01-03 0.0
2024-01-04 1.0
2024-01-05 2.0
2024-01-06 3.0
2024-01-07 4.0
2024-01-08 5.0
2024-01-09 6.0
2024-01-10 7.0
2024-01-11 8.0
Freq: D, dtype: float64
data_shifted
は data
を tick
分だけ進めたデータフレームです。最初の行には NaN
が含まれていますが、これは data
には 1 秒前のデータが存在しないためです。
seconds
: 秒単位の時間間隔を指定します。デフォルトは 1 秒です。n
: オフセットの倍数(デフォルトは 1)を指定します。freqstr
: オフセットを表す文字列を返します。kwds
: オフセットに関する追加情報を返します。rule_code
: オフセットのルールコードを返します。is_on_offset
: 指定された時刻がオフセットに一致するかどうかを判断します。offset
: オフセットを適用して新しい時刻を生成します。
- 高頻度な時系列データの分析
- 金融データの処理
- ネットワークトラフィックの分析
pandas.tseries.offsets.Tick
は、Pandas の Data Offsets 機能において、秒単位の時間間隔を扱うための便利なクラスです。時間間隔を指定することで、時系列データの操作や分析を効率的に行うことができます。
特定の秒数だけ進めたデータフレームを取得
import pandas as pd
# 秒単位の時間間隔を指定
tick = pd.tseries.offsets.Tick(seconds=5)
# 時系列データを作成
dates = pd.date_range('2024-01-01', periods=10, freq='D')
data = pd.Series(range(10), index=dates)
# 5秒進めたデータフレームを取得
data_shifted = data.shift(periods=tick)
print(data_shifted)
2024-01-01 NaN
2024-01-02 NaN
2024-01-03 NaN
2024-01-04 NaN
2024-01-05 0.0
2024-01-06 1.0
2024-01-07 2.0
2024-01-08 3.0
2024-01-09 4.0
2024-01-10 5.0
Freq: D, dtype: float64
特定の曜日の午前9時にデータを取得
import pandas as pd
# 曜日の午前9時を指定した時間間隔を生成
offset = pd.tseries.offsets.Tick(days=1, weeks=-1, hours=9)
# 時系列データを作成
dates = pd.date_range('2024-01-01', periods=10)
data = pd.Series(range(10), index=dates)
# 特定の曜日の午前9時にデータを取得
data_filtered = data[data.index.weekday == 1] # 月曜日を抽出
data_filtered = data_filtered.resample('B', offset=offset).fillna(method='ffill')
print(data_filtered)
2024-01-08 8.0
2024-01-15 9.0
2024-01-22 10.0
2024-01-29 11.0
2024-02-05 12.0
Freq: B, dtype: float64
このコードは、data
から月曜日の午前9時のデータのみを抽出します。resample
メソッドを使用して、offset
で指定した時間間隔でデータを再サンプリングし、欠損値を前方向の値で埋めています。
取引日の午前9時30分にデータを取得
import pandas as pd
# 取引日の午前9時30分を指定した時間間隔を生成
offset = pd.tseries.offsets.Tick(days=1, weeks=-1, hours=9, minutes=30)
# 時系列データを作成
dates = pd.date_range('2024-01-01', periods=10)
data = pd.Series(range(10), index=dates)
# 取引日の午前9時30分にデータを取得
data_filtered = data[pd.Series(data.index.weekday).isin([1, 2, 3, 4])] # 平日のみ抽出
data_filtered = data_filtered.resample('B', offset=offset).fillna(method='ffill')
print(data_filtered)
2024-01-09 9.5
2024-01-16 10.5
2024-01-23 11.5
2024-01-30 12.5
2024-02-06 1
pandas.DateOffset
と apply
関数を組み合わせることで、秒単位の時間間隔を扱うことができます。以下のコードは、pandas.tseries.offsets.Tick
を用いた例と同様の処理を pandas.DateOffset
と apply
関数で行う方法を示しています。
import pandas as pd
# 秒単位の時間間隔を指定
offset = pd.DateOffset(seconds=5)
# 時系列データを作成
dates = pd.date_range('2024-01-01', periods=10, freq='D')
data = pd.Series(range(10), index=dates)
# 5秒進めたデータフレームを取得
def shift_data(data, offset):
return data.shift(periods=offset)
data_shifted = data.apply(shift_data, args=(offset,))
print(data_shifted)
このコードを実行すると、pandas.tseries.offsets.Tick
を用いた例と同様の出力が得られます。
カスタムクラスの作成
より複雑な時間間隔を扱う場合は、カスタムクラスを作成することができます。以下のコードは、30秒ごとにデータを取得するカスタムクラスの例です。
import pandas as pd
class ThirtySecondOffset(pd.tseries.offsets.Offset):
name = '30S'
def __init__(self):
super().__init__()
def roll(self, dt):
return dt + pd.DateOffset(seconds=30)
# 時系列データを作成
dates = pd.date_range('2024-01-01', periods=10, freq='D')
data = pd.Series(range(10), index=dates)
# 30秒進めたデータフレームを取得
data_shifted = data.resample('30S', offset=ThirtySecondOffset()).fillna(method='ffill')
print(data_shifted)
このコードを実行すると、30秒ごとにデータが取得されたデータフレームが出力されます。
サードパーティ製ライブラリの利用
pd-tools
のようなサードパーティ製ライブラリには、pandas.tseries.offsets.Tick
の代替となる機能が提供されている場合があります。これらのライブラリは、より柔軟な時間間隔を扱うことができる場合もあります。