Pythonで複数銘柄の株価をグラフ出力
Pythonを使って複数銘柄の株価データを取得し、株価の変化を比較しやすいようにグラフで出力します。
この記事では pandas-datareader というモジュールを使用します。データ取得元のソースは、これまでに幾度も追加・削除されているようなので、コードを実行してエラーが出る場合はそのあたりを確認してみてください。
環境
私は以下の環境で動かしています。
・windows 10(64bit)
・python 3.8.2(32bit版)
・エディタ Visual Studio Code 1.53.1
複数銘柄の株価をそのままグラフ化
各銘柄の株価をPythonで比較します。比較したい銘柄のティッカーリストを作成して、リスト内に含まれる銘柄の株価をグラフで出力します。
コードは以下となります。
# =================================================
# ライブラリ
# =================================================
# データ取得
import pandas_datareader.data as web
from pandas_datareader.nasdaq_trader import get_nasdaq_symbols
# グラフ描画
import matplotlib.pyplot as plt
# =================================================
# 設定値
# =================================================
# ティッカーリスト
list_ticker = [
"AAPL",
"TSLA",
"QQQ"
]
# =================================================
# メイン
# =================================================
# NASDAQ銘柄情報取得 (Pandasデータフレーム)
df_symbols = get_nasdaq_symbols()
# ティッカーリストの株価情報取得
for i in range(0, len(list_ticker)):
# 株価情報取得
stock_price = web.DataReader(list_ticker[i],"yahoo","2021/1/1","2021/3/5")
# 出力パラメータ
stock_price["Close"].plot(label=str(list_ticker[i]))
# グラフ表示設定
plt.rcParams['font.family'] = 'Times New Roman' # 全体のフォント
plt.legend(loc="upper right",fontsize=8) # 凡例の表示(2:位置は第二象限)
plt.title('Stock Price', fontsize=10) # グラフタイトル
plt.ylabel('Price', fontsize=10) # y軸ラベル
plt.tick_params(labelsize = 10) # 軸ラベルの目盛りサイズ
plt.tight_layout() # ラベルがきれいに収まるよう表示
plt.show() # グラフの表示
実行すると次のグラフが出力されます。
しかし、各銘柄の株価が異なるのでこのまま比較するのはあまり好ましくないと思います。そこで、株価データ取得期間の初日を基準に、各銘柄の変化量が分かるグラフを作成します。
出力期間の初日を基準にグラフ化
株価を出力する期間の初日を基準に、どのくらい株価が変化しているのかをグラフ化していきます。コードをコピペしていただいて、ティッカーリストに任意の銘柄を追加していけば他の銘柄でも比較グラフを出力できます。
コードは以下となります。
# =================================================
# ライブラリ
# =================================================
# データ取得
import pandas_datareader.data as web
from pandas_datareader.nasdaq_trader import get_nasdaq_symbols
import pandas as pd
# グラフ描画
import matplotlib.pyplot as plt
# =================================================
# 設定値
# =================================================
# ティッカーリスト
list_ticker = [
"AAPL",
"TSLA",
"QQQ"
]
# =================================================
# メイン
# =================================================
# NASDAQ銘柄情報取得 (Pandasデータフレーム)
df_symbols = get_nasdaq_symbols()
# ティッカーリストの株価情報取得
for i in range(0, len(list_ticker)):
# 株価情報取得
df_stockprice = web.DataReader(list_ticker[i],"yahoo","2021/1/1","2021/3/5")
# 期間の初日で除算して規格化
df_stockprice["Adj Close"] /= df_stockprice["Adj Close"][0]
# 出力パラメータ
df_stockprice["Adj Close"].plot(label=str(list_ticker[i]))
# グラフ表示設定
plt.rcParams['font.family'] = 'Times New Roman' # 全体のフォント
plt.legend(loc="upper right",fontsize=8) # 凡例の表示(2:位置は第二象限)
plt.title('Stock Price', fontsize=10) # グラフタイトル
plt.ylabel('Price', fontsize=10) # y軸ラベル
plt.tick_params(labelsize = 10) # 軸ラベルの目盛りサイズ
plt.tight_layout() # ラベルがきれいに収まるよう表示
plt.show() # グラフの表示
実行すると次のグラフが出力されます。
先ほどのグラフではTSLAの株価がAAPLとQQQに対して大きすぎたため、AAPLとQQQの株価変動が分かりませんでしたが、こうすることで各銘柄の変化量が一目瞭然になります。
おわりに
本記事では pandas-datareader を使用して、米国株の複数銘柄の株価を比較できるようグラフで出力しました。今後は統計学を用いて銘柄比較も行っていきたいと思います。
何かお役に立てたら、サポートしていただけると嬉しいです!モチベーションを高めて、アウトプットしていきます!