みなさんこんにちは!
イザナギです!
from bs4 import BeautifulSoup
import pandas as pd
import requests
from datetime import datetime
import numpy as npfrom fbprophet
import Prophet
def get_kabu_data(stock_number):
dfs = []
year = [2015,2016,2017,2018,2019,2020,2021] # 取得したいデータの年を記載
for y in year:
url = 'https://kabuoji3.com/stock/{}/{}/'.format(stock_number,y)
headers = {
"User-Agent": "User-Agent情報の記載" #記載しないとスクレイピングできない可能性がある
}
soup = BeautifulSoup(requests.get(url, headers = headers).content,'html.parser')
tag_tr = soup.find_all('tr')
head = [h.text for h in tag_tr[0].find_all('th')]
data = []
for i in range(1,len(tag_tr)):
data.append([d.text for d in tag_tr[i].find_all('td')])
df = pd.DataFrame(data, columns = head)
col = ['始値','高値','安値','終値','出来高','終値調整']
for c in col:
df[c] = df[c].astype(float)
df['日付'] =[datetime.strptime(i,'%Y-%m-%d') for i in df['日付']]
dfs.append(df)
return dfs
def concatenate(kabu_data):
data = pd.concat(kabu_data,axis=0)
data = data.reset_index(drop=True)
col = ['始値','高値','安値','終値','出来高','終値調整']
for c in col:
data[c] = data[c].astype(float)
return data
k = "企業コード"v = "企業名" # csvのタイトルに利用
print(k,v)
kabu_data = get_kabu_data(k)
data = concatenate(kabu_data)
data.to_csv('{}-{}.csv'.format(k,v), index=False)
def prophet(csv):
df_prophet = pd.read_csv(csv)
model = Prophet() # csvはみやすさ重視のため日本語を用いたが、学習させるときは予測したいデータのカラムを「y」、時系列(日付)を「ds」とする
model.fit(df_prophet.rename(columns={"日付" : "ds", "終値調整" : "y"}))
future_data = model.make_future_dataframe(periods=365, freq = 'd')
future_data = future_data[future_data['ds'].dt.weekday < 5]
forecast_data = model.predict(future_data)
print(csv)
model.plot(forecast_data).savefig("prophet/image/" + csv.replace('.csv', ''))# トレンドを可視化したいときは「plot_components」を使う
model.plot_components(forecast_data).savefig("prophet/image/" + csv.replace('.csv', ''))prophet("csvのURL")
これで先ほどの画像のように可視化されたグラフが表示されていると思います。
まとめ
今回は「Prophet」を使って株価を予測してみました。
予測はしてみたものの、実際にどのくらいあっているんでしょうか?
分析した企業さんのデータを監視しながら確かめてみることとします。
それでは今回はここで筆を置かせていただきます。
最後まで記事をご覧いただきありがとうございました!