我有以下代码:
for i in list(corr.columns):
for j in list(corr.columns):
if corr.ix[i,j]>0.7 and corr.ix[i,j] != 1:
print i, ' ',j ,' ', corr.ix[i,j]
问题是,虽然这有效,但它同时返回 corr[i,j] 和 corr[j,i],就好像它们是不同的相关性一样。无论如何,我可以只遍历相关矩阵的"底部三角形"吗?
下面是一种可能性,仍然使用类似于您的循环结构。请注意,通过限制 j
的可能值范围,可以消除循环中的大部分重复工作。此外,虽然像您那样使用字符串进行索引可能会使某些程序更具可读性/健壮性,但使用整数索引 numpy 2d 数组可能会更快(并且更简洁,因为没有.ix
组件)。以这种方式编制索引也允许您跳过您知道不需要的测试元素。
# Get some toy data and extract some information from it
import pandas.io.data as pd
X = pd.DataReader('aapl','yahoo')
rows, cols = X.shape
flds = list(X.columns)
# Indexing with numbers on a numpy matrix will probably be faster
corr = X.corr().values
for i in range(cols):
for j in range(i+1, cols):
if corr[i,j] > 0.7:
print flds[i], ' ', flds[j], ' ', corr[i,j]
运行上面的代码会产生如下内容:
Open High 0.99983447301
Open Low 0.999763093885
Open Close 0.999564997906
High Low 0.999744241894
High Close 0.999815965479
Low Close 0.999794304851