🐙

Pythonとyfinanceで始める株価分析入門!わずか数行のコードで株価データを取得しよう

に公開

Pythonとyfinanceで始める株価分析入門!わずか数行のコードで株価データを取得しよう

1. はじめに:なぜプログラミングで株価データを扱うのか? 🤔

「投資に興味があるけど、何から始めればいいかわからない」
「プログラミングを勉強したけど、何か面白いテーマで実践してみたい」

もしあなたがそう思っているなら、Pythonを使った株価分析は最高のテーマかもしれません。

証券会社のアプリやWebサイトでも株価情報は見られますが、プログラミングを使うと、以下のようなメリットがあります。

  • 自分だけの分析手法を試せる: 複数のテクニカル指標を組み合わせたり、独自の条件でスクリーニング(銘柄の絞り込み)したりと、分析の自由度が格段に上がります。
  • 分析を自動化できる: 毎日決まった時間に特定の銘柄のデータを収集し、条件に合致したら通知する、といった処理を自動化できます。
  • データサイエンスのスキルが身につく: 株価という実践的なデータを扱うことで、データ処理や可視化のスキルが楽しく、かつ効率的に身につきます。

「でも、株価データって取得するのが難しそう…」と感じるかもしれません。

ご安心ください!この記事で紹介する**yfinance**というPythonライブラリを使えば、驚くほど簡単に、わずか数行のコードでプロでも利用するような詳細な株価データを取得できます。

この記事は、プログラミング初心者や株価分析に初めて挑戦する方でも理解できるように、ステップ・バイ・ステップで株価データの取得方法を解説します。

最終的には、下のようなpandasのデータフレーム形式で、指定した銘柄の株価データを取得できるようになるのがゴールです。

Date
2024-01-04    3025.0  3038.0  2981.0  2991.0  19198600    0.0 0.0
2024-01-05    3000.0  3005.0  2963.0  2985.0  18151200    0.0 0.0
2024-01-09    3025.0  3110.0  3022.0  3109.0  21648400    0.0 0.0
...              ...     ...     ...     ...       ...    ... ...

さあ、一緒にデータ取得の世界へ第一歩を踏み出しましょう!

2. yfinanceとは? 📈

yfinanceは、その名の通り、Yahoo Financeが提供している豊富な金融データへ手軽にアクセスするためのPythonライブラリです。

もともとpandas-datareaderというライブラリの一部として提供されていましたが、Yahoo FinanceのAPI仕様変更により一時的に使えなくなりました。その後、有志によって問題を修正し、独立したライブラリとして開発が続けられています。

yfinanceの素晴らしい点は以下の通りです。

  • 完全無料: 追加の費用やAPIキーの登録は一切不要です。
  • インストールが簡単: pipコマンド一つで数秒でインストールが完了します。
  • 情報が豊富: 株価の四本値(始値、高値、安値、終値)や出来高はもちろん、企業の財務情報や配当履歴なども取得できます。

インストール方法

インストールは非常に簡単です。
ターミナルやコマンドプロンプト(Jupyter NotebookやGoogle Colabの場合はセル)で以下のコマンドを実行するだけです。

pip install yfinance

これで、株価データを取得するための準備は完了です。早速使ってみましょう!

3. ステップ・バイ・ステップで株価データを取得してみよう

ここからは、実際にコードを書きながら、特定の銘柄の株価データを取得する手順を解説していきます。
今回は、日本の代表的な企業であるトヨタ自動車の株価を例に進めていきましょう。

Step 1: ライブラリのインポート

まず、プログラムの最初に、今回使用するライブラリをインポートします。
yfinanceは、データを取得するために使います。取得したデータはpandasデータフレームという形式で扱われるため、pandasも一緒にインポートするのが一般的です。

import yfinance as yf
import pandas as pd

as yfas pdは、ライブラリに別名をつけて、今後のコードで短く書けるようにするためのおまじないです。

Step 2: 銘柄を指定する (ティッカーコード)

次に、どの企業の株価データを取得したいかを指定します。
yfinanceでは、**ティッカーコード(Ticker Symbol)**という、金融商品を一意に識別するためのコードを使います。

  • トヨタ自動車: 7203.T
  • ソニーグループ: 6758.T
  • 日経平均株価: ^N225
  • 米Apple: AAPL

ポイントは、日本の証券取引所に上場している銘柄の場合、4桁の証券コードの後ろに.Tをつけることです。

