Pythonとyfinanceでできること
Pythonを使うと、Yahoo Financeが提供している株価データをコードから取得できます。国内・海外を問わず、上場銘柄の過去の株価や出来高などを手軽に扱えるのが特徴です。
この記事では、yfinanceライブラリを使った株価データの取得方法を解説します。インストールから基本的な取得方法、よくある使い方、注意点まで順に説明していきます。
yfinanceとは
yfinanceは、Yahoo FinanceのデータへアクセスするためのオープンソースのPythonライブラリです。APIキーなしで株価の履歴データや企業情報を取得できます。
取得できる主なデータは以下のとおりです。
- 過去の株価(始値・高値・安値・終値)
- 出来高
- 配当・株式分割の履歴
- 企業の基本情報(時価総額、PERなど)
なお、Yahoo Financeのデータは非公式なアクセスを前提とした仕組みであるため、仕様が変わることがあります。本番環境での利用や自動収集には注意が必要です。
インストール方法
yfinanceはpipでインストールします。
pip install yfinance
インストール後はimport yfinance as yfとして読み込みます。
基本の使い方
Tickerオブジェクトで銘柄を指定する
まず、取得したい銘柄のティッカーシンボルを指定します。
import yfinance as yf
ticker = yf.Ticker("AAPL")
"AAPL"はAppleのティッカーシンボルです。日本株の場合は"7203.T"(トヨタ自動車)のように、ティッカーの末尾に.Tを付けます。
historyで過去の株価を取得する
.history()メソッドを使うと、指定した期間の株価データをDataFrame形式で取得できます。
import yfinance as yf
ticker = yf.Ticker("AAPL")
df = ticker.history(period="1mo")
print(df.head())
Open High Low Close Volume Dividends Stock Splits
Date
2026-05-29 198.230003 200.759995 197.600006 199.610001 55123400 0.0 0.0
2026-06-02 200.100006 202.350006 199.479996 201.899994 48921000 0.0 0.0
...
periodパラメータには以下の値を指定できます。
| 値 | 期間 |
|---|---|
"1d" | 1日 |
"5d" | 5日 |
"1mo" | 1ヶ月 |
"3mo" | 3ヶ月 |
"6mo" | 6ヶ月 |
"1y" | 1年 |
"2y" | 2年 |
"5y" | 5年 |
"max" | 取得可能な全期間 |
日付を指定して取得する
期間を”2024-01-01″のような形式で指定することもできます。
import yfinance as yf
ticker = yf.Ticker("7203.T")
df = ticker.history(start="2024-01-01", end="2024-06-30")
print(df.head())
Open High Low Close Volume Dividends Stock Splits
Date
2024-01-04 2700.0 2763.5 2695.0 2755.5 11823200 0.0 0.0
...
startとendの両方を指定すると、その範囲のデータを取得できます。endの日付は含まれない点に注意してください。
downloadで複数銘柄を一括取得する
基本的な書き方
yf.download()関数を使うと、複数銘柄のデータをまとめて取得できます。
import yfinance as yf
df = yf.download(["AAPL", "MSFT", "GOOGL"], period="3mo")
print(df.head())
Price Close ...
Ticker AAPL GOOGL MSFT ...
Date
2026-03-31 170.33 164.21 382.14 ...
...
複数銘柄を指定するとMultiIndex形式のDataFrameが返ります。1銘柄だけ指定するとシンプルなDataFrameになります。
特定の列だけ取り出す
終値(Close)だけを取り出す場合は以下のようにします。
import yfinance as yf
df = yf.download(["AAPL", "MSFT"], period="1mo")
close = df["Close"]
print(close.head())
Ticker AAPL MSFT
Date
2026-06-02 201.90 415.23
2026-06-03 200.45 413.80
...
よくある使い方
株価をグラフで表示する
取得したデータはmatplotlibでそのまま描画できます。
import yfinance as yf
import matplotlib.pyplot as plt
ticker = yf.Ticker("AAPL")
df = ticker.history(period="6mo")
plt.figure(figsize=(10, 4))
plt.plot(df.index, df["Close"])
plt.title("AAPL Close Price")
plt.xlabel("Date")
plt.ylabel("Price (USD)")
plt.tight_layout()
plt.show()
企業情報を取得する
.info属性で企業の基本情報を辞書形式で取得できます。
import yfinance as yf
ticker = yf.Ticker("AAPL")
info = ticker.info
market_cap = info.get("marketCap") or 0
pe_ratio = info.get("trailingPE") or "N/A"
print(f"時価総額: {market_cap:,}")
print(f"PER: {pe_ratio}")
時価総額: 3050000000000
PER: 32.5
.infoから取れる項目は銘柄によって異なります。値がない場合はNoneが返ることもあるため、get()とデフォルト値を組み合わせると安全です。
配当データを取得する
配当の履歴は.dividendsで取得できます。
import yfinance as yf
ticker = yf.Ticker("AAPL")
dividends = ticker.dividends
print(dividends.tail())
Date
2025-08-09 0.25
2025-11-07 0.25
2026-02-06 0.25
2026-05-09 0.25
Name: Dividends, dtype: float64
よくあるミスと注意点
日本株のティッカーに .T を忘れる
日本の上場銘柄を取得するときは、ティッカーの末尾に.Tが必要です。
# NG:データが取得できないか、別の銘柄のデータが返る可能性がある
ticker = yf.Ticker("7203")
# OK:トヨタ自動車
ticker = yf.Ticker("7203.T")
データが空のDataFrameになる
ティッカーシンボルが間違っている場合や、指定した期間にデータがない場合は空のDataFrameが返ります。
import yfinance as yf
ticker = yf.Ticker("INVALID_TICKER")
df = ticker.history(period="1mo")
if df.empty:
print("データが取得できませんでした。ティッカーシンボルを確認してください。")
取得後にdf.emptyで確認する習慣をつけると、エラーに気づきやすくなります。
start/endの日付指定ミス
history(start=..., end=...)のend日付は取得範囲に含まれません。たとえばend="2024-06-30"とすると、6月29日分までのデータが返ります。
import yfinance as yf
ticker = yf.Ticker("AAPL")
# 2024年6月30日のデータも含めたい場合は end を翌日にする
df = ticker.history(start="2024-06-01", end="2024-07-01")
Yahoo Financeの仕様変更でエラーになる場合
yfinanceはYahoo Financeの非公式なデータ構造を利用しているため、Yahoo Finance側の変更でデータが取れなくなることがあります。エラーが出た場合はpip install --upgrade yfinanceでライブラリを最新版に更新すると解消されることが多いです。
pip install --upgrade yfinance
AI時代での補足
AIにデータ分析のコードを書いてもらう場面が増えていますが、yfinanceの仕様変更はAIの知識に反映されていないことがあります。取得できるか確認するコードを自分で読めると、AIの出力が古い書き方かどうかを判断しやすくなります。
まとめ
yfinanceを使うと、Pythonから株価データを手軽に取得できます。この記事で紹介した内容を整理すると以下のとおりです。
pip install yfinanceでインストールするyf.Ticker("ティッカー").history(period=...)で過去の株価を取得するyf.download([...], period=...)で複数銘柄をまとめて取得する- 日本株は末尾に
.Tを付ける - データが空の場合は
df.emptyで確認する
取得したデータはpandasのDataFrameとして扱えるため、集計やグラフ描画にそのまま使えます。時系列データの分析手法については、Python 時系列データ分析の入門で詳しく解説しています。