PythonでFREDとyfinanceを使った株価可視化

📌 この記事でわかること:

  • FRED APIとyfinanceを使った経済データと株価データの取得方法
  • CPIとS&P500をPythonで同時に可視化する方法
  • マクロ指標と株価を組み合わせた投資分析の基本

👤 対象となる読者:

  • Pythonを使って投資・経済分析を行いたい初〜中級者
  • マクロ経済データ(インフレ・金利・景気後退)を視覚化したい人
  • CPIやS&P500の動きをコードで確認・比較したい人

🔧 活用できるシーン:

  • インフレや景気後退時に株価と指標を重ねて分析したいとき
  • 定期レポートやブログなどにマクロ可視化グラフを掲載したいとき
  • FRED APIとyfinanceを実務や学習に取り入れたいとき

目次

1. はじめに

米国経済の動向を把握することは、投資判断やマクロ分析において非常に重要です。
特に、インフレ指標であるCPI(消費者物価指数)や、株価指数であるS&P500などの動きは、金融政策や市場のセンチメントに大きく影響します。

本記事では、米国セントルイス連邦準備銀行が提供するFRED APIを用いてCPIデータを取得し、Pythonの人気ライブラリであるyfinanceと組み合わせてS&P500と並べてグラフ化してみます。
APIの登録方法から、実際のコードと可視化の結果までを丁寧に解説していきます。


2. FRED APIとは?

FRED(Federal Reserve Economic Data)APIは、米国セントルイス連邦準備銀行が提供する経済統計データの取得インターフェースです。
データの種類は多岐にわたり、以下のようなマクロ経済指標を無料で利用できます。

  • CPI(消費者物価指数)
  • 失業率(Unemployment Rate)
  • FF金利(Federal Funds Rate)
  • 長短金利差(10年国債利回り – 2年国債利回り)
  • M2(マネーサプライ)
  • GDP(国内総生産)
  • 景気後退フラグ(USRECD)

このAPIを使えば、定期的に更新される米国の経済データを自動で取得し、PythonやExcelなどに組み込むことが可能になります。


3. yfinanceと組み合わせるメリット

yfinanceはYahoo! Financeから株価データを取得できるPythonライブラリです。FREDの経済指標と組み合わせて使うことで、例えば以下のような分析が可能になります:

  • インフレが進行する局面でS&P500がどのような動きをしたか
  • 景気後退前後で株価のパフォーマンスがどう変わるか
  • 金利上昇期に高配当株ETF(HDVやSPYDなど)が相対的に強いのか

FREDは「経済の現状や背景」を、yfinanceは「市場の反応」を可視化することで、より立体的な分析ができるようになります。


4. FRED APIの登録方法とAPIキーの注意点

  1. FRED公式サイトにアクセスし、「My Account」からアカウントを作成します。
  2. Googleログインでも登録できます。
  3. ログイン後、「API Keys」セクションから「Request API Key」をクリックし、簡単な目的を記入して発行。
  4. 表示されたAPIキーをコピーして保存。

ステップ1:FRED公式サイトへアクセス

まずはFRED公式サイトにアクセスします。
右上にある「My Account」からログインまたはアカウント作成へ進みます。


ステップ2:Googleアカウントでログイン

FREDにはGoogleアカウントやメールアドレスでログインできます。
新規登録の場合は、右上の「Create New Account」タブをクリックし、必要情報を入力してください。

🔍 ポイント

  • Googleログインが最も手軽ですが、メールアドレスでもOKです。
  • アカウント作成は無料で、商用利用も可能です(FREDの利用規約に従う必要あり)。

ステップ3:アカウントの作成完了

登録が完了すると「New Account Created」と表示されます。


ステップ5:APIキーの発行

Request API Key」ボタンをクリックし、簡単な説明文を入力すればキーが発行されます。


ステップ6:APIキー発行完了

