# 【Python】Pandasで時間軸データを扱う:PeriodIndexのfreqstrメソッドを徹底解説!


用途

  • データの保存や共有における周波数情報の伝達
  • データの可視化や分析における周波数情報の利用
  • PeriodIndex の周波数情報を確認

基本的な使い方

import pandas as pd

# サンプルデータの作成
periods = pd.date_range('2020-01-01', periods=10, freq='D')
index = pd.PeriodIndex(periods, freq='D')

# freqstr メソッドの利用
freq_str = index.freqstr()
print(freq_str)

出力結果

D

解説

  • この例では、周波数情報が "D" (日) であることが確認できます。
  • freqstr メソッドを呼び出すことで、PeriodIndex オブジェクトの周波数情報が文字列として取得できます。
  • 上記コードでは、date_range 関数を使って 10 日間の DateTimeIndex オブジェクトを作成し、それを PeriodIndex オブジェクトに変換しています。

応用例:データの可視化における周波数情報の利用

import pandas as pd
import matplotlib.pyplot as plt

# サンプルデータの作成
periods = pd.date_range('2020-01-01', periods=10, freq='D')
index = pd.PeriodIndex(periods, freq='D')
data = np.random.randn(10)

# データフレームの作成
df = pd.DataFrame(data, index=index)

# 折れ線グラフの作成
df.plot()
plt.title('周波数: 日')
plt.show()

出力結果

解説

  • これにより、データの可視化において周波数情報が明確に示されます。
  • グラフタイトルには freqstr メソッドで取得した周波数情報 ("日") が設定されています。
  • 上記コードでは、PeriodIndex オブジェクトに基づいてデータフレームを作成し、折れ線グラフを作成しています。

pandas.PeriodIndex.freqstr メソッドは、PeriodIndex オブジェクトの周波数情報を簡単かつ効率的に取得するための便利なツールです。データの分析や可視化において、周波数情報は重要な役割を果たします。このメソッドを活用することで、データの理解を深め、より効果的な分析や可視化を行うことができます。

  • 周波数情報の詳細な文字列表現を取得したい場合は、strftime() 関数と組み合わせて使用することができます。
  • freqstr メソッドは、PeriodIndex オブジェクトの freq 属性が設定されていない場合は None を返します。


周波数情報の詳細な文字列表現の取得

import pandas as pd

# サンプルデータの作成
periods = pd.date_range('2020-01-01', periods=10, freq='M')
index = pd.PeriodIndex(periods, freq='M')

# freqstr メソッドと strftime 関数の組み合わせ
freq_str = index.freqstr(format='%Y-%m-%d')
print(freq_str)
2020-01-01
2020-02-01
2020-03-01
...
2020-09-01
2020-10-01

解説

  • この例では、フォーマット "%Y-%m-%d" を使用しているので、各月の 1 日が文字列として取得されます。
  • 上記コードでは、strftime() 関数を使って、PeriodIndex オブジェクトの周波数情報を指定したフォーマットで文字列に変換しています。

異なる周波数への変換

import pandas as pd

# サンプルデータの作成
periods = pd.date_range('2020-01-01', periods=10, freq='D')
index = pd.PeriodIndex(periods, freq='D')

# 周波数の変換
new_index = index.asfreq('M')

# 新しい周波数情報の取得
new_freq_str = new_index.freqstr()
print(new_freq_str)

出力結果

M

解説

  • freqstr メソッドを呼び出すことで、新しい周波数情報 ("M") が確認できます。
  • 上記コードでは、asfreq() メソッドを使って、PeriodIndex オブジェクトの周波数を月単位に変更しています。
import pandas as pd

# サンプルデータの作成
index1 = pd.PeriodIndex(pd.date_range('2020-01-01', periods=10, freq='D'))
index2 = pd.PeriodIndex(pd.date_range('2021-01-01', periods=12, freq='M'))

# 周波数情報の比較
if index1.freq == index2.freq:
    print('周波数情報が一致しています')
else:
    print('周波数情報が一致していません')

出力結果

周波数情報が一致していません
  • この例では、2 つのオブジェクトの周波数が異なるため、"周波数情報が一致していません" と出力されます。
  • if 文を使って、2 つのオブジェクトの周波数情報が一致しているかどうかを比較しています。
  • 上記コードでは、異なる周波数の 2 つの PeriodIndex オブジェクトを作成しています。


代替方法

  1. freq 属性の利用

PeriodIndex オブジェクトには freq 属性があり、直接周波数情報にアクセスできます。

import pandas as pd

# サンプルデータの作成
periods = pd.date_range('2020-01-01', periods=10, freq='D')
index = pd.PeriodIndex(periods, freq='D')

# freq 属性の利用
freq_info = index.freq
print(freq_info)

出力結果

<freq: DAY>

解説

  • freq 属性は、PeriodIndex オブジェクトの周波数情報を直接取得したい場合に便利です。
  • 上記コードでは、freq 属性を使って PeriodIndex オブジェクトの周波数情報 (DAY) を取得しています。
  1. strftime() 関数の利用

strftime() 関数を使って、PeriodIndex オブジェクトの周波数情報を任意のフォーマットで文字列に変換できます。

import pandas as pd

# サンプルデータの作成
periods = pd.date_range('2020-01-01', periods=10, freq='M')
index = pd.PeriodIndex(periods, freq='M')

# strftime 関数の利用
freq_str = index[0].strftime('%Y-%m')
print(freq_str)

出力結果

2020-01

解説

  • strftime() 関数は、周波数情報を詳細な文字列表現で取得したい場合に便利です。
  • 上記コードでは、strftime() 関数を使って、PeriodIndex オブジェクトの最初の要素の周波数情報を "%Y-%m" フォーマットで文字列に変換しています。

to_string() メソッドの利用

to_string() メソッドを使って、PeriodIndex オブジェクトを文字列に変換できます。デフォルトでは、周波数情報を含む詳細な文字列が出力されます。

import pandas as pd

# サンプルデータの作成
periods = pd.date_range('2020-01-01', periods=10, freq='W')
index = pd.PeriodIndex(periods, freq='W')

# to_string メソッドの利用
freq_str = index.to_string()
print(freq_str)

出力結果

Freq: W, starts: 2020-01-05, ends: 2020-03-08
2020-01-05 (Sun)
2020-01-12 (Sun)
2020-01-19 (Sun)
2020-01-26 (Sun)
2020-02-02 (Sun)
2020-02-09 (Sun)
2020-02-16 (Sun)
2020-02-23 (Sun)
2020-03-01 (Sun)
2020-03-08 (Sun)

解説

  • to_string() メソッドは、周波数情報だけでなく、PeriodIndex オブジェクト全体の情報を文字列として取得したい場合に便利です。
  • 上記コードでは、to_string() メソッドを使って、PeriodIndex オブジェクトを周波数情報を含む詳細な文字列に変換しています。
  • 周波数情報を含む詳細な文字列を取得したい場合は、to_string() メソッドが適切です。
  • 周波数情報を任意のフォーマットで取得したい場合は、strftime() 関数が適しています。
  • シンプルな周波数情報のみを取得したい場合は、freq 属性が最も効率的です。
  • 各方法の利点と欠点を理解し、それぞれの状況に合った方法を選択しましょう。
  • 状況に応じて最適な代替方法を選択することが重要です。
  • [pandas.PeriodIndex