获取 pandas 中列子集之间的相关性
Get correlation between a subset of columns in pandas
所以,我熟悉一些更高级的 Pandas 索引和对 columns/rows 数据使用 .apply()
,但出于某种原因我无法弄清楚如何获得方差-手动某些列的协方差矩阵而不恢复为 .corr()
.
每当我尝试以下操作来分割我想要的列("APPL R" 之后的所有行和所有列)时,
a = np.cov(data1.loc[:,'AAPL R':])
我得到这样的答案
array([[ 7.27823733e-04, 2.26078140e-04, 1.99410574e-04, ...,
9.57801851e-05, -2.76751908e-04, 5.71509542e-05],
[ 2.26078140e-04, 1.26173616e-04, 2.17306383e-04, ...,
3.30070375e-05, -2.47989495e-05, 1.16819595e-05],
[ 1.99410574e-04, 2.17306383e-04, 1.92984210e-03, ...,
-2.27400788e-04, -4.46589343e-05, -5.90865613e-05],
...,
[ 9.57801851e-05, 3.30070375e-05, -2.27400788e-04, ...,
如何在 Pandas 中手动获得像这样的简单输出?
提前谢谢你。
使用 pandas
中的 corr
df=pd.DataFrame({'V1':[1,2,3],'V2':[3,2,1],'V3':[3,4,9]})
df.corr()
Out[431]:
V1 V2 V3
V1 1.000000 -1.000000 0.933257
V2 -1.000000 1.000000 -0.933257
V3 0.933257 -0.933257 1.000000
如果坚持不用DataFrame.corr()
:
您没有向 numpy
函数发送正确的列表。您希望每一列都作为自己的列表,因此您应该使用 DataFrame 的 transpose。
您需要相关矩阵,而不是协方差矩阵,因此您应该使用 np.corrcoef()
。 (如果你真的想要协方差矩阵,那么使用np.cov()
)
这是df
我从另一个问题中得到的记忆。
open high low close volume
date
2017-11-01 44.66 44.75 42.19 42.93 3500
2017-11-03 44.66 44.75 42.19 42.93 3500
2017-11-06 43.15 43.75 40.60 41.02 9200
2017-11-07 43.15 43.75 40.60 41.02 9200
2017-11-08 43.15 43.75 40.60 41.02 9200
2017-11-09 43.15 43.75 40.60 41.02 9200
2017-11-10 43.15 43.75 40.60 41.02 9200
2017-11-13 41.60 43.21 40.03 42.36 3575
2017-11-14 41.60 43.21 40.03 42.36 3575
...
df.corr()
# open high low close volume
#open 1.000000 0.891708 0.957078 0.351604 0.320314
#high 0.891708 1.000000 0.878307 0.610183 0.311939
#low 0.957078 0.878307 1.000000 0.559366 0.146151
#close 0.351604 0.610183 0.559366 1.000000 -0.132609
#volume 0.320314 0.311939 0.146151 -0.132609 1.000000
np.corrcoef(df.loc[:,'open':].values.T)
#array([[ 1. , 0.89170836, 0.95707833, 0.35160354, 0.32031362],
# [ 0.89170836, 1. , 0.87830748, 0.61018322, 0.31193906],
# [ 0.95707833, 0.87830748, 1. , 0.55936625, 0.14615072],
# [ 0.35160354, 0.61018322, 0.55936625, 1. , -0.13260909],
# [ 0.32031362, 0.31193906, 0.14615072, -0.13260909, 1. ]])
所以,我熟悉一些更高级的 Pandas 索引和对 columns/rows 数据使用 .apply()
,但出于某种原因我无法弄清楚如何获得方差-手动某些列的协方差矩阵而不恢复为 .corr()
.
每当我尝试以下操作来分割我想要的列("APPL R" 之后的所有行和所有列)时,
a = np.cov(data1.loc[:,'AAPL R':])
我得到这样的答案
array([[ 7.27823733e-04, 2.26078140e-04, 1.99410574e-04, ...,
9.57801851e-05, -2.76751908e-04, 5.71509542e-05],
[ 2.26078140e-04, 1.26173616e-04, 2.17306383e-04, ...,
3.30070375e-05, -2.47989495e-05, 1.16819595e-05],
[ 1.99410574e-04, 2.17306383e-04, 1.92984210e-03, ...,
-2.27400788e-04, -4.46589343e-05, -5.90865613e-05],
...,
[ 9.57801851e-05, 3.30070375e-05, -2.27400788e-04, ...,
如何在 Pandas 中手动获得像这样的简单输出?
提前谢谢你。
使用 pandas
corr
df=pd.DataFrame({'V1':[1,2,3],'V2':[3,2,1],'V3':[3,4,9]})
df.corr()
Out[431]:
V1 V2 V3
V1 1.000000 -1.000000 0.933257
V2 -1.000000 1.000000 -0.933257
V3 0.933257 -0.933257 1.000000
如果坚持不用DataFrame.corr()
:
您没有向
numpy
函数发送正确的列表。您希望每一列都作为自己的列表,因此您应该使用 DataFrame 的 transpose。您需要相关矩阵,而不是协方差矩阵,因此您应该使用
np.corrcoef()
。 (如果你真的想要协方差矩阵,那么使用np.cov()
)
这是df
我从另一个问题中得到的记忆。
open high low close volume
date
2017-11-01 44.66 44.75 42.19 42.93 3500
2017-11-03 44.66 44.75 42.19 42.93 3500
2017-11-06 43.15 43.75 40.60 41.02 9200
2017-11-07 43.15 43.75 40.60 41.02 9200
2017-11-08 43.15 43.75 40.60 41.02 9200
2017-11-09 43.15 43.75 40.60 41.02 9200
2017-11-10 43.15 43.75 40.60 41.02 9200
2017-11-13 41.60 43.21 40.03 42.36 3575
2017-11-14 41.60 43.21 40.03 42.36 3575
...
df.corr()
# open high low close volume
#open 1.000000 0.891708 0.957078 0.351604 0.320314
#high 0.891708 1.000000 0.878307 0.610183 0.311939
#low 0.957078 0.878307 1.000000 0.559366 0.146151
#close 0.351604 0.610183 0.559366 1.000000 -0.132609
#volume 0.320314 0.311939 0.146151 -0.132609 1.000000
np.corrcoef(df.loc[:,'open':].values.T)
#array([[ 1. , 0.89170836, 0.95707833, 0.35160354, 0.32031362],
# [ 0.89170836, 1. , 0.87830748, 0.61018322, 0.31193906],
# [ 0.95707833, 0.87830748, 1. , 0.55936625, 0.14615072],
# [ 0.35160354, 0.61018322, 0.55936625, 1. , -0.13260909],
# [ 0.32031362, 0.31193906, 0.14615072, -0.13260909, 1. ]])