プログラミング 株式投資

【Python】yfinanceで取得できるデータと活用法

このブログでは、日々売買シグナルや割安高配当銘柄の抽出のためのプログラムを実行して投稿しています。今回は、そのために重宝している「yfinance」のAPIで取得できる情報について、yfinanceのドキュメントにある情報をもとに調べてみたのでまとめたいと思います。
「yfinanceのAPIを使って取得できるデータは何??」「株価以外にも取得できるデータはあるの??」「ドキュメントは英語で書かれているから日本語で知りたい!!」という人は必見です!

yfinanceとは?

yfinanceは、Yahoo Financeから金融データを簡単に取得できるPythonライブラリです。2019年にYahoo Financeの公式APIがサービス終了した後、その代替として開発されたオープンソースプロジェクトとなっています。

このライブラリを使えば、数行のコードで株価データ、企業財務情報、オプション情報など、様々な金融データをYahoo Financeから取得することができます。投資分析や金融アプリケーション開発のために世界中の多くの開発者やアナリストに利用されています。

yfinanceのインストール方法

pipを使って簡単にインストールできます。

pip install yfinance

最新バージョンを使うことをお勧めします。アップデートは以下のコマンドで行えます。

pip install --upgrade yfinance

yfinanceで取得できる主なデータ

yfinanceでは、以下のような様々な金融データを取得することができます。個別に詳しく見ていきましょう。

1. 株価データ

最も基本的なデータとして、株価の時系列データを取得できます。具体的には以下のデータです。

  • 始値(Open)
  • 高値(High)
  • 安値(Low)
  • 終値(Close)
  • 調整後終値(Adj Close)
  • 出来高(Volume)

以下はティッカーシンボル「AAPL」(Apple Inc.)の株価データを取得する例です。

import yfinance as yf

# Appleの株価データを取得
aapl = yf.Ticker("AAPL")

# 過去5年間の株価を取得
hist = aapl.history(period="5y")

print(hist.head())  # 最初の5行を表示

期間指定には、以下のようなオプションが使えます。

  • period: "1d", "5d", "1mo", "3mo", "6mo", "1y", "2y", "5y", "10y", "ytd", "max"
  • startend: 開始日と終了日(例: start="2020-01-01", end="2023-12-31")
  • interval: データの間隔("1m", "2m", "5m", "15m", "30m", "60m", "90m", "1h", "1d", "5d", "1wk", "1mo", "3mo")

2. 企業の基本情報

yfinanceでは銘柄のティッカーシンボルを指定することで、その企業の基本情報も取得できます。

import yfinance as yf

# Appleの情報を取得
aapl = yf.Ticker("AAPL")

# 基本情報
info = aapl.info

infoから取得できる主な情報は以下の通りです。

  • 企業名(longName)
  • セクター(sector)
  • 業種(industry)
  • 時価総額(marketCap)
  • 発行済株式数(sharesOutstanding)
  • 設立国(country)
  • ウェブサイト(website)
  • 事業概要(longBusinessSummary)
  • など

3. 財務諸表データ

企業の財務諸表も取得できます。主な財務諸表としては

  • 損益計算書(Income Statement)
  • 貸借対照表(Balance Sheet)
  • キャッシュフロー計算書(Cash Flow)

があります。

# 損益計算書(四半期)
income_stmt_quarterly = aapl.quarterly_income_stmt

# 損益計算書(年次)
income_stmt_annual = aapl.income_stmt

# 貸借対照表(四半期)
balance_sheet_quarterly = aapl.quarterly_balance_sheet

# 貸借対照表(年次)
balance_sheet_annual = aapl.balance_sheet

# キャッシュフロー計算書(四半期)
cash_flow_quarterly = aapl.quarterly_cashflow

# キャッシュフロー計算書(年次)
cash_flow_annual = aapl.cashflow

これらの財務諸表からは、売上高、営業利益、純利益、総資産、負債、自己資本、営業キャッシュフローなど、投資判断に重要な財務指標を確認できます。

4. 配当情報

