はじめに
こんにちは。システムコンサルタントとして働きながら、個人開発を行っている管理人です。
皆さんは株式投資の銘柄分析をどのように行っていますか? 「株探」や「Yahoo!ファイナンス」を毎日巡回し、気になる銘柄のPERやチャートを手動でチェックするのは非常に時間がかかります。特に兼業投資家にとって、日々の市場の変化をすべて手作業で追うのは限界があります。
そこで今回は、本業のエンジニアスキルを活かして、**「Pythonを使った日本株データの収集・分析自動化」**に取り組みました。 単にデータを取得するだけでなく、Google Driveに自動アップロードし、生成AI(NotebookLMなど)で分析しやすい環境を作るまでの実装ログを共有します。
今回構築したシステムの全体像
今回作成したのは、以下のフローで動作するPythonスクリプトです。
- データ収集: 指定した銘柄リスト(監視銘柄)の株価・財務データを取得
- データ加工: Pandasを使って分析しやすい形(CSV)に整形・テクニカル指標の計算
- クラウド連携: Google Drive API経由で指定のフォルダへ自動アップロード
これにより、毎朝スクリプトを走らせるだけで、最新の分析用データがクラウド上に用意される状態を作りました。
使用した技術スタック
- 言語: Python 3.12
- データ処理: Pandas, NumPy
- データ取得: yfinance(またはスクレイピング)
- API連携: PyDrive2 (Google Drive API wrapper)
実装のポイント①:Pandasによるデータ整形
データ取得において重要なのは、「取得した生データをいかに比較しやすい形にするか」です。 単なる終値だけでなく、移動平均線や乖離率などのテクニカル指標もこの段階で計算させてしまいます。
以下は、データ処理部分の簡易的なコード例です。
Python
import pandas as pd
import numpy as np
# 実際のデータ取得ライブラリをインポート
def process_stock_data(ticker_list):
df_result = pd.DataFrame()
for ticker in ticker_list:
# ここでデータ取得処理(例: 直近1年分のデータ)
# data = fetch_data(ticker)
# 移動平均線の計算(例:25日線)
data['SMA_25'] = data['Close'].rolling(window=25).mean()
# 乖離率の計算
data['Deviation_Rate'] = (data['Close'] - data['SMA_25']) / data['SMA_25'] * 100
# 最新日のデータのみを抽出して結果に追加
latest_data = data.iloc[-1:]
latest_data['Ticker'] = ticker
df_result = pd.concat([df_result, latest_data])
return df_result
# 監視銘柄リスト(例: トヨタ、ソニーなど)
tickers = ['7203.T', '6758.T', '9984.T']
df_analyzed = process_stock_data(tickers)
print(df_analyzed.head())
このようにプログラム側で計算を済ませておくことで、ExcelやGoogleスプレッドシート側で重たい計算式を入れる必要がなくなります。
実装のポイント②:Google Driveへの自動アップロード
ローカル(自分のPC)にCSVを保存するだけでは、出先で確認したり、チームで共有したりできません。 今回は PyDrive2 ライブラリを使用して、Google Driveへ直接アップロードする機能を実装しました。
ここでのこだわりは、**「既存のファイルを上書きするのではなく、日付ごとに履歴を残す」か、あるいは「常に最新版としてスプレッドシートを更新するか」**を選べるようにした点です。
Python
from pydrive2.auth import GoogleAuth
from pydrive2.drive import GoogleDrive
import datetime
def upload_to_drive(filename):
gauth = GoogleAuth()
gauth.LocalWebserverAuth() # 初回はブラウザ認証が必要
drive = GoogleDrive(gauth)
# 今日の日付を取得
today = datetime.date.today().strftime('%Y-%m-%d')
upload_filename = f"stock_analysis_{today}.csv"
# Google Driveの指定フォルダにアップロード
file_drive = drive.CreateFile({'title': upload_filename, 'parents': [{'id': 'ここにフォルダID'}]})
file_drive.SetContentFile(filename)
file_drive.Upload()
print(f"Upload complete: {upload_filename}")
※Google Cloud Platformでサービスアカウントを発行し、認証を通す部分で少し躓きましたが、公式ドキュメントを参照して解決しました。
生成AIとの連携(今後の展望)
このシステムの真価は、アップロードされたデータの活用にあります。 現在、Google Driveに保存されたCSVデータを Googleの「NotebookLM」 に読み込ませる実験を行っています。
NotebookLMにデータを読み込ませることで、
- 「昨日と比較して、出来高が急増している銘柄はある?」
- 「移動平均線から5%以上乖離している割安銘柄をリストアップして」
といった自然言語での問いかけが可能になります。 エンジニアとしての「自動化スキル」と、投資家としての「分析視点」を組み合わせることで、より精度の高い投資判断ができる環境が整ってきました。
まとめ
Pythonを使って株価分析を自動化することで、以下のメリットが得られました。
- 時間短縮: データ収集の手間がゼロになった。
- 客観性: 感情に左右されず、設定した数値基準で機械的にスクリーニングできる。
- 拡張性: 今後、Webアプリ(Next.jsなど)への組み込みも容易。
現在は、この仕組みをバックエンドにして、Webブラウザ上で動作するポートフォリオ分析アプリの開発も進めています(Next.js + Supabaseを使用予定)。そちらの開発ログも今後公開していく予定です。
※免責事項 本記事は技術情報の共有・プログラミング学習を目的としており、特定の銘柄への投資を推奨するものではありません。プログラムの実行結果や投資判断については、ご自身の責任で行っていただきますようお願いいたします。


コメント