まず、「株価」を取得する ― yfinance から parquet 保存、自作アプリまで
![]()
株価は yfinance から都度ロードして表示することもできますが、取得制限やパフォーマンスを考えると、取得した株価データは parquet で保存しておくのがベストプラクティスです(とくに 5 分足は約 60 日で消えるため、貯める価値が高い)。
本記事では、
- yfinance から株価を取得する
- parquet 形式で保存する
- 5分足チャートを描画してみる
までを通します。それでは、データ取得編の出発点です。
なぜ、ローカルに株価を貯めるのか
yfinance で取れる株価は、足の種類で取得できる期間が大きく違います。
| 足 | 取得できる期間 | 主な用途 |
|---|---|---|
| 日足 | 10 年以上 | 長期トレンド・テクニカル |
| 5分足 | 約 60 日が上限 | 寄付・引け・場中の動き |
- 5分足は「今貯めないと将来取れない」ので、定期取得して parquet に追記する価値が高い
- parquet は列指向・型保持・高圧縮。CSVより読み書きが速く、ファイルも小さい
⚠️ 貯めたデータは定期的に棚卸しを。上場廃止・超低流動性の銘柄が混ざると、騰落率や統計がゆがみます。また、株式分割・配当の調整として、
auto_adjust=Trueを既定にします。
yfinance で株価を取得する
東証銘柄は {コード}.T で指定します(ENEOS = 5020.T)。
import yfinance as yf
# 日足(長期)
df_d = yf.download("5020.T", period="2y", interval="1d", auto_adjust=True)
# 5分足(直近のみ・約60日が上限)
df_5 = yf.download("5020.T", period="60d", interval="5m", auto_adjust=True)
最新値だけ欲しいときは fast_info が高速です。
yf.Ticker("5020.T").fast_info.get("lastPrice")
株価は parquet で保存する
取得した DataFrame は、そのまま parquet に書き出せます。
df_5.to_parquet("data/prices/stocks/5min/5020.parquet")
5分足は 週次で追記 して貯めます(5分足は約 60 日分残るので、週 1 回の取得で十分です)。既存ファイルに連結し、重複行(同じ時刻)を落とすだけ。
import pandas as pd
path = "data/prices/stocks/5min/5020.parquet"
new = df_5 # 新しく取得した5分足
old = pd.read_parquet(path)
merged = pd.concat([old, new])
merged = merged[~merged.index.duplicated(keep="last")].sort_index()
merged.to_parquet(path)
これを週末バッチで回せば、5分足が途切れず積み上がっていきます。保存・追記の全体像は文末の Python コード(GitHub)を参照してください。
まとめ
- 日足は 10 年以上取れるが、5分足は約 60 日で消える ― 今貯めないと将来手に入らない
- 保存は parquet 一択 ― 型を保ったまま、CSVより速く・小さく
- 週次バッチで 追記(連結 → 重複落とし)すれば、5分足が途切れず積み上がる
- ここで貯めた 5分足が、後の記事(決算発表直後の値動き・超短期の検証)の土台になる
Python コード
本記事のチャート画像・アプリ・データ取得・成形スクリプトは、すべて GitHub に公開しています。データは提供元の利用規約により再配布できませんが、データを各自取得すれば、この記事と同じものが再現できます(動かし方はリポジトリの README 参照)。
📌 自作アプリ紹介
Streamlit で作成したアプリです。チャート描画は Plotly、株価は yfinance で取得して parquet に保存しています。
- 株価チャートと騰落率テーブルの日付を揃えて表示し、値動きと前日比を対応づけて読める
- 縦の境界線でギャップアップ・ギャップダウンを視覚的に把握しやすく
- 銘柄コードを カンマ・スペース・改行で区切って 複数銘柄を入力できる

なお、株価をあらかじめ貯めなくても、チャートは表示できます。yfinance から直接取得して描く簡易版(app_simple.py)もおまけ で同梱しています。