如何遍历相关矩阵以仅提供高于特定阈值的相关对?和/或使其更有效率



我有以下代码:

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

最新更新