dejerine’s blog

千葉のとある街に住むサーファーの週末日記。「海の記録」や「食」「アメリカで生活していた頃の思い出」などを気ままに書いています。

google colabとyahooquery

google colabで米国株データを取得して、複数の銘柄を簡便に視覚化してみた。

その備忘録。

yahooqueryというライブラリーを使う。

まず、pipでyahooqueryのインストールする。

!pip install yahooquery

流れとして、
1. check_listに興味のある銘柄をリストで入力
2. for文で銘柄のTickerを一つずつインスタンス
3. インスタンス変数summary_detailをpandasのDataFrameに格納
4. DataFrameをgoogleドライブの所定の場所にcsvで保存

from yahooquery import Ticker
import pandas as pd
import datetime

check_list = ['DKL','QQQ','ABBV','T','PFE','K','KMB','BBY','USB','MMM','TGT','SQ','ISRG','NEE','IBM','XOM','KMI','WMB','MO','DOW']
df = pd.DataFrame(columns=check_list)
for stock_name in check_list:
  ticker = Ticker(stock_name)
  for k, v in ticker.summary_detail.items():
    df[stock_name] = pd.Series(v)

filename = '/content/drive/MyDrive/StocksUSA'+str(datetime.datetime.now().date()) +'.csv'
df.to_csv(filename)

保存したcsvを開くと、株データ一覧が見られる。

Tickerで取得できる値は、

'previousClose' = 前日終値
'open' = 始値
'dayLow', 'dayHigh' = 最安値、最高値
'dividendRate' = 一株配当額
'dividendYield' = 配当率
'beta’ = ベータ値
‘trailingPE', 'forwardPE' = PER、PER(予)
'volume' = 出来高
'bid', 'ask', 'bidSize', 'askSize' = 売値、買値、売値数、買値数
'priceToSalesTrailing12Months' = PSR
'fiftyDayAverage' = 50日平均

などで、

PBR、ROEキャッシュフローなどは含まれない。

f:id:dejerine:20210327201617p:plain

表を見るのは大変なので、matplotlibでグラフ化。

流れとしては、
1. csvをDataFrameで読み込み行列を入れ替える。
2. xstr, ystr, cstr変数にそれぞれx,y軸とカラーコードで表すカラム名を代入。
x軸に株価、y軸に配当利回り、beta値をカラーコードを使って表示する場合、
開始時の株価 = 'open'、配当率 = 'dividendYeild'、ベータ値 = 'beta'を使用すれば良い。

これらの変数を任意に変えることで調べたい組み合わせでプロットできる。

例)
PSRを見たい時は、'priceToSalesTrailing12Months'
PERは、'trailingPE'
などを代入する、

3. 保存したcsvを元にグラフを作成してpdfで保存。

import matplotlib.pyplot as plt

df = pd.read_csv(filename,index_col=0).T
xstr, ystr, cstr = 'open','dividendYield','beta'

for i in [xstr, ystr, cstr]:
  df[i]=df[i].astype(float)
x, y, c = df[xstr].tolist(),df[ystr].tolist(),df[cstr].tolist()

fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111,title=str(xstr+' vs '+ystr+' vs '+cstr))
axa = ax.scatter(x=x,y=y,c=c,s=50,cmap=plt.cm.get_cmap('RdYlBu'))

ax.set_xlabel(xstr)
ax.set_ylabel(ystr)

cbar=plt.colorbar(axa)
cbar.set_label(cstr,size=14)
for i, txt in enumerate(check_list):
  ax.annotate(txt, (x[i], y[i]),fontsize=20)
plt.grid()
fig.savefig(filename.replace('.csv','.pdf'))
fig.show()

出来上がった散布図はこんな感じ。

f:id:dejerine:20210327211918p:plain

一株あたりの価格が安い(割安というわけではない)が、配当利回りが高くて市場の変動の影響を受けにくそうな銘柄 (betaが小さい。TやMO)が一目でわかる。

beta値がないETFなど、欠損値を含む銘柄はプロットされない。

ポートフォリオに含まれる(あるいは加えたり外したりする)銘柄のリストを作っておいて、どの銘柄にするかを決めるときにサクッと選べる。

購入は自己責任で。