2017-02-19 14 views
0

私は非常にPythonに新しいです、実際これはpythonの私の最初のコードです。 私は4×4の共分散行列 を計算する必要がある各要素が減少重量日ごとExcel行の重み付き共分散行列を見つけるには?

を有するデータの4行の共分散行列を見つけることを試みています私はリターンを計算した場合のpythonを使用する必要が共分散行列を見つけるために重み「 」を使用します。

import pandas as pd 
import numpy as np 
import math 
xl = pd.ExcelFile('path+file.xlsx') 
df = xl.parse('Sheet 1') 
df['spxr']=np.log(df.SPX/df.SPX.shift(-1)) 
df['djir']=np.log(df.DJI/df.DJI.shift(-1)) 
df['vixr']=np.log(df.VIX/df.VIX.shift(-1)) 
df['vxdr']=np.log(df.VXD/df.VXD.shift(-1)) 
df['weights']=(0.06)*(0.94**(df.Obs-1)) 
df=df.fillna(0) 

私はnp.covどちらか

答えて

1

numpyののCOVを使用するかどうかはわからないが、入力として配列を受け取り、配列を出力します。

import numpy as np 

SPX = [0.000174, 0.000170, -0.000985, -0.000906] 
DJI = [0.000170, 0.000175, -0.000944, -0.000887] 
VIX = [-0.000985, -0.000944, 0.006568, 0.005917] 
VXD = [-0.000906, -0.000887, 0.005917, 0.005573] 

arr = np.array([SPX,DJI,VIX,VXD]) 
np.cov(arr) 

>>>array([[ 4.17311583e-07, 4.06027167e-07, -2.69320633e-06, 
    -2.47850075e-06], 
    [ 4.06027167e-07, 3.95127000e-07, -2.61988900e-06, 
    -2.41190283e-06], 
    [ -2.69320633e-06, -2.61988900e-06, 1.73845300e-05, 
     1.59925507e-05], 
    [ -2.47850075e-06, -2.41190283e-06, 1.59925507e-05, 
     1.47229569e-05]]) 

あるいは、データフレームで:

df_relevant = df.iloc[:,['spxr','djir','vixr','vxdr']] 

import pandas as pd 

df = pd.DataFrame(arr, columns=['SPX','DJI','VIX','VXD']) 
np.cov(df) 

>>>array([[ 4.17311583e-07, 4.06027167e-07, -2.69320633e-06, 
    -2.47850075e-06], 
    [ 4.06027167e-07, 3.95127000e-07, -2.61988900e-06, 
    -2.41190283e-06], 
    [ -2.69320633e-06, -2.61988900e-06, 1.73845300e-05, 
    1.59925507e-05], 
    [ -2.47850075e-06, -2.41190283e-06, 1.59925507e-05, 
    1.47229569e-05]]) 

あなたはそれが好きでスライスすることができ、その場合には、あなたのデータフレームで無関係の列を、持っているかもしれませんそれは、このような単純なする必要があります

+0

こんにちは私はここで体重をどのように使用しますか?エクセルの計算は、式サンププロダクト(SPX(すべての行)* SPX(すべての行)*ウェイト(すべての行))のものです –

+0

これは役に立ちますか? http://stackoverflow.com/questions/38448579/weighted-covariance-matrix-in-numpy – protoculture

関連する問題