調整

貨幣価値の影響を受けるデータは、分析前に調整する必要がある時もあります。 ここでは消費者物価指数 (CPI)を用いて時系列データに対してインフレ調整をしてみます。具体的には

  • FREDから消費者物価指数 (CPI)のデータを、pythonのAPIを用いて取得
  • アメリカの世帯収入の中央値データを取得
  • アメリカの世帯収入の中央値データをCPIを用いて調整する
  • アメリカの世帯収入の中央値データ(調整済み)のデータと、CPIを用いて調整したデータを比較

してみます。

import os
import cpi
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

from full_fred.fred import Fred
from datetime import date


cpi.update()  # 必ず実行する

FREDからデータを取得する

FREDから必要なデータを取得します。データの取得方法については別動画で説明していますが、pythonからアクセスするためにはAPIキーの発行が必要です。

# FRED_API_KEY = os.getenv('FRED_API_KEY')
fred = Fred()
print(f"FRED APIキーが環境変数に設定されている:{fred.env_api_key_found()}")


def get_fred_data(name, start="2013-01-01", end=""):
    df = fred.get_series_df(name)[["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[f"{start}":]
    else:
        df = df.loc[f"{start}":f"{end}"]

    return df
FRED APIキーが環境変数に設定されている:True

Household Income in the United States(世帯収入データ)

Median Household Income in the United States (MEHOINUSA646N)のデータを確認してみます。このデータは、データの単位が

Units: Current Dollars, Not Seasonally Adjusted

となっており、このデータはインフレ調整・季節調整がされていません。 この家計データをCPIを用いて調整してみます。

data = get_fred_data("MEHOINUSA646N", start="2013-01-01", end="")
data.head()

value
date
2013-01-0153585
2014-01-0153657
2015-01-0156516
2016-01-0159039
2017-01-0161136

CPIを用いて値を調整する

data["adjusted"] = [
    cpi.inflate(dollers.value, date.year) for date, dollers in data.iterrows()
]

調整前と調整後の比較

plt.figure(figsize=(12, 6))
sns.lineplot(
    data=data,
    x="date",
    y="value",
    label="Current Dollars, Not Seasonally Adjusted(MEHOINUSA646N)",
)
sns.lineplot(data=data, x="date", y="adjusted", label="MEHOINUSA646N adjusted")
plt.legend()
<matplotlib.legend.Legend at 0x28d341a5e80>

png

Real Median Household Income in the United States

調整済みのデータはReal Median Household Income in the United States (MEHOINUSA672N)にて提供されています。先ほどインフレ調整したデータ(dataの中にあるadjusted列の値)とMEHOINUSA672Nの値を比較してみます。調整前の値を消費者物価指数 (CPI)を用いて調整したものは、調整済みの値(MEHOINUSA672N)とほとんど一致するのが期待値です。

data_real = get_fred_data("MEHOINUSA672N", start="2013-01-01", end="")
data_real.head()

value
date
2013-01-0162425
2014-01-0161468
2015-01-0164631
2016-01-0166657
2017-01-0167571
plt.figure(figsize=(12, 6))
sns.lineplot(data=data_real, x="date", y="value", label="MEHOINUSA672N")
sns.lineplot(data=data, x="date", y="adjusted", label="MEHOINUSA646N adjusted")

# 確認のため、プロットした値をテキストで表示しています
for t, v in data_real.iterrows():
    plt.text(t, v[0] - 500, f"{v[0]:.2f}")

for t, v in data.iterrows():
    plt.text(t, v[1] + 500, f"{v[1]:.2f}")

plt.legend()
<matplotlib.legend.Legend at 0x28d347968b0>

png

コメント欄

※コメントは承認後に表示されます。個人情報は入力しないようにお願いします。