Pandas Data Offsets 入門:Hour.freqstrを使いこなして時系列データ操作をマスターしよう!

2024-04-02

Pandas Data Offsets と Hour.freqstr の解説

Pandasは、Pythonでデータ分析を行うための強力なライブラリです。その中でも、pandas.tseries.offsets は、時系列データの操作に便利な機能を提供します。

Data Offsets は、時系列データの各データポイント間の時間間隔を表すオブジェクトです。例えば、1時間ごとにデータが収集されている場合、Data Offset は 1 時間となります。

Hour.freqstr は、Hour 型の Data Offset の文字列表現を取得するための関数です。

Hour.freqstr は、以下の引数を受け取ります。

  • n: オフセットの回数 (デフォルトは 1)
  • startingDay: 週の開始曜日 (デフォルトは 'Mon')

import pandas as pd

# 1 時間オフセットの文字列表現を取得
offset = pd.tseries.offsets.Hour()
print(offset.freqstr)

# 出力: 'H'

# 2 時間オフセットの文字列表現を取得
offset = pd.tseries.offsets.Hour(2)
print(offset.freqstr)

# 出力: '2H'

# 月曜から始まる週で、3 時間オフセットの文字列表現を取得
offset = pd.tseries.offsets.Hour(3, startingDay='Mon')
print(offset.freqstr)

# 出力: '3H@MON'

Hour.freqstr の出力結果は、以下の形式になります。

  • nH: n 時間オフセット
  • nH@MON: n 時間オフセット、週の開始曜日は月曜日

Hour.freqstr の活用例

  • 時系列データのインデックスを作成する
  • 時系列データのシフトやリサンプルを行う
  • 時系列データの可視化を行う


Hour.freqstr を使ったサンプルコード

import pandas as pd

# データ
dates = pd.date_range('2023-01-01', '2023-12-31', freq='H')

# Hour 型の Data Offset を作成
offset = pd.tseries.offsets.Hour()

# インデックスを作成
df = pd.DataFrame(index=dates)

# インデックスを確認
print(df.index)

# 出力:
# DatetimeIndex(['2023-01-01 00:00:00', '2023-01-01 01:00:00',
#                '2023-01-01 02:00:00', ..., '2023-12-31 22:00:00',
#                '2023-12-31 23:00:00'],
#               dtype='datetime64[ns]', freq='H')

時系列データのシフトを行う

# データ
df = pd.DataFrame({'value': range(24)})

# 2時間オフセットでシフト
df = df.shift(2, freq='H')

# 確認
print(df)

# 出力:
#    value
# 0  22
# 1  23
# 2  0
# 3  1
# ...
# 21  21
# 22  22
# 23  23

時系列データのリサンプルを行う

# データ
df = pd.DataFrame({'value': range(24)}, index=pd.date_range('2023-01-01', '2023-01-02', freq='H'))

# 3時間間隔でリサンプル
df = df.resample('3H').mean()

# 確認
print(df)

# 出力:
#             value
# 2023-01-01 00:00:00  2.0
# 2023-01-01 03:00:00  5.0
# 2023-01-01 06:00:00  8.0
# 2023-01-01 09:00:00  11.0
# 2023-01-01 12:00:00  14.0
# 2023-01-01 15:00:00  17.0
# 2023-01-01 18:00:00  20.0
# 2023-01-01 21:00:00  23.0

時系列データの可視化を行う

# データ
df = pd.DataFrame({'value': range(24)}, index=pd.date_range('2023-01-01', '2023-01-02', freq='H'))

# 3時間間隔でリサンプル
df = df.resample('3H').mean()

# 折れ線グラフで可視化
df.plot()

# plt.show() を忘れずに
plt.show()

週の開始曜日を指定する

# 月曜から始まる週で、3時間オフセット
offset = pd.tseries.offsets.Hour(3, startingDay='Mon')

# 文字列表現を取得
print(offset.freqstr)

# 出力: '3H@MON'

