エンジニアリングとお金の話

都内で働くエンジニアの日記です。

【技術】トヨタと日産の相関係数を求めてみた

【SPONSORED LINK】

作成したyahooファイナンス用のツールを使用してトヨタと日産の相関係数を求めてみた。numpy等を使用すれば簡単に求めらるはずだが、今回は勉強を兼ねて独自に実装している。

#-*- coding:utf-8 -*-
import stockPrice
import math

def main():
    #トヨタ
    code1="7203"
    #日産
    code2="7201"

    #トヨタと日産の2015年6月1日から7月20日までの株価を取得
    stockPriceDict1=stockPrice.stockPriceDict(code1,20150601,20150720)
    stockPriceDict2=stockPrice.stockPriceDict(code2,20150601,20150720)

    #両社の株価が取得出来た場合のみ処理を実施
    if stockPriceDict1 != None and stockPriceDict2 != None:

        #初値と終値から1日あたりの変化率を取得
        changeRate1=[(float(endPrice)-float(startPrice))/float(startPrice) * 100 for startPrice,endPrice in zip(stockPriceDict1.get("startPrice"),stockPriceDict1.get("endPrice"))]
        changeRate2=[(float(endPrice)-float(startPrice))/float(startPrice) * 100 for startPrice,endPrice in zip(stockPriceDict2.get("startPrice"),stockPriceDict2.get("endPrice"))]

        #平均値を取得
        avg1=sum(changeRate1)/len(changeRate1)
        avg2=sum(changeRate2)/len(changeRate2)

        #偏差を取得
        deviation1=[float(line) - float(avg1) for line in changeRate1]
        deviation2=[float(line) - float(avg2) for line in changeRate2]

        #分散を取得
        variance1=sum([math.pow(line,2) for line in deviation1]) / len(deviation1)
        variance2=sum([math.pow(line,2) for line in deviation2]) / len(deviation2)

        #標準偏差を取得
        standardDeviation1=math.sqrt(variance1)
        standardDeviation2=math.sqrt(variance2)

        #共分散を取得
        unionVariance=sum([ x*y for x,y in zip(deviation1,deviation2)])/len(deviation1)

        #相関係数を取得
        correlation = unionVariance /(standardDeviation1 * standardDeviation2)

        print correlation

if __name__ == '__main__':
    main()

ちなみに、算出した結果は0.740408069561だった。0.7以上だと強い相関があると言われるので両社の間には相関があると言える。

また、numpyを使用して算出する際は以下の通り

#-*- coding:utf-8 -*-
import stockPrice
import numpy

def main():
    #トヨタ
    code1="7203"
    #日産
    code2="7201"

    #トヨタと日産の2015年6月1日から7月20日までの株価を取得
    stockPriceDict1=stockPrice.stockPriceDict(code1,20150601,20150720)
    stockPriceDict2=stockPrice.stockPriceDict(code2,20150601,20150720)
    
    #相関係数を取得
    print numpy.corrcoef(stockPriceDict1,stockPriceDict2)

if __name__ == '__main__':
    main()

独自に書いてみる事により改めてライブラリの有り難さが実感出来た。