Eu gostei mais da postagem de Addison Klinke, por ser a mais simples, mas usei a sugestão de Wojciech Moszczyńsk para filtrar e mapear, mas estendeu o filtro para evitar valores absolutos, então, dada uma grande matriz de correlação, filtre, crie um gráfico e, em seguida, aplique-a:
Criado, filtrado e mapeado
dfCorr = df.corr()
filteredDf = dfCorr[((dfCorr >= .5) | (dfCorr <= -.5)) & (dfCorr !=1.000)]
plt.figure(figsize=(30,10))
sn.heatmap(filteredDf, annot=True, cmap="Reds")
plt.show()
Função
No final, criei uma pequena função para criar a matriz de correlação, filtrá-la e depois nivelá-la. Como uma ideia, ele poderia ser facilmente estendido, por exemplo, limites superior e inferior assimétricos, etc.
def corrFilter(x: pd.DataFrame, bound: float):
xCorr = x.corr()
xFiltered = xCorr[((xCorr >= bound) | (xCorr <= -bound)) & (xCorr !=1.000)]
xFlattened = xFiltered.unstack().sort_values().drop_duplicates()
return xFlattened
corrFilter(df, .7)