K_YOSHI’s プログラミング備忘録

プログラミング関係、その他のメモ

Pythonで偏自己相関係数を計算する

[Python] 偏自己相関係数

株価(日次または週次の終値)の時系列データを取得し、偏自己相関係数を求める。

参考にしたのはこちら:

logics-of-blue.com

# 株価(日次または週次の終値)の時系列データを取得し、偏自己相関係数を求める
# usage: python pacf.py code duration d_or_w (1: Per day/Else: Per week)

# ライブラリのインポート
import sys
import urllib.request
import bs4

import matplotlib.pyplot as plt

# 統計モデル
import statsmodels.api as sm

# Constants

# Arguments
# 証券コード
code            = sys.argv[1]
# 20 x duration (日または週)分のデータを取得
duration        = int(sys.argv[2])
# 日次または週次の選択
d_or_w          = int(sys.argv[3])
if d_or_w == 1:
        d_flag = "d"
else:
        d_flag = "w"

# Variables
# 株価時系列データ
price   = []

for i in range(1,duration+1):
        # Web上のリソースからsoupを作成
        url = "http://info.finance.yahoo.co.jp/history/?code="+code+"&sy=2000&sm=1&sd=1&tm="+d_flag+"&p="+str(i)
        soup = bs4.BeautifulSoup(urllib.request.urlopen(url).read() , "lxml" )
        # 株価時系列のテーブルの各行を参照
        for j in range(1,len(soup.findAll('table')[1].findAll('tr'))):
                # 株式分割・併合等の表示を除外
                if len(soup.findAll('table')[1].findAll('tr')[j].findAll('td')) == 7:
                        # print(soup.findAll('table')[1].findAll('tr')[j].findAll('td'))
                        # タグ、カンマ等を取り除く
                        src     = str(soup.findAll('table')[1].findAll('tr')[j].findAll('td')[6])
                        dst     = src.replace("<td>","")
                        dst     = dst.replace("</td>","")
                        dst     = dst.replace(",","")
                        # 株価時系列データ、過去→現在の順になるように追加(挿入)していく
                        price.insert( 0 , float(dst) )


# 自己相関
# price_acf = sm.tsa.stattools.acf(price, nlags=40)

# 偏自己相関
price_pacf = sm.tsa.stattools.pacf(price, nlags=40, method='ols')
# 偏自己相関の出力
#print( price_pacf )
plt.plot( price_pacf )
plt.show()