データ分析の題材として,金融データを扱っている書籍は多いです.しかし,同じことを試そうと思っても,信頼できる長期的なデータを取得する方法がなかなかありません(経験上,無料で得られるデータでは,株式分割などを考慮しない株価になっている可能性がありました.※「調整済み」と書かれていても,実際はそうなっていないこともあるので注意が必要でした).
近年,JPX総研が「J-Quants API」なるサービスで,ヒストリカルの株価や企業財務情報などの金融データを個人向けにAPIで配信しています.
J-Quants APIについて - J-Quants API
この記事では,簡単な使い方をメモします.
注意
提供データの更新にはラグがあります.財務諸表など,速報と確報があるようです.特に,決算発表日に分析を行う場合には注意が必要です.提供データの更新タイミング - J-Quants API
準備
「API利用までの流れ」に概要が書かれています.API利用までの流れ - J-Quants API
まず,ユーザー登録が必要です.無料版と有料版があり,有料版はプランによって取得できるデータが変わります.
APIを利用する前に,リフレッシュトークン・IDトークンを取得します.以下にサンプルコードが書かれているので,適宜書き換えて使えばOKです(※メールアドレス,パスワードは自身のものに置き換えます).
リフレッシュトークン取得(/token/auth_user) - J-Quants API
IDトークン取得(/token/auth_refresh) - J-Quants API
import requests import json data = {"mailaddress":"<YOUR EMAIL_ADDRESS>", "password":"<YOUR PASSWORD>"} r_post = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(data)) REFRESH_TOKEN = r_post.json()["refreshToken"] r_post = requests.post(f"https://api.jquants.com/v1/token/auth_refresh?refreshtoken={REFRESH_TOKEN}") idToken = r_post.json()["idToken"] headers = {'Authorization': 'Bearer {}'.format(idToken)}
例:株価取得
例として,APIで株価を取得してみます.株価四本値(/prices/daily_quotes) - J-Quants API
code = 8697 code = str(code) r = requests.get(f"https://api.jquants.com/v1/prices/daily_quotes?code={code}", headers=headers)
取得したデータをプロットしてみましょう.
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame(r.json()["daily_quotes"]) df["Date"] = pd.to_datetime(df["Date"]) num = 2 fig = plt.figure(figsize = (6.4, 4.8 * num / 2), tight_layout = True) axes = [fig.add_subplot(num, 1, i + 1) for i in range(num)] axes[0].plot(df["Date"], df["AdjustmentClose"], label ="AdjustmentClose") axes[1].bar(df["Date"], df["AdjustmentVolume"], label ="AdjustmentVolume") for ax in axes: ax.legend() plt.show()