配当に関する情報も取得できます。

# 配当情報
dividends = aapl.dividends

# 配当利回り
dividend_yield = aapl.info['dividendYield']

# 配当金と株式分割の履歴
actions = aapl.actions

配当履歴からは過去の配当支払い日や配当金額、配当成長率などを分析できます。

5. 機関投資家の保有状況

機関投資家による株式保有状況も確認できます。

# 主要株主
major_holders = aapl.major_holders

# 機関投資家の保有状況
institutional_holders = aapl.institutional_holders

# 機関投資家の保有率
institutional_ownership = aapl.info.get('institutionPercent')

これにより、どの機関投資家がどれくらいの株式を保有しているかを把握できます。

6. アナリスト予想

アナリストによる業績予想や目標株価なども取得可能です。

# アナリストの推奨度
recommendations = aapl.recommendations

# アナリストの目標株価
target_price = aapl.info.get('targetMeanPrice')

# 予想EPS(1株当たり利益)
forward_eps = aapl.info.get('forwardEps')

7. オプション情報

株式オプションに関する情報も取得できます。

# 利用可能なオプションの満期日
expiration_dates = aapl.options

# 特定の満期日のオプションチェーン
options_chain = aapl.option_chain('2023-12-15')

# コールオプション
calls = options_chain.calls

# プットオプション
puts = options_chain.puts

オプションチェーンからは、行使価格、プレミアム、ボラティリティなどの情報を得られます。

8. 収益発表日程

企業の四半期決算発表のスケジュールも取得できます。

# 次回の収益発表日
next_earnings_date = aapl.info.get('earningsDate')

9. ESG(環境・社会・ガバナンス)スコア

近年重視されているESGに関する情報も取得可能です。

# サステナビリティスコア
esg_score = aapl.info.get('sustainabilityScore')

# 環境スコア
environmental_score = aapl.info.get('environmentScore')

# 社会スコア
social_score = aapl.info.get('socialScore')

# ガバナンススコア
governance_score = aapl.info.get('governanceScore')

10. 複数銘柄の一括取得

複数の銘柄のデータを一度に取得することも可能です。

import yfinance as yf

# 複数の銘柄を指定
tickers = yf.Tickers("AAPL MSFT GOOG")

# 各銘柄の情報を取得
apple_info = tickers.tickers['AAPL'].info
msft_info = tickers.tickers['MSFT'].info
goog_info = tickers.tickers['GOOG'].info

# 複数銘柄の株価ヒストリーを一括取得
hist = tickers.history(period="1mo")

取得したデータの活用方法

yfinanceで取得したデータは、Pythonの様々なライブラリと組み合わせて活用できます。

データ分析と可視化

pandas、matplotlib、seabornなどを使ってデータ分析や可視化が可能です。

import yfinance as yf
import matplotlib.pyplot as plt
import seaborn as sns

# データ取得
aapl = yf.Ticker("AAPL")
hist = aapl.history(period="1y")

# 株価チャートの作成
plt.figure(figsize=(12, 6))
plt.plot(hist.index, hist['Close'])
plt.title('Apple株価(過去1年)')
plt.xlabel('日付')
plt.ylabel('株価(USD)')
plt.grid(True)
plt.savefig('apple_stock_price.png')
plt.show()

# 日次リターンの分布
returns = hist['Close'].pct_change().dropna()
plt.figure(figsize=(10, 6))
sns.histplot(returns, kde=True)
plt.title('Apple株の日次リターン分布')
plt.xlabel('日次リターン')
plt.savefig('apple_returns_distribution.png')
plt.show()

投資指標の計算

取得したデータから様々な投資指標を計算できます。

import yfinance as yf
import numpy as np

# データ取得
aapl = yf.Ticker("AAPL")
hist = aapl.history(period="1y")
info = aapl.info

# ボラティリティ(標準偏差)の計算
returns = hist['Close'].pct_change().dropna()
volatility = returns.std() * np.sqrt(252)  # 年率換算
print(f"年間ボラティリティ: {volatility:.2%}")