APIキーが発行されました。
これでFREDのデータをPythonから取得できるようになります。

このキーは今後のコード内で使用しますので、忘れずにコピーして安全な場所に保存しておきましょう。

注意点

  • APIキーは個人の識別情報です。
    絶対にGitHubなどの公開リポジトリやブログ上にそのまま載せないようにしましょう。
  • .envファイルや環境変数で安全に管理するのがベストです。

5. 必要なライブラリと環境構築

5.1. 使用ライブラリと事前準備について

本記事では、FRED APIとyfinanceを使って経済指標と株価データを取得・可視化します。
もしPython環境の構築や、yfinanceの基本的な使い方に不安がある方は、以下の関連記事も参考にしてください。


📚 関連記事リンク:

5.2. FRED APIインストール

まずは必要なライブラリをインストールします。

pip install yfinance fredapi matplotlib pandas

また、Jupyter NotebookやGoogle ColabなどのPython実行環境があると実験しやすいです。

Jupyter Notebookの場合はこのようにも書けます。

!pip install yfinance fredapi matplotlib pandas

6. Pythonコードと表示結果

以下のコードでは、FREDからCPI(月次)を取得し、同期間のS&P500株価(終値ベース)をyfinanceから取得して、同じグラフ上にプロットします。

from fredapi import Fred
import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd

# 日本語フォント
plt.rcParams['font.family'] = 'Meiryo'

# APIキー
fred = Fred(api_key='YOUR_API_KEY')

# データ取得
cpi = fred.get_series('CPIAUCSL', observation_start='2000-01-01')
sp500_df = yf.download('^GSPC', start='2000-01-01', interval='1mo')
sp500 = sp500_df['Close']
if isinstance(sp500, pd.DataFrame):
    sp500 = sp500.iloc[:, 0]

# データ統合
df = pd.DataFrame({
    'CPI': cpi,
    'S&P500': sp500
}).dropna()

# 可視化
fig, ax1 = plt.subplots(figsize=(12, 5))
ax1.plot(df.index, df['S&P500'], color='blue', label='S&P500')
ax1.set_ylabel('S&P500 株価', color='blue')
ax1.tick_params(axis='y', labelcolor='blue')

ax2 = ax1.twinx()
ax2.plot(df.index, df['CPI'], color='red', label='CPI')
ax2.set_ylabel('CPI(消費者物価指数)', color='red')
ax2.tick_params(axis='y', labelcolor='red')

plt.title('S&P500とCPIの推移(2000年以降)')
plt.grid(True)
plt.tight_layout()
plt.show()

表示結果の一例

  • CPIは2000年以降、ほぼ一貫して右肩上がり(インフレ傾向)
  • S&P500はリーマンショック(2008年)とコロナショック(2020年)で大きく下落後に回復
  • 2021年以降のインフレ加速株式市場の高値圏での不安定さが重なる

7. まとめと今後の方針

本記事では、FRED APIとyfinanceを使って、インフレ指標であるCPIとS&P500の株価を同時に可視化する方法を紹介しました。

今後は発展的なテーマにも取り組んでいければと思っております。
以下は一例です。

  • CPIの前年比変化率(実質インフレ率)に変換して推移を見る
  • 景気後退期間(FREDのUSRECD)をグラフ背景に影として表示
  • 金利差(10年-2年)との連動を見る
  • 雇用統計と市場の関係を分析
  • 複数のETFを横並びで表示し、リスク耐性やリターンを比較

経済指標を「眺めるもの」から「読み解く武器」へ。
PythonとFRED APIを使って、あなたもマクロ視点での投資判断を始めてみませんか?


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Python・投資・業務効率化をテーマにしたブログを運営しています。
本業では社内ツール・アプリの運営・開発をしており、趣味はキャンプや食べ歩きです。

このブログでは、実体験や実務で役立った知識をベースに、
初心者でも再現できる情報発信を心がけています。

コメント

コメントする

目次