PythonでYahoo Financeから株価データを取得しSQLiteデータベースに保存する方法
このブログ記事では、Pythonを使用して株価データをダウンロードし、SQLiteデータベースに保存するスクリプトについて詳しく説明します。株式投資やデータ分析に興味がある方にとって、このスクリプトは非常に便利です。
以下では、各コードブロックを詳細に説明し、使い方を解説します。
目次
必要なライブラリをインポート
まず、必要なPythonライブラリをインポートします。このスクリプトでは、yfinance(株価データの取得)とsqlite3(SQLiteデータベースへのアクセス)を使用します。
import yfinance as yf
import sqlite3
from datetime import datetime, timedelta
データベースへの接続とテーブルの作成
次に、SQLiteデータベースに接続し、株価データを格納するためのテーブルを作成します。テーブルには、ティッカーシンボル、日付、オープン、ハイ、ロー、クローズ、調整後クローズ、および取引量の列が含まれます。
# データベースへの接続
db_path = '/app/database/stock.db'
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# テーブルの作成
cursor.execute('''
CREATE TABLE IF NOT EXISTS stock_data (
Ticker TEXT,
Date TEXT,
Open REAL,
High REAL,
Low REAL,
Close REAL,
Adj_Close REAL,
Volume INTEGER
)
''')
取得するティッカーシンボルの指定
取得する株価データのティッカーシンボルを指定します。このスクリプトでは、"VT"、"VYM"、および"VTI"の3つのティッカーシンボルを取得します。
# 取得するティッカーシンボルのリスト
tickers = ["VT", "VYM", "VTI"]
株価データの取得とデータベースへの格納
指定したティッカーシンボルごとに、過去30日間の株価データをダウンロードし、データベースに格納します。データは日付、オープン、ハイ、ロー、クローズ、調整後クローズ、および取引量の情報を含みます。
# 各ティッカーシンボルに対してデータを取得して保存
for ticker in tickers:
end_date = datetime.now().strftime('%Y-%m-%d')
start_date = (datetime.now() - timedelta(days=30)).strftime('%Y-%m-%d')
data = yf.download(tickers=ticker, start=start_date, end=end_date)
data.reset_index(inplace=True)
# データの挿入(Ticker列も追加)
for _, row in data.iterrows():
converted_row = [ticker] + [str(value) if isinstance(value, datetime) else value for value in row]
cursor.execute('''
INSERT OR REPLACE INTO stock_data
(Ticker, Date, Open, High, Low, Close, Adj_Close, Volume)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
''', converted_row)
データベースへの変更をコミットし、接続を閉じる
最後に、データベースへの変更をコミットし、データベース接続を閉じます。データベースへの変更をコミットすることで、データが永続的に保存されます。
# コミットして接続を閉じる
conn.commit()
conn.close()
まとめ
このPythonスクリプトを実行することで、指定したティッカーシンボルの株価データがSQLiteデータベースに保存されます。
このデータは、株式のトレンド分析、パフォーマンス評価、およびカスタムレポートの生成など、さまざまな用途に使用できます。
このスクリプトを使えば、株式市場に関するデータを手軽に収集し、分析できるようになります。