# 【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
オブジェクトを作成しています。
代替方法
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) を取得しています。
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