金融ファイナンスを分析することがPythonの強みです。
時系列データを分析して株価予測も可能になります。
必要ライブラリをインポートする
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
可視化ライブラリ
import matplotlib.pyplot as plt
import seaborn as sns# 罫線
sns.set_style('whitegrid')
#pickleファイルで必要なデータを一括保存
#pickleはPythonオブジェクトの直列化(シリアライズ)や非直列化(デシリアライズ)を扱うライブラリ
import pickle
Pythonで日付と時刻を扱うモジュール
from datetime import datetime
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
可視化ライブラリ
import matplotlib.pyplot as plt
import seaborn as sns# 罫線
sns.set_style('whitegrid')
#pickleファイルで必要なデータを一括保存
#pickleはPythonオブジェクトの直列化(シリアライズ)や非直列化(デシリアライズ)を扱うライブラリ
import pickle
Pythonで日付と時刻を扱うモジュール
from datetime import datetime
pklファイルより株価データを取得
証券コード(GOOG(Google))と同じ変数名 2022年4月から23年の4月まで
with open('ファイル名.pkl', 'br') as f: GOOG = pickle.load(f)
APIで取得する方法
J-Quants APIに登録
無料プランはデータ提供期間が過去2年分[12週間遅延]
リフレッシュトークンとIDトークンの取得と株価データ取得
リフレッシュトークンを取得するPythonコード
リフレッシュトークン取得
リフレッシュトークン取得
import requests import json import pandas as pd
登録したメールアドレス、パスワードを設定
EMAIL_ADDRESSに登録メールアドレス、PASSWORDにパスワードを入力
mail_password={"mailaddress":"EMAIL_ADDRESS", "password":"PASSWORD"}
リフレッシュトークン取得
r_ref = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(mail_password))
リフレッシュトークン取得の表示
print(r_ref.json())
受け取ったリフレッシュトークンを設定
RefreshToken = r_ref.json()["refreshToken"]
IDトークン取得
r_token = requests.post(f"https://api.jquants.com/v1/token/auth_refresh?refreshtoken={RefreshToken}")
IDトークン表示
print(r_token.json())
取得したIDトークンを設定
idToken = r_token.json()["idToken"] headers = {'Authorization': 'Bearer {}'.format(idToken)}
銘柄コード、期間を指定
code_ = "8697" from_ = "2022-12-01" to_ = "2023-02-28"
株価四本値の取得
re_daily_OHLCV = requests.get(f"https://api.jquants.com/v1/prices/daily_quotes?code={code_}&from={from_}&to={to_}", headers=headers)
pandasデータフレームに変換
df_daily_OHLCV = pd.DataFrame(re_daily_OHLCV.json()["daily_quotes"])
'Date'をdatetime型へ変換
df_daily_OHLCV['Date'] = pd.to_datetime(df_daily_OHLCV['Date']) 参照:J-Quants API(無料プランあり)を使用した株価・財務データ取得(Python)
https://taimuoreganoblog.com/miscellaneousnotes/data-acquisition/stockdata_acquisition/
describeで各列の要約統計量(平均、標準偏差など)取得
参照:note.nkmk.me:https://note.nkmk.me/python-pandas-describe/
GOOG.describe()
#情報の出力
GOOG.info()
終値時系列をプロット
GOOG['adjClose'].plot(legend=True, figsize=(10, 4))
1日に取引が成立した株の数をプロット
GOOG['volume'].plot(legend=True, figsize=(10, 4))
移動平均線(moving average)と呼ばれるグラフ
「移動平均とは、時系列データにおいて、ある一定区間ごとの平均値を区間をずらしながら求めたもの」
参照:統計WEB | https://bellcurve.jp/statistics/blog/15528.html
間隔ごとに移動平均を取得
pandasは金融情報が得意
ma_day = [10, 20, 50]
for ma in ma_day: column_name = f"MA {ma}" GOOG[column_name] = GOOG['adjClose'].rolling(ma).mean()
GOOG[['adjClose','MA 10','MA 20','MA 50']].plot(figsize=(10, 4))
pct_changeを使うと変化の割合を算出
GOOG['daily'] = GOOG['adjClose'].pct_change()
日ごとの株式市場の変化率
GOOG['daily'].plot(figsize=(16, 9),#HDサイズのグラフ(1920×1080)が作りたかったら、figsizeを(16, 9)、dpiを120 legend=True, linestyle='--'#折れ線グラフをイメージ, marker='v')# 35種類のマーカーが使用可能
前日パーセンテージのヒストグラム
GOOG['daily'].hist(bins=100)
sns.histplot(GOOG['daily'], bins=100, kde=True,#カーネル密度推定グラフ / ガウス分布 #実績データをサンプルとして、実績のない値の確率を導き出す手法 color='purple')
