Python

【実践】Pythonで株の取引データを分析し予測してみよう!

stock
ウマたん
ウマたん
当サイト【スタビジ】の本記事では、データサイエンスの実践として株データを使った分析を解説していきます!実データをもとに学習した手法をマスターしていきましょう!

こんにちは!スタビジ編集部です!

この記事ではデータサイエンスの実践として”株データ“を使った分析を解説していきます!

ロボたん
ロボたん
データサイエンスを勉強した!・・・けどなかなか学んだ知識を活かす場面が少ない気がする、、、
ウマたん
ウマたん
そうだね!せっかく勉強しても実戦で使わないと身についた知識が無駄になってしまう!

データコンペに出るのは一つだけど、人によっては「ハードルが高い!」ってなりそうだから今回は身近な株データを使った分析をしてみよう!

実際に手を動かしつつ「株データの取得」~「データの分析」までの一連の流れをマスターしましょう!

株データの取得

まずは株データを取得について学んでいきましょう!

ターゲットの指定

今回はデータの取得に”yfinance“というライブラリを使います

これは”Yahoo!Finance’sAPI”から作られたライブラリで、Yahooファイナンスから株価データを取得することが出来ます!

ただ、Yahoo! finance APIは、Yahooの公式のサービスではなくYahooの一般公開されているAPIを使用したオープンソースのツールで個人的な使用のみを目的としてます

なので、あくまで勉強のために使うように使い方には注意しましょう!

pip install yfinance

ライブラリはpipコマンドで簡単にインストール出来ます!

では”Yahoo Finance API”を使って株データを取得していきましょう

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import datetime
import yfinance as yf

#ターゲットを指定
ticker = "AMZN"

#データを収集
data = yf.download(ticker , period='7d', interval = "1d")

“ticker”の変数にターゲットとなる株の銘柄コードを指定します!

今回はターゲットをAmazon(銘柄コード”AMZN“)を指定しました

変数には複数の株を指定することも出来ます

#ターゲットを指定
tickers = "AMZN AAPL"

このように設定すると、AmazonとAppleの情報を一度に取得できます

日本株を指定するときは銘柄コードに東京証券を表す「.T」を追加します

#ターゲットを指定
ticker = "4755.T"

上記は楽天グループ(銘柄コード:4755)を選択した例となります

取得するデータの期間、頻度の選択

ターゲットを指定した後は取得する期間、頻度を決めてデータを取得していきます!

#データを収集
data = yf.download(ticker , period= "7d", interval = "1d")

download関数“で取得したい株データを指定します

引数はいろいろありますが、download(ターゲット, 期間, 頻度)をまずは指定しましょう!

取得したデータがこちらです!

stock

期間」は日単位、月単位、年単位の他、”ytd”(当会計年度)や”max”(全期間)を選択できます

今回は「period= “7d”」と7日間を指定しました

またこの期間に「start/end」を使って、特定の日にちを指定することも出来ます

#データを収集
data = yf.download(ticker, start= "2022-01-01",end="2022-01-15", interval = "1d")

2022年1月1日から2022年1月15日のデータを取得しています

頻度」は分単位、時間単位、日単位、週単位、月単位を選択出来ます

今回は「interval = “1d”」と各日のデータを取得しました

また、取得できる頻度のバリエーションは決まっています

[1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo]

m⇒分、h⇒時間、d⇒日、wk⇒週、mo⇒月となっています

なので、4h置き(interval = “4h”)みたいな指定をするとエラーになってしまうので注意してください!

ウマたん
ウマたん
yfinance“というライブラリを使って簡単に株価の情報を取得することが出来たね!

また、株価の情報でだけではなくて財務情報も取得できるみたいなので、余裕があったら試してみよう!

株データの可視化

取得したデータの中身を詳しく見ていきましょう!

#データを収集
data = yf.download(ticker , period= "7d", interval = "1d")
data

yfinanceではデータをpandasのDataFrameの形で返してくれます!

stock

