Googleの株価予測

ゆうき( @BASEBALLY15 )です^^

今回は,Googleの株価を予測してみました.

そんなことが出来るのですか・・・?

はい^^
現在の株価から過去10年間の株価を取得し,全データの8割を学習用に,2割をテスト用に分けて予測しました.

学習用とテスト用に分けた後の流れは,以下のサイトを参考にすると理解しやすいです.

データを学習用とテスト用に分割する方法とは?

(Udemy『実践Pythonデータサイエンス』を参考,Jupiternotebookを使用)

Googleの株価予測

ライブラリ

import numpy as np

#予測を行うために使う
from sklearn.linear_model import LinearRegression 

import pandas as pd

from pandas import Series, DataFrame

import pandas_datareader as pdr

from pandas_datareader import DataReader

import matplotlib.pyplot as plt

from datetime import datetime

import seaborn as sns

%matplotlib inline

コード

#背景をwhitegridにする
sns.set_style("whitegrid") 


#GAFAのリストを用意する
gafa_list=["GOOG","AAPL","FB","AMZN"] 


#現在
end = datetime.now() 

#現在から10年前
start = datetime(end.year-10,end.month,end.day) 

10年前から現在までの株価を取得したいので,上のコードを記述します.

そして,以下のコードでyhooからGAFAの株価の情報を取得します.

#yahooからGAFAのデータを取得
for gafa_stock in gafa_list:
    globals()[gafa_stock] = pdr.DataReader(gafa_stock, "yahoo", start, end)

Googleの株価を表示したいので,以下のコードを記述します.

GOOG.head()
HighLowOpenCloseVolumeAdj Close
Date
2010-02-02266.481171262.819885266.481171264.5683298223000.0264.568329
2010-02-03270.037842263.128723263.347900269.4002086020500.0269.400208
2010-02-04267.995483261.798706267.497345262.4064336780600.0262.406433
2010-02-05265.753876260.254517263.213409264.6530156335600.0264.653015
2010-02-08269.988007264.772552265.255768265.7389535408700.0265.738953

今回は,全データを学習用とテスト用に分割したいので,上の表に降順の数字を追加したいと思います.

数字の追加方法は,以下のサイトを参考にしてください^^

今回は,1からではなく,降順に追加したいので,以下のコードを記述します.

GOOG["Number"] = [len(GOOG)-i for i in range(len(GOOG))]
GOOG.head()

すると,以下の表が表示されます.

HighLowOpenCloseVolumeAdj CloseNumber
Date
2010-02-02266.481171262.819885266.481171264.5683298223000.0264.5683292517
2010-02-03270.037842263.128723263.347900269.4002086020500.0269.4002082516
2010-02-04267.995483261.798706267.497345262.4064336780600.0262.4064332515
2010-02-05265.753876260.254517263.213409264.6530156335600.0264.6530152514
2010-02-08269.988007264.772552265.255768265.7389535408700.0265.7389532513

一番右を見てみると,”NUMBER”が追加され,昇順に数字が追加されています.

次に,Googleの株価を表示してみたいと思います.

表示方法は,以下のサイトで紹介しています.

GOOG["Adj Close"].plot(legend=True, figsize=(10,4))
Googleの株価の推移

株価の予測をしてみよう

まず,学習用とテスト用に分割します.

#データを学習用とテスト用に分割する
#全データの8割
train_number = (GOOG["Number"]<=(int(len(GOOG)*0.8))) 

#全データから学習用を引く(2割)
test_number = (GOOG["Number"]<=(int(len(GOOG))-int(len(GOOG)*0.8))) 

次に,過去6日分のデータを学習し,翌日のデータをテスト用に用意します.

#過去6日分を学習するデータを作成する
def main_data(data):

    x = [] #学習データ

    y = [] #テストデータ

    stocks = list(data["Adj Close"])

    for i in range(len(stocks)):

        if i < interval:

            continue

     #6日以降のデータをyに入れる
        y.append(stocks[i])
        
        xa = []

        for p in range(interval):

            d = i + p - interval

       #6日間のデータをxaに入れる
            xa.append(stocks[d]) 

    #xにxaを追加する
        x.append(xa) 

    return (x,y)
train_x, train_y = main_data(GOOG[train_number])

test_x, test_y = main_data(GOOG[test_number])
#直線回帰分析を行う
lr = LinearRegression(normalize=True)

#学習する
lr.fit(train_x, train_y)

#test_xから予測する
pre_y = lr.predict(test_x)

そして,テスト用のグラフと予測用のグラフを表示したいと思います.

#結果を図にプロット 赤がテストデータで青が予測データ
plt.figure(figsize=(10,6), dpi=100)

#test_yを赤色でプロット
plt.plot(test_y, c="r")

#pre_yを青色でプロット
plt.plot(pre_y, c="b")

#表示
plt.show()

結果は,以下の通りとなります.赤色のグラフがテスト用で,青色のグラフが予測した結果です.

Googleの株価の予測結果

グラフを見ると,テスト用のグラフと予測したデータがほとんど一致していることが分かります.

終わりに

今回は,Googleの株価を予測してみました.

未来予測ではないため,少し物足りない感じがしますが,データを分割し予測することが出来ました.

今後は,未来予測で投資が出来たらいいな,と思います^^

それでは・・・

Q &A

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA