Как из матрицы корреляций получить названия полей с коэффициентом больше заданного
Есть матрица корреляций; хочу из нее вытащить названия столбцов со значениями больше, например, чем 0.8:
corr = elem.corr()
for i, j in list(zip(np.arange(corr.shape[0]), np.arange(corr.shape[1]))):
index_i, index_j = [], []
if (i!=j) & (corr.iloc[i,j]>0.8): #для всех недиагональных элементов и тех, что больше 0.8
index_i.append(i) #добавляем индекс по i
index_j.append(j) #добавляем индекс по j
#по полученным индексам вернуть названия полей данный код выдает ошибку
elem_i, elem_j = [], []
for i, j in list(zip(index_i, index_j)):
elem_i.append[corr.index[index_i[i]]]
elem_j.append[corr.index[index_j[j]]]
elem_i, elem_j
но в результате списки пустые. вопрос: почему и как это исправить? а та часть кода, которая должна ворзврашщать названия поле, выдает ошибку:
TypeError: 'builtin_function_or_method' object is not subscriptable
заранее спасибо за ответ.
вот сама таблица https://github.com/catauggie/materials_classification/blob/master/temp/output.xlsx
Ответы (1 шт):
Автор решения: splash58
→ Ссылка
используя numpy предпочтительнее воздерживаться от явных циклов
import numpy as np
corr = np.array([[1, 2, 3], [4, 5, 6], [7,8,9]])
# исключим главную диагональ
mask = np.ones(corr.shape, dtype=bool)
np.fill_diagonal(mask, 0)
# выберем индексы, где больше, например, 2
index_i, index_j = np.where((corr > 2) & mask)
print(index_i, index_j) # [0 1 1 2 2] [2 0 2 0 1]