株の情報が取得出来ていますね!Date列がIndexになっています

  • Date:取得日時
  • Open:始値
  • High:高値
  • Low:底値
  • Close:終値
  • Adj Close:調整後終値
  • Volume:出来高

このデータを使えば株価の変動を見たり、株価の予測とか出来そうです!

ではこのデータを可視化してみましょう!

単位が違う「Volume」はいったん削除して折れ線グラフで見てみます!

df = data
df = df.drop("Volume", axis=1)

#可視化する
df.plot()
stock

価格の推移が可視化されました、こう見ると週前半からやや右肩下がりでしたが、最後は回復しそうに見えますね

取得するデータの期間や頻度を変更して、どのように価格が変動しているか見てみましょう!

次に、株のチャートでよく見るローソク足のグラフを表示します

ローソク足のグラフは”mplfinance“というライブラリを使って出力します

import mplfinance as mpf

#ローソク足グラフの表示
mpf.plot(df, type="candle")

ライブラリがインストールされていない場合はpipコマンドでインストールしましょう!

stock

ローソク足のグラフを表示させることが出来ました

また、出来高(株売買の取引量)も併せて出力出来ます

全体の流れを見るため、取得するデータの期間を6ヶ月にして可視化します

#データを収集
data = yf.download(ticker, period  = "6mo", interval = "1d")
#ローソク足グラフの表示
mpf.plot(df, type="candle",volume=True,figratio=(10,5))

先ほどの関数で「volume=True」を指定します(※Volume列を削除してしまった場合はもう一度データを取り直しましょう!)

stock

価格の変動と出来高の増減を一度に見ることが出来ました!

ウマたん
ウマたん
株価情報をグラフ化することが出来たね!

ここで可視化して分かった情報(変化が大きい場所等)を深堀りして、今後の分析に活かしていこう!

株データの加工

株価の分析をするため、取得したデータを使って新しい指標”移動平均“を加えてみましょう!

全体の流れをみるため、期間を6ヶ月にしたデータで分析します

#データを収集
data = yf.download(ticker, period  = "6mo", interval = "1d")
#移動平均を指標に加える
price = df["Close"]
span = 5
df["sma05"] = price.rolling(window=span).mean()

移動平均にはpandasの”rolling関数“を使用します

rolling関数は窓関数と呼ばれるものを指定した要素の数の幅だけ適用する関数となっています

今回は幅を「5」と設定し、平均値メソッド(mean)を指定しているため、5日間の終値の平均を5日目に記録しています!

df
stock

移動平均(sma05)が追加されています!ただ、最初の4日間は5日間分のデータがなくNaNとなっています、、、

そこで、最初の4日間は取得できる日数の平均を取る(min_periods=1)ように設定します

df["sma05"] = price.rolling(window=span, min_periods=1).mean()
df
stock

グラフにするとこのようになります

plt.plot(df.index, df["Close"], label="Close")
plt.plot(df.index, df["sma05"], label="sma05")
plt.legend()
stock

rolling関数では、平均値の他にも中央値や最大値を取得したり幅の中の要素に重みづけを付けることが出来ます

ウマたん
ウマたん
rollomg関数の設定を変更してみて、自分の分析に活かしてみよう!

株データの分析

取得した株データを使って統計的な分析を行っていきましょう!

今回は6ヶ月間の株価データに対して”ARIMAモデル“を使った時系列データ分析を行います

“ARIMAモデル”は時系列データの差分をとって差分のデータに落とし込むことで定常にし、ARMAモデルを適用するモデルで株価などの非定常性データに用いられます!

時系列データ分析について詳しく知りたい方は下記の記事をチェックしてみてください!

【入門】時系列データ分析の基礎について解説!当サイト【スタビジ】の本記事では、実務の場で登場することの多い時系列データの分析方法についてカンタンにまとめていきます!時系列要素を加味しないとちゃんとしたモデリングができない状況に陥ります。注意しましょう!...

まずは取得したデータを学習データ(70%)とテストデータ(30%)に分けます