これらのサンプルコードは、Hour.freqstr の使い方を理解する



Hour.freqstr 以外の方法

文字列

  • "H": 1時間オフセット
  • "3H@MON": 月曜から始まる週で、3時間オフセット

DateOffset オブジェクト

from pandas.tseries.offsets import Hour

# 1時間オフセット
offset = Hour()

# 2時間オフセット
offset = Hour(2)

# 月曜から始まる週で、3時間オフセット
offset = Hour(3, startingDay='Mon')

timedelta オブジェクト

from datetime import timedelta

# 1時間オフセット
offset = timedelta(hours=1)

# 2時間オフセット
offset = timedelta(hours=2)

# 3時間オフセット
offset = timedelta(hours=3)

これらの方法は、Hour.freqstr よりも簡潔に記述できますが、Hour.freqstr の方が可読性が高くなります。

  • 可読性を重視する場合は、Hour.freqstr を使う。
  • 簡潔性を重視する場合は、文字列や DateOffset オブジェクトを使う。
  • timedelta オブジェクトを使う必要がある場合は、timedelta オブジェクトを使う。



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

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



PandasのMonthEnd.name属性:月単位の時系列データ分析をマスターするための必須アイテム

pandas. tseries. offsets. MonthEnd. name は、パンダライブラリのタイムシリーズモジュールにおける重要な属性です。これは、MonthEnd オフセットオブジェクトの名前を表し、月単位の時系列データ分析において、特定の月の末日を指す際に役立ちます。


Pandas Data Offsets と LastWeekOfMonth.is_month_end 以外の方法

Pandas Data Offsets は、日付や時刻を操作するための便利なツールです。特定の期間(日、週、月など)を簡単に追加したり、差を取ったりすることができます。LastWeekOfMonth. is_month_end は、特定の日付がその月の最後の週かどうかを示す属性です。


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

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


Pandas初心者でも安心! pandas.tseries.offsets.Milli.__call__ を使ったミリ秒単位の日付オフセット生成

pandas. tseries. offsets. Milli. __call__ は、Pandasの「Data offsets」機能における重要な関数の一つです。ミリ秒単位の日付オフセットを生成するために使用されます。機能この関数は以下の機能を提供します。



Pandas Indexオブジェクトにおける pandas.Index.is_mixed 属性の徹底解説

pandas. Index. is_mixedは、PandasのIndexオブジェクトが異なるデータ型を含むかどうかを判断する属性です。詳細pandas. Index. is_mixedは、以下の条件を満たす場合にTrueを返します。Indexオブジェクトが少なくとも2つの異なるデータ型を含む


【DataFrameマスターへの道】Seriesの文字列置換を自由自在に操る: pandas.Series.str.replace 活用術

pandas. Series. str. replace は、Pandas の Series オブジェクト内の文字列を置換するための便利なメソッドです。これは、単純な置換から正規表現を使用した複雑な置換まで、さまざまな文字列操作タスクに役立ちます。


PandasのGeneral utility functionsにおけるPerformanceWarning

この解説では、Pandasの「General utility functions」における「pandas. errors. PerformanceWarning」について、以下の内容を分かりやすく説明します。PerformanceWarningの概要


Pandas Data Offsets:BusinessDay.normalize メソッドの完全ガイド

Pandas の Data Offsets は、日付や時間軸データを操作するための便利なツールです。BusinessDay は、営業日ベースで日付をオフセットするための機能です。BusinessDay. normalize は、BusinessDay オフセットを正規化し、午前0時0分0秒に揃えるためのメソッドです。


Pandas Seriesのdt.microseconds属性:マイクロ秒部分の秘密を解き明かす

pandas. Series. dt. microseconds は、pandas の Series オブジェクトに含まれる datetime 型データのマイクロ秒部分を取得するための属性です。属性値dt. microseconds 属性は、Series オブジェクトに含まれる datetime 型データのマイクロ秒部分を表す数値の Series オブジェクトを返します。