yf.Ticker()という関数を使って、トヨタ自動車(7203.T)の情報を扱うためのオブジェクトを作成しましょう。

# トヨタ自動車のティッカーコードを指定
ticker_code = '7203.T'

# Tickerオブジェクトを作成
toyota = yf.Ticker(ticker_code)

このtoyotaオブジェクトを通じて、様々なデータを取得することができます。

Step 3: 期間を指定して株価データを取得する

いよいよ株価データを取得します。最も基本的な方法は、.history()メソッドを使って、開始日と終了日を指定する方法です。

例えば、2024年の年初から6月末までのデータを取得してみましょう。

# 取得期間を指定してデータを取得
# start: 開始日, end: 終了日
df_toyota = toyota.history(start='2024-01-01', end='2024-06-30')

# 取得したデータの最初の5行を表示
print(df_toyota.head())

実行結果:

                   Open     High      Low    Close      Volume  Dividends  Stock Splits
Date
2024-01-04 00:00:00+09:00  2634.5  2646.00  2610.50  2623.50  19198600.0        0.0           0.0
2024-01-05 00:00:00+09:00  2620.0  2625.50  2600.00  2613.50  18151200.0        0.0           0.0
2024-01-09 00:00:00+09:00  2651.0  2711.00  2647.00  2710.00  21648400.0        0.0           0.0
2024-01-10 00:00:00+09:00  2700.0  2718.50  2673.50  2709.00  15359700.0        0.0           0.0
2024-01-11 00:00:00+09:00  2712.0  2717.49  2677.00  2685.00  14592400.0        0.0           0.0

startendに日付を文字列で指定するだけで、指定した期間の株価データ(日足)が綺麗に整形されたデータフレームとして取得できました。とても簡単ですね!

Step 4: 「過去◯ヶ月分」のように相対的な期間を指定する

毎回日付を指定するのは少し面倒な場合もあります。そんなときはperiod引数が便利です。
periodを使えば、「今日から遡って過去1ヶ月分」や「過去3年分」といった指定が可能です。

# periodを使って過去3ヶ月分のデータを取得
df_period = toyota.history(period='3mo')

# 最後の5行を表示して、直近のデータが取れていることを確認
print(df_period.tail())

実行結果例 (実行日によって内容は変わります):

                         Open     High      Low    Close      Volume  Dividends  Stock Splits
Date
2025-08-25 00:00:00+09:00  3290.0  3329.0  3281.0  3304.0  11342500.0        0.0           0.0
2025-08-26 00:00:00+09:00  3312.0  3316.0  3282.0  3300.0   9192400.0        0.0           0.0
2025-08-27 00:00:00+09:00  3300.0  3355.0  3295.0  3351.0  11195700.0        0.0           0.0
2025-08-28 00:00:00+09:00  3335.0  3338.0  3301.0  3315.0   8692600.0        0.0           0.0
2025-08-29 00:00:00+09:00  3333.0  3348.0  3321.0  3331.0   9421500.0        0.0           0.0

periodで使える主な期間の指定方法は以下の通りです。

  • 1d, 5d (日)
  • 1mo, 3mo, 6mo (月)
  • 1y, 2y, 5y, 10y (年)
  • ytd (年初来)
  • max (取得可能な全期間)

分析の目的に応じてstart/endperiodを使い分けると非常に便利です。

Step 5: 足(日足・週足・月足)を変更する

これまでは特に指定しなかったので、データは日足(1日ごとの値動き)で取得されていました。
しかし、中期的なトレンドを見たいときは
週足
、長期的な視点では月足を使いたい場面もあります。

データの時間間隔(足)を変更するには、interval引数を指定します。

# intervalを '1wk' にして週足データを取得
df_weekly = toyota.history(period='1y', interval='1wk')

print(df_weekly.head())

実行結果:

                         Open     High      Low    Close      Volume  Dividends  Stock Splits
Date
2024-09-02 00:00:00+09:00  3309.0  3378.0  3289.0  3378.0  53282200.0        0.0           0.0
2024-09-09 00:00:00+09:00  3385.0  3449.0  3363.0  3429.0  57973100.0        0.0           0.0
2024-09-16 00:00:00+09:00  3429.0  3448.0  3382.0  3411.0  31412100.0        0.0           0.0
2024-09-23 00:00:00+09:00  3385.0  3420.0  3290.0  3294.0  54050200.0        0.0           0.0
2024-09-30 00:00:00+09:00  3285.0  3305.0  3191.0  3210.0  71186800.0        0.0           0.0

