使用 Seaborn clustermap 提取层次聚类的行簇

5
我将使用seaborn.clustermap中的层次聚类来对数据进行聚类。这可以很好地可视化热图中的聚类。然而,现在我想提取分配给不同聚类的所有行值。
以下是我的数据样例:
import pandas as pd

# load DataFrame 
df = pd.read_csv('expression_data.txt', sep='\t', index_col=0)

df 

    log_HU1         log_HU2
EEF1A1  13.439499   13.746856
HSPA8   13.169191   12.983910
FTH1    13.861164   13.511200
PABPC1  12.142340   11.885885
TFRC    11.261368   10.433607
RPL26   13.837205   13.934710
NPM1    12.381585   11.956855
RPS4X   13.359880   12.588574
EEF2    11.076926   11.379336
RPS11   13.212654   13.915813
RPS2    12.910164   13.009184
RPL11   13.498649   13.453234
CA1 9.060244    13.152061
RPS3    11.243343   11.431791
YBX1    12.135316   12.100374
ACTB    11.592359   12.108637
RPL4    12.168588   12.184330
HSP90AA1    10.776370   10.550427
HSP90AB1    11.200892   11.457365
NCL 11.366145   11.060236

然后我使用seaborn进行聚类,如下所示:

fig = sns.clustermap(df)

产生以下聚类图: enter image description here 对于这个例子,我可能能够手动解释每个聚类所属的值(例如TFRC和HSP90AA1聚类)。但是,我计划对更大的数据集进行这些聚类分析。
因此,我的问题是:是否有人知道如何获取每个聚类的行值?
谢谢。

此问题已在此处得到解答:https://dev59.com/QF4c5IYBdhLWcg3wc5_r - Mateo Torres
可能是从seaborn clustermap中提取聚类的重复问题。 - Mateo Torres
是的,我尝试过那个。但我肯定无法让它工作。所以如果你知道怎么做?我会非常感激! - pr94
你尝试过使用 fcluster 吗?就像这里建议的一样:https://dev59.com/nWUo5IYBdhLWcg3wkADB#16023123(这还需要你在 seaborn 的 clustermap 之外计算链接)。 - Mateo Torres
1个回答

6
使用scipy.cluster.hierarchy模块的fcluster函数可以进行聚类检索:
import pandas as pd
import seaborn as sns
import scipy.cluster.hierarchy as sch

df = pd.read_csv('expression_data.txt', sep='\t', index_col=0)

# retrieve clusters using fcluster 
d = sch.distance.pdist(df)
L = sch.linkage(d, method='complete')
# 0.2 can be modified to retrieve more stringent or relaxed clusters
clusters = sch.fcluster(L, 0.2*d.max(), 'distance')

# clusters indicices correspond to incides of original df
for i,cluster in enumerate(clusters):
    print(df.index[i], cluster)

输出:

EEF1A1 2
HSPA8 1
FTH1 2
PABPC1 3
TFRC 5
RPL26 2
NPM1 3
RPS4X 1
EEF2 4
RPS11 2
RPS2 1
RPL11 2
CA1 6
RPS3 4
YBX1 3
ACTB 3
RPL4 3
HSP90AA1 5
HSP90AB1 4
NCL 4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接