【发布时间】:2018-09-25 04:32:28
【问题描述】:
我在 python 数据框中有一个 n*n 相关矩阵。我想根据这个矩阵分配集群值,比如(相关性>0.08)进入一个集群,依此类推:
import pandas as pd
import numpy as np
# data
# ==============================
np.random.seed(0)
df = pd.DataFrame(np.random.randn(100,5), columns=list('ABCDE'))
df1=df.corr()
A B C D E
A 1 -0.052234579 -0.098678285 0.063338014 -0.097187103
B -0.052234579 1 -0.015077115 0.058672786 0.140833111
C -0.098678285 -0.105077115 1 0.008695575 0.048329744
D 0.063338014 0.058672786 0.008695575 1 0.120529455
E -0.097187103 0.140833111 0.048329744 0.120529455 1
d={}
i=1
while df1.shape[0]>0:
x=(abs(df1.head(1))>0.08).T
x1=list(x[x[x.columns[0]]==True].index)
d[i]=x1
df1=df1[~df1.index.isin(x1)][list(df1.columns-x1)]
i+=1
d>>
{1: ['A', 'C', 'E'], 2: ['B'], 3: ['D']}
现在我的挑战是,假设一个变量的相关值>0.08,但与另一个不在当前集群中的变量具有更强的相关性,那么理想情况下它应该在不同的集群中。
例如'E' 与 A 的相关性为 -0.09,因此它在集群 1 中,但它与 B 的相关性更强(0.14),因此理想情况下,它应该在集群 2 中。 所以理想的集群分配应该是:
{1: ['A', 'C'], 2: ['B','D','E']}
我该如何解决这个迭代问题?
【问题讨论】:
-
为什么投反对票?我已经提出了所有的事实(
标签: python iteration cluster-analysis correlation