こんにちは、デジタルボーイです。普段はクライアントのデータ分析を仕事としています。株分析は専門ではありませんが、趣味で株などの投資分析を行っています。今回はpythonで株分析を実施するために、必要な株データを取得する方法について解説したいと思います。

デジタルボーイです。
データサイエンス歴20年以上のおっさんです。中小企業診断士として、データサイエンス、WEBマーケティング、SEOに関するデータ分析、コンサルティングの仕事をしています。自己紹介の詳細はコチラ
Pythonから取得する無料API :yfinanceとは
Python株分析を行う場合、たぶん最もよく使われている株価取得ライブラリが yfinance
だと思います。学術論文などでの株分析や株価予測でもyfinanceが多く使われています。yfinanceはYahoo Financeの非公式APIという位置付けで、手軽に株価や為替、株価指数などを取得できるところがおすすめです。
yfinanceの概要
yfinance の特徴と対応範囲
- 米国株、日本株、ETF、通貨ペア、仮想通貨、株価指数などに対応
- 銘柄コードを指定するだけで、過去の時系列データが簡単に取得可能
- 分足・日足・週足などの足種も指定できる
- 一部の指標や企業情報も取得可能(配当・PERなど)
国外の株価データ系APIでは日本株は対象になっていないケースが結構あるんですが、yfinanceでは日本株も取得できる点がとてもいいですね!また、基本的には日足データでの取得が可能ですが、1分足などの細かい足の取得も可能でこれまたおすすめのポイントです。
yfinanceの導入方法
では、早速yfinanceを使ってみましょう。まずは、インストールからです。
インストール方法
もし、pandasやnumpyをインストールしていない場合、先にインストールをしておきましょう。


yfinanceはpipからインストール可能です。ターミナルから次のコマンドを実行しましょう。
pip install yfinance
これでyfinanceはインストールできました!
基本的な使い方
とりあえず、次のコードを実行してみてください。これは、トヨタ自動車(7203.T)の株価データを2023年以降で、日足で取得する例です。
import yfinance as yf
# データ取得
df = yf.download("7203.T", start="2023-01-01", end="2023-12-31")
# データ表示
df.head()
コードの内容はこんな感じです。
import yfinance as yf
Pythonで yfinance ライブラリを読み込みます。df = yf.download("7203.T", start="2023-01-01", end="2023-12-31")
トヨタの株価データを2023年1月1日〜12月31日まで取得します。print(df.head())
データの最初の5行を確認します。
こんな感じでアウトプットが出たと思います。

yfinanceでデータを取得した場合、pandasのデータフレームが渡されています。このデータをよく見ると、上からヘッダーが3行並んでいると思います。[Priceから始まる行、Tickerから始まる行、Dateと書かれてある行]。

このままでは分析に使いにくいのでヘッダーを1行に次の処理でまとめましょう。
df = df.reset_index().copy()
df.columns = ['Date', "Close", "High", "Low", "Open", "Volume"]
df
この処理は、階層構造になっているヘッダーを一度リセットして(df.reset_index( ))さらに、カラム名を[‘Date’, “Close”, “High”, “Low”, “Open”, “Volume”]として、新たに付与しています。こんな感じになっていると思います。

出力されたデータには以下のカラムが含まれます。
- Date:株価の日付
- Close:終値←株価
- High:高値
- Low:安値
- Open:始値
- Volume:出来高
たったこれだけのコードで、株価分析のための準備ができるのはすごく便利ですね!
yfinanceのAPI設定方法
もうすこし、yfinacneの使い方についてみていきましょう。ちなみに公式ドキュメントはこちらになります。
1. 銘柄をを指定する
例えば、ファーストリテーリング(ユニクロ)の株価を取得したい場合は次のように”9983.T”を指定し、実行します。
df = yf.download("9983.T", start="2023-01-01", end="2023-12-31")
この「9983.T」は何かというと、4桁の銘柄コードに東京証券取引を示す「T」を合体させたものです。このように、download()の引数では、一番初めに銘柄コードに「.T」を加えたものを指定することで、対象の銘柄の株価が取得できます。
ちなみに、銘柄コードについてはインターネットで簡単に検索できます。例えば、次の図は「みんかぶ」という株式ポータルサイトのトップ画面です。こんな感じで会社名を入れるとコードが検索できます。

2. 期間を指定する
df = yf.download("7203.T", period="1mo", interval="1d")
必要な期間はperiodで指定し、必要な足(1分足、日足、月足)についてはintervalで指定します。指定する値はこんな感じです。
period
: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, などで期間を指定。interval
:1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo(足の指定)
例えば3年間だったらperiod="3y"
となります。また、5分足が必要ならinterval="5m"
となります。
3. 複数銘柄をまとめて取得
複数の銘柄を取得したい場合はこんな感じで、第一引数にリスト形式で銘柄コードを指定し、取得可能です。
df = yf.download(["7203.T", "6758.T"], start="2023-01-01", end="2023-12-31")
df
アウトプットは以下のように、2行目のTickerというのが銘柄コードに該当します。

4. 企業情報を取得
株価だけでなく企業情報も取得可能です。
ticker = yf.Ticker("7203.T")
# 企業概要
info = ticker.info
info
アウトプットはこんな感じです。

この中から必要な情報を抜き取るといいでしょう。
例えばこんな感じで、infoはdict型として取得できるので、infoにkeyを指定することで、必要な情報を取得可能です。

主なkeyと内容は以下の通りです。
キー名 | 説明 |
---|---|
marketCap | 時価総額(Market Capitalization) |
enterpriseValue | 企業価値(株式+負債−現金) |
trailingPE | PER(過去12ヶ月の株価収益率) |
forwardPE | 予想PER(今後の利益予測に基づくPER) |
pegRatio | PEGレシオ(PER÷利益成長率) |
priceToBook | PBR(株価純資産倍率) |
priceToSalesTrailing12Months | 売上高に対する株価比率(P/Sレシオ) |
bookValue | 1株あたり純資産 |
beta | 株価の市場変動感度 |
trailingEps | 過去12ヶ月のEPS(1株あたり利益) |
forwardEps | 今後予測されるEPS |
earningsQuarterlyGrowth | 四半期ごとの利益成長率 |
revenueQuarterlyGrowth | 四半期ごとの売上成長率 |
grossMargins | 粗利益率 |
ebitdaMargins | EBITDAマージン |
operatingMargins | 営業利益率 |
profitMargins | 純利益率 |
dividendRate | 年間配当額(1株あたり) |
dividendYield | 配当利回り |
payoutRatio | 配当性向 |
fiveYearAvgDividendYield | 5年平均配当利回り |
lastDividendValue | 直近の配当額 |
lastDividendDate | 直近の配当支払日 |
exDividendDate | 配当落ち日 |
yfinanceがエラーとなる時
yfinanceを使っていると、たまにデータ取得ができなくなる時があります。エラー内容はバラバラですが「429 Client Error: Too Many Requests for url: 〜」
などが出ることがあります。実行しているコードが間違っていないのに、このようなエラーが出る時は、とりあえず、yfinanceをアップデートすると治ることがよくあります。アップデートの方法は以下の通りです。
pip install -U yfinance
まとめ
以上、株価のデータ取得を無料で実施するためのツール、yfinanceの使い方でした。それでは、よいデータ分析ライフを!