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
... ... ... ... ... ... ... ...
さあ、一緒にデータ取得の世界へ第一歩を踏み出しましょう!
yfinance
とは? 📈
2. 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 yf
やas 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
start
とend
に日付を文字列で指定するだけで、指定した期間の株価データ(日足)が綺麗に整形されたデータフレームとして取得できました。とても簡単ですね!
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
/end
とperiod
を使い分けると非常に便利です。
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側の制約でエラーになることがあるので注意してください。
yf.download()
4. 【Tips】複数の銘柄を一度に取得するこれまでは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
カラム(列)がClose
やHigh
といった項目でグループ化され、その下に各ティッカーコードがぶら下がる形でデータが格納されています。
比較分析を行う際に非常に便利な形式です。
5. 取得したデータの中身を見てみよう
ここまででデータの取得は完璧です。最後に、取得したデータフレームの各カラムが何を表しているのかを確認しておきましょう。
- Date: 日付。データフレームのインデックスになっています。
- Open: 始値(はじめね)。その日の取引が最初に成立した価格。
- High: 高値(たかね)。その日の取引で最も高かった価格。
- Low: 安値(やすね)。その日の取引で最も安かった価格。
- Close: 終値(おわりね)。その日の取引が最後に成立した価格。最も重要な指標の一つです。
- Volume: 出来高(できだか)。その日に売買が成立した株の総数。市場の活況度を示します。
- Dividends: 配当。企業が株主へ利益を分配した額。
- Stock Splits: 株式分割。1株を複数株に分割した記録。
これらのデータを組み合わせることで、様々な角度から市場を分析することが可能になります。
6. おわりに:データ取得は分析の第一歩
今回は、Pythonのyfinance
ライブラリを使って、驚くほど簡単に株価データを取得する方法を解説しました。
-
yf.Ticker()
で特定の銘柄のオブジェクトを作る -
.history()
メソッドでデータを取得する -
start/end
やperiod
で期間を柔軟に指定する -
interval
で日足、週足、月足を切り替える -
yf.download()
で複数の銘柄を一度に取得する
これらの基本的な使い方をマスターするだけで、あなたの分析の幅は大きく広がります。
株価データの取得は、あくまでも分析の第一歩に過ぎません。
今回取得したデータを元に、次回以降の記事では
matplotlib
やseaborn
を使った株価チャートの可視化- 移動平均線などのテクニカル指標の計算と描画
といった、より実践的な分析手法について解説していく予定です。
ぜひ、この記事を参考に色々な銘柄のデータを取得して、データ分析の世界を楽しんでみてください!
最後までお読みいただきありがとうございました。
Discussion