- 通貨金額の時系列は必ずインフレ(CPI)を考慮しないと、過去データとの比較が歪みます。
- FRED API で時系列を取得し、
cpiライブラリで実質額に換算するワークフローを紹介します。 - すでに「実質値」が公開されているシリーズとの突き合わせで、変換が正しくできているか検証します。
1. 依存ライブラリと設定 #
import os
import cpi
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from full_fred.fred import Fred
cpi.update() # CPI データを最新に更新
fred = Fred() # 環境変数 FRED_API_KEY が設定されている前提
full_fred は FRED の公式 API を簡単に叩けるラッパーです。
2. FRED から系列を取得するヘルパー #
def get_fred_data(series_id, start="2013-01-01", end=None):
df = fred.get_series_df(series_id)[["date", "value"]].copy()
df["date"] = pd.to_datetime(df["date"])
df["value"] = pd.to_numeric(df["value"], errors="coerce")
df = df.set_index("date")
if end:
df = df.loc[start:end]
else:
df = df.loc[start:]
return df
3. 名目値(Current Dollar)を取得 #
Median Household Income (MEHOINUSA646N) は「Current Dollars, Not Seasonally Adjusted」で公開されているシリーズです。
data = get_fred_data("MEHOINUSA646N", start="2013-01-01")
data.head()
可視化しておきます。
plt.figure(figsize=(12, 6))
sns.lineplot(data=data, x="date", y="value")
plt.title("Median Household Income (nominal)")
plt.show()
4. CPI を使って実質化する #
cpi.inflate(名目額, 西暦) で任意の基準年(デフォルトは最新年)に換算できます。ここでは各年の値を最新 CPI に合わせます。
data["real_value"] = [
cpi.inflate(row.value, idx.year) for idx, row in data.iterrows()
]
比較すると、物価上昇を除いた実質額(real_value)は名目額よりも大きく見えます。
plt.figure(figsize=(12, 6))
sns.lineplot(data=data, x="date", y="value", label="Nominal (MEHOINUSA646N)")
sns.lineplot(data=data, x="date", y="real_value", label="Adjusted by CPI")
plt.legend()
plt.show()
5. 公開済みの実質値と突き合わせ #
FRED にはすでに「Real Median Household Income (MEHOINUSA672N)」もあります。自前で調整した値と一致するか検証します。
data_real = get_fred_data("MEHOINUSA672N", start="2013-01-01")
plt.figure(figsize=(12, 6))
sns.lineplot(data=data_real, x="date", y="value", label="MEHOINUSA672N (real)")
sns.lineplot(data=data, x="date", y="real_value", label="MEHOINUSA646N adjusted")
plt.legend()
plt.show()
グラフがほぼ重なれば、CPI による調整が正しく行われていると判断できます。小さな差は基準年の違いによるものです。
6. 実務 Tips #
基準年の統一
cpi.inflate(value, year, to='2022')のようにto引数を指定すると任意の基準年に換算できます。レポートごとに統一しておくと混乱しません。月次データ
月次データを扱う場合はcpi.series = cpi.seriesの更新頻度を確認し、date(year, month, day)を渡す必要があります。国・通貨が異なる場合
CPI のソースを各国の統計局や World Bank API に切り替え、同じ「実質化」関数を作っておくと汎用的に使えます。差分 vs 実質値
回帰で “伸び率” を扱う場合はログ差分でもインフレをある程度吸収できます。水準値を比較するなら CPI での調整が不可欠です。
7. まとめ #
| ステップ | 内容 |
|---|---|
| FRED から名目値を取得 | full_fred でシリーズ ID を指定 |
cpi.inflate で実質化 | 行ごとに CPI を適用して新列を追加 |
| 公開済み実質値と比較 | 変換が正しいか検証 |
貨幣価値をそろえるだけでトレンドの解釈が大きく変わるので、価格や収益を扱う分析では必ずこのステップを入れておきましょう。