# シャープレシオの計算(リスクフリーレートを1%と仮定)
risk_free_rate = 0.01
mean_return = returns.mean() * 252  # 年率換算
sharpe_ratio = (mean_return - risk_free_rate) / volatility
print(f"シャープレシオ: {sharpe_ratio:.2f}")

# PER(株価収益率)の計算
per = info.get('currentPrice', info.get('regularMarketPrice')) / info.get('trailingEps', 0)
print(f"PER: {per:.2f}")

# PBR(株価純資産倍率)の計算
pbr = info.get('currentPrice', info.get('regularMarketPrice')) / info.get('bookValue', 0)
print(f"PBR: {pbr:.2f}")

株式ポートフォリオのリスク分析

複数銘柄を組み合わせたポートフォリオのリスク分析も可能です。

import yfinance as yf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 複数銘柄のデータ取得
tickers = ['AAPL', 'MSFT', 'GOOG', 'AMZN', 'META']
data = yf.download(tickers, period="1y")['Adj Close']

# 日次リターンの計算
returns = data.pct_change().dropna()

# 相関行列の計算と可視化
correlation = returns.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(correlation, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('株式リターンの相関行列')
plt.savefig('stock_correlation.png')
plt.show()

# ポートフォリオのリスクとリターン(モンテカルロシミュレーション)
num_portfolios = 10000
results = np.zeros((3, num_portfolios))
weights_record = []

for i in range(num_portfolios):
    # ランダムなウェイトを生成
    weights = np.random.random(len(tickers))
    weights /= np.sum(weights)
    weights_record.append(weights)

    # ポートフォリオのリターンを計算
    portfolio_return = np.sum(returns.mean() * weights) * 252

    # ポートフォリオのボラティリティを計算
    portfolio_volatility = np.sqrt(np.dot(weights.T, np.dot(returns.cov() * 252, weights)))

    # シャープレシオを計算(リスクフリーレートを1%と仮定)
    sharpe_ratio = (portfolio_return - 0.01) / portfolio_volatility

    results[0,i] = portfolio_return
    results[1,i] = portfolio_volatility
    results[2,i] = sharpe_ratio

# 効率的フロンティアのプロット
plt.figure(figsize=(12, 8))
plt.scatter(results[1,:], results[0,:], c=results[2,:], cmap='viridis')
plt.colorbar(label='シャープレシオ')
plt.xlabel('リスク(ボラティリティ)')
plt.ylabel('リターン')
plt.title('ポートフォリオの効率的フロンティア')
plt.savefig('efficient_frontier.png')
plt.show()

注意点

yfinanceを使用する際は、以下の点に注意する必要があります。

  1. 公式APIではないこと
    yfinanceはYahoo Financeの公式APIではなく、ウェブスクレイピングに基づいています。そのため、Yahoo Finance側の仕様変更によってデータが取得できなくなる可能性があります。
  2. データの制限
    リアルタイムデータや詳細なマーケットデータには制限があります。特に、高頻度のアクセスを行うと一時的にIPがブロックされる可能性があります。
  3. データの精度
    取得されるデータが常に正確であるとは限りません。特に、調整後株価や特定の財務指標においては、他のソースと照合することをお勧めします。
  4. 使用目的
    yfinanceを商用目的で使用する場合は、Yahoo Financeの利用規約を確認してください。

まとめ

yfinanceは、Python環境で簡単に金融データを取得できる非常に便利なライブラリです。株価データだけでなく、企業の財務諸表、配当情報、アナリスト予想など、幅広い金融データを無料で取得できます。

投資分析や金融アプリケーション開発、データサイエンスプロジェクトなど、様々な用途に活用できるため、金融データを扱う際には大変役立つツールとなるでしょう。

本記事で紹介したコード例を参考に、ぜひyfinanceを使った分析にチャレンジしてみてください。今後も当ブログでは、yfinanceを活用した投資分析や売買シグナルについて書いていく予定をしています!

参考リンク

-プログラミング, 株式投資
-,