このコードは、特定の株式の過去の価格データを取得し、そのデータに基づいて将来の株価を予測するためのPythonスクリプトです。主に次のステップで構成されています:
-
必要なライブラリのインポート:
-
datetime
とpandas
はデータ操作に使われます。 -
Prophet
は時系列予測に使われるFacebookのライブラリです。 -
plotly.graph_objs
はインタラクティブなグラフ作成に使用されます。 -
pandas_datareader
は金融データの取得に使用されるライブラリです。
-
-
pandas_datareader
のインポートチェック:-
pandas_datareader
がインストールされていない場合、エラーメッセージを表示してスクリプトを終了します。
-
-
株価データ取得関数(
get_stock_data
):- この関数は指定された銘柄コード(
meigara_cd
)、開始日(from_date
)、終了日(to_date
)に基づいて株価データを取得します。 -
pandas_datareader
を使用して、Stooqデータソースからデータを取得します。
- この関数は指定された銘柄コード(
-
データ取得の実行:
- スクリプトは特定の銘柄コード(ここでは"9104")と期間(2020年1月1日から今日まで)についてデータを取得します。
-
データが正常に取得できた場合の処理:
- 取得した株価データをProphetが読み取れる形式に変換します。
- Prophetモデルを作成し、株価データでモデルを学習(フィット)させます。
- 未来の365日間の予測を行います。
-
予測結果の可視化:
-
plotly
を使用して予測結果をグラフ化します。これには予測値、予測の上限と下限、実際の株価が含まれます。 - このグラフはHTMLファイルとして保存され、ブラウザで開くことができます。
-
-
エラーハンドリング:
- データ取得に失敗した場合、エラーメッセージが表示されます。
このスクリプトは、株価予測に関心のあるユーザーや開発者にとって有用です。ただし、株価予測は非常に複雑で、多くの不確実性を含むため、実際の投資判断には慎重に使用する必要があります。
銘柄や開始日等は適時修正してください。
また銘柄によってはAdj Close (調整後終値)にしたほうが良いかと思われます。
import datetime
import pandas as pd
from prophet import Prophet
import plotly.graph_objs as go
# pandas_datareaderのインポートを試みる
try:
from pandas_datareader import data as pdr
except ImportError:
raise ImportError("pandas_datareaderがインストールされていません。")
# 株価データ取得関数
def get_stock_data(meigara_cd, from_date, to_date):
try:
df = pdr.DataReader(name=meigara_cd + ".JP", data_source='stooq', start=from_date, end=to_date)
return df
except Exception as e:
print(f"データ取得中にエラーが発生しました: {e}")
return None
# データ取得
meigara_cd = "9104" # 銘柄コード
from_date = "2020-01-01" # 開始日
to_date = str(datetime.date.today()) # 終了日
data = get_stock_data(meigara_cd, from_date, to_date)
# データが正常に取得できた場合のみ処理を続ける
if data is not None and not data.empty:
# Prophet用インプットデータ
df = pd.DataFrame({"ds": data.index, "y": data["Close"]}).reset_index(drop=True)
# インスタンス化と学習
proph = Prophet()
proph.fit(df)
# 予測用のフレーム
future = proph.make_future_dataframe(periods=365)
# 時系列を予測
forecast = proph.predict(future)
# Plotlyグラフの作成
fig = go.Figure([
go.Scatter(x=forecast['ds'], y=forecast['yhat'], name='予測値'),
go.Scatter(x=forecast['ds'], y=forecast['yhat_upper'], fill=None, mode='lines', line={'color': 'lightgrey'}, showlegend=False),
go.Scatter(x=forecast['ds'], y=forecast['yhat_lower'], fill='tonexty', mode='lines', line={'color': 'lightgrey'}, showlegend=False),
go.Scatter(x=df['ds'], y=df['y'], name='実際の値', mode='markers')
])
# グラフをHTMLファイルとして保存し、ブラウザで開く
fig.write_html("stock_forecast.html")
print("グラフは 'stock_forecast.html' に保存されました。")
else:
print("データ取得に失敗しました。")