No.001 pythonとyfinanceで株価取得し分析

1.今回の目的

 pythonのyfinanceライブラリを使いベータ値の計算を行ってみたいと思います。

具体的には、
1. ファーストリテイリング(9983.T)と株式会社しまむら(8227.T)の
過去5年間の週次の終値を取得し、
2. 日経平均の乖離からβの算出し分析を行いました。

Jupitor Notebookを使用します。

2.リファレンス

- yfinanceのサイトとしてコチラが公式サイト(PyPIのサイト)

- Pythonのベータ値の計算としてコチラのQiitaの記事

3.yfinanceとは

 yfinanceは Yahoo! Financeから情報を取得するためのAPIです。
オープンソースとして公開されています.
python環境がある場合はpip installで簡単にインストールが出来ます。

4.ベータ値とは

 ベータ値とは、市場全体(つまり株価指数)に対する、各個別銘柄の株価の感応度をいいます。つまり、日経平均株価やTOPIXといった株価指数が1%動いたとき、個別銘柄が何%動くかを示したものです。

 例えばTOPIXを基準とした場合、ベータ値が1の銘柄は、TOPIXが1%上昇すると1%上昇、TOPIXが1%下落すれば1%下落というように、TOPIXと同じ値動きをすることを表します。

 ベータ値が2の銘柄は、TOPIXが1%変動するとその2倍の2%変動することを表し、ベータ値が0.5の銘柄は、TOPIXが1%変動するとその半分の0.5%変動することを表します。

5.コーディング

Step1: yfinanceをinstallします。

pip install yfinance

Step2: Jupitor Notebookでライブラリを呼び込みます。

import pandas as pd  #データの整形のため 
import numpy as np        #対数等の計算のため
import matplotlib.pyplot as plt   #グラフ描画のため
import yfinance as yf #株価取得のため 

% matplotlib inline

Step3: yfinanceで株価の読み込みのための関数を定義

years = 5
tickers = {
   'ファストリ': '9983.T',
   'しまむら': '8227.T',
   '日経平均': '^N225'
}

def get_kabuka(years, companies):
    df =pd.DataFrame()
    for company in tickers.keys():
        tkr = yf.Ticker(tickers[company])
        data=tkr.history(period=f'{years}y',interval = "1wk")
        data.index = data.index.strftime('%d %B %Y')
        data = data[['Close']]
        data = data.dropna(how="all")
        data.columns = [company]
        df= pd.concat([df,data],axis=1)
    return df

Step4: 作成したget_kabuka()関数を使い、株価情報を取得し, dfに格納

df=get_kabuka(years, companies)
df.head()



Step5: numpyで週次ごとの変動率の対数をとり log returnsに格納


log_returns = np.log(df/df.shift(1)) #shift (1)で1日データシフトさせている
log_returns = log_returns.dropna() #最初のリストはNaN 。よって取り除く
log_returns.head()

Step6:  ファストリと日経平均で共分散のplot,  ベータ値の計算
   同様にしまむらと日経平均で共分散のplot,  ベータ値の計算

 #共分散plot 
X = log_returns.iloc[:,2] #日経平均 
Y = log_returns.iloc[:,0] #ファストリ 

from sklearn import linear_model
clf = linear_model.LinearRegression() #線形モデル 
X2 = [[x] for x in X]
clf.fit(X2, Y) # 予測モデルを作成

print("ベータ値(回帰係数,傾き)= ", clf.coef_)
print("切片= ", clf.intercept_)
print("決定係数= ", clf.score(X2, Y))

# 散布図
plt.scatter(X2, Y)

# 回帰直線
plt.title('Linear regression')
plt.plot(X2, clf.predict(X2))
plt.xlabel(log_returns.columns[0])
plt.ylabel(log_returns.columns[2])
plt.grid()
plt.show()
 #共分散plot 
X = log_returns.iloc[:,2] #日経平均 
Y = log_returns.iloc[:,1] #しまむら 

from sklearn import linear_model
clf = linear_model.LinearRegression() #線形モデル 
X2 = [[x] for x in X]
clf.fit(X2, Y) # 予測モデルを作成

print("ベータ値(回帰係数,傾き)= ", clf.coef_)
print("切片= ", clf.intercept_)
print("決定係数= ", clf.score(X2, Y))

# 散布図
plt.scatter(X2, Y)

# 回帰直線
plt.title('Linear regression')
plt.plot(X2, clf.predict(X2))
plt.xlabel(log_returns.columns[1])
plt.ylabel(log_returns.columns[2])
plt.grid()
plt.show()

6.考察

ベータ値
ファーストリテイリング  1.04
しまむら 0.39

ファーストリテイリングは衣料品を扱ったディフェンシブ
銘柄のためβ値は低くなると推定したが意外にも1を超えていた。
既に海外での売上が国内売上を上回り、
海外での競争や拡大が求めれるのと、
近年では米中貿易摩擦等国際政治の不透明さから
グローバル企業であるファーストリテイリングのベータ値は
1よりも高くなっているものと思われる。

ローカルのアパレル小売りの株式会社しまむらのβは
5年週次=0.39であった。
ユニクロと比較すると規模も低く、ローカル依存度が高いので、
リスクも低くβ値は低くなっている。

7.株価折れ線グラフ比較

最後に3社の株価トレンドをmatplotlibで描画してみます。

df['ファストリ'].plot(kind='line')
df['しまむら'].plot(kind='line')
df['日経平均'].plot(kind='line')

plt.legend(['ファストリ','しまむら','日経平均'])

株価の単価が異なるので、別々に見た方がよさそうです。

この記事が気に入ったらサポートをしてみませんか?