如何查找Excel行的加权协方差矩阵?

时间:2017-02-19 18:59:27

标签: python excel pandas numpy covariance

我是python的新手,实际上这是我在python中的第一个代码。 我试图找到4行数据的协方差矩阵,每个元素的日期权重递减

我需要计算4乘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 个答案:

答案 0 :(得分: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]])

或者,使用数据框:

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]])

您的数据框中可能包含不相关的列,在这种情况下,您可以将其分割为:

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