Dateが週の初めの日付になっていることがわかりますね。
intervalには以下のような値を指定できます。

  • 分足: 1m, 5m, 15m, 30m, 60m, 90m
  • 時間足: 1h
  • 日足: 1d (デフォルト)
  • 週足: 1wk
  • 月足: 1mo

ただし、あまりに細かい粒度(例: 1分足)のデータを長期間(例: 5年分)取得しようとすると、Yahoo Finance側の制約でエラーになることがあるので注意してください。

4. 【Tips】複数の銘柄を一度に取得するyf.download()

これまではyf.Ticker()を使い、1つの銘柄のデータを取得してきました。
しかし、業界内の競合他社と比較したい場合など、複数の銘柄のデータを一度に取得したいケースもあります。

そんな時に便利なのがyf.download()関数です。
ティッカーコードをリスト形式で渡すだけで、複数の銘柄のデータをまとめて取得できます。

例として、トヨタ自動車(7203.T)と本田技研工業(7267.T)の株価を同時に取得してみましょう。

# 取得したいティッカーコードのリストを作成
tickers = ['7203.T', '7267.T']

# 複数の銘柄のデータをダウンロード
df_multi = yf.download(tickers, start='2024-06-01', end='2024-06-30')

print(df_multi.head())

実行結果:

                   Close                 High                  Low                 Open                Volume
                7203.T     7267.T     7203.T     7267.T     7203.T     7267.T     7203.T     7267.T         7203.T        7267.T
Date
2024-06-03  3262.000000  1712.500000  3271.000000  1719.000000  3219.000000  1688.000000  3221.000000  1694.000000  20486900.0  19034900.0
2024-06-04  3281.000000  1716.000000  3304.000000  1728.500000  3255.000000  1705.500000  3270.000000  1710.000000  17933900.0  17524800.0
2024-06-05  3242.000000  1687.000000  3302.000000  1725.000000  3242.000000  1686.000000  3295.000000  1720.000000  15317400.0  19983400.0
2024-06-06  3236.000000  1686.000000  3247.000000  1692.000000  3212.000000  1673.500000  3230.000000  1681.500000  13511100.0  18573200.0
2024-06-07  3215.000000  1690.000000  3224.000000  1693.000000  3182.000000  1668.000000  3224.000000  1688.500000  16428700.0  21323300.0

カラム(列)がCloseHighといった項目でグループ化され、その下に各ティッカーコードがぶら下がる形でデータが格納されています。
比較分析を行う際に非常に便利な形式です。

5. 取得したデータの中身を見てみよう

ここまででデータの取得は完璧です。最後に、取得したデータフレームの各カラムが何を表しているのかを確認しておきましょう。

  • Date: 日付。データフレームのインデックスになっています。
  • Open: 始値(はじめね)。その日の取引が最初に成立した価格。
  • High: 高値(たかね)。その日の取引で最も高かった価格。
  • Low: 安値(やすね)。その日の取引で最も安かった価格。
  • Close: 終値(おわりね)。その日の取引が最後に成立した価格。最も重要な指標の一つです。
  • Volume: 出来高(できだか)。その日に売買が成立した株の総数。市場の活況度を示します。
  • Dividends: 配当。企業が株主へ利益を分配した額。
  • Stock Splits: 株式分割。1株を複数株に分割した記録。

これらのデータを組み合わせることで、様々な角度から市場を分析することが可能になります。

6. おわりに:データ取得は分析の第一歩

今回は、Pythonのyfinanceライブラリを使って、驚くほど簡単に株価データを取得する方法を解説しました。

  • yf.Ticker() で特定の銘柄のオブジェクトを作る
  • .history() メソッドでデータを取得する
  • start/endperiod で期間を柔軟に指定する
  • interval で日足、週足、月足を切り替える
  • yf.download() で複数の銘柄を一度に取得する

これらの基本的な使い方をマスターするだけで、あなたの分析の幅は大きく広がります。
株価データの取得は、あくまでも分析の第一歩に過ぎません。

今回取得したデータを元に、次回以降の記事では

  • matplotlibseabornを使った株価チャートの可視化
  • 移動平均線などのテクニカル指標の計算と描画

といった、より実践的な分析手法について解説していく予定です。
ぜひ、この記事を参考に色々な銘柄のデータを取得して、データ分析の世界を楽しんでみてください!

最後までお読みいただきありがとうございました。

Discussion