#ARIMAモデル データ準備
train_data, test_data = df[0:int(len(df)*0.7)], df[int(len(df)*0.7):]
train_data = train_data['Close'].values
test_data = test_data['Close'].values

今回はランダムではなく日時で7:3に分割して使用します

続いてARIMAモデルを実装していきます

ARIMAモデルはstatsmodelsライブラリから呼び出して使用します

from statsmodels.tsa.arima.model import ARIMA

statsmodelsライブラリが入っていない場合はインストール(pip install statsmodels等)しましょう!

ARIMAモデルはARモデルとMAモデルを組み合わせで、下記の3つのパラメータ(p,d,q)を入力します

  • p:ARモデルのパラメータで、遅延観測値の数
  • d:観測値の段差
  • q:MAモデルのパラメータで、移動平均ウィンドウのサイズ
# ARIMAモデル実装
model = ARIMA(train_data, order=(6,1,0))
model_fit = model.fit()
print(model_fit.summary())

今回はパラメータ(p,d,q)にp=6、d=1、q=0と選択しました

実際にはパラメータをチューニングして最適な値を見つけてモデル構築しましょう!

では実際にARIMAモデルを用いて予測をしてみます

#ARIMAモデル 予測
history = [x for x in train_data]
model_predictions = []
for time_point in range(len(test_data)):
#ARIMAモデル 実装
    model = ARIMA(history, order=(6,1,0))
    model_fit = model.fit()
#予測データの出力
    output = model_fit.forecast()
    yhat = output[0]
    model_predictions.append(yhat)
#トレーニングデータの取り込み
    true_test_value = test_data[time_point]
    history.append(true_test_value)

ARIMAモデルでは差分のデータを使うため、観測したテストデータを毎回取り込み、モデルを再構築しながら進めていきます!

実際に取得した予測データとテストデータを比較してみましょう

#可視化
plt.plot(test_data, color='Red', label='実績値')
plt.plot(model_predictions, color='Blue', label='予測値')
plt.title('Amazon 株価予測値', fontname="MS Gothic")
plt.xlabel('日', fontname="MS Gothic")
plt.ylabel('Amazon 株価', fontname="MS Gothic")
plt.legend(prop={"family":"MS Gothic"})
plt.show()
stock

日数のずれがありますが、おおむね増減の傾向が近しいモデルを構築出来た感じですね!

ウマたん
ウマたん
パラメータの値を変えたりしながら、予測精度を高めていこう!

Pythonで株データの分析まとめ

今回は”yfinance“というライブラリを使ってpythonで株情報の扱い方を学んでいきました

データの取得」~「データの分析」について実際に手を動かしながら、実データを分析するための準備が出来たと思います!

ここからは、統計手法や機関学習を用いて株価の予測などに挑戦してみましょう!

データ分析のやり方について学びたいという方は以下の講座がオススメです!

【初学者向け】データ分析コンペで楽しみながら学べるPython×データ分析講座

Udemy-course
【オススメ度】
【講師】ウマたん
【時間】4時間
【レベル】初級~中級

【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門

\ただいま激安セール中/

統計学・機械学習の基本的な内容を学び各手法の詳細についてもなるべく概念的に分かりやすく理解できるように学んでいきますので、データサイエンスに興味のある方はぜひ受講してみてください!

また、データサイエンティストになるための独学ロードマップについて知りたい方はぜひ以下の記事をチェックしてみてください

【入門者向け】データサイエンティストに必要なスキルと独学勉強ロードマップ!当サイト【スタビジ】の本記事では、データサイエンティストに求められるスキルとそれを身に付けるための勉強法について徹底的にまとめていきます!入門者でも、しっかりデータサイエンティストについて理解しある程度独学で駆け出しの状態までいけることを目指します。...
スタビジアカデミーでデータサイエンスをさらに深く学ぼう!
スタアカトップ

スタビジのコンテンツをさらに深堀りしたコンテンツが動画と一緒に学べるスクールです。

プレミアムプランでは私がマンツーマンで伴走させていただきます!ご受講お待ちしております!

スタビジアカデミーはこちら