python中基于基因表达矩阵的层次聚类

python中基于基因表达矩阵的层次聚类,python,numpy,machine-learning,matplotlib,scipy,Python,Numpy,Machine Learning,Matplotlib,Scipy,如何在Python中以显示基因表达式值矩阵和树状图的方式进行层次聚类(在本例中是针对基因表达式数据的)?我的意思就像这里的例子: 如项目符号6(图1)后所示,其中树状图绘制在基因表达矩阵的左侧,其中行已重新排序以反映聚类 如何在Python中使用numpy/scipy或其他工具实现这一点?此外,使用欧几里得距离作为度量,用大约11000个基因的矩阵来计算是否可行 编辑:许多人建议使用集群软件包,但我仍然不确定如何用Python绘制我上面链接到的图像类型。如何使用Matplotlib将树状图与热

如何在Python中以显示基因表达式值矩阵和树状图的方式进行层次聚类(在本例中是针对基因表达式数据的)?我的意思就像这里的例子:

如项目符号6(图1)后所示,其中树状图绘制在基因表达矩阵的左侧,其中行已重新排序以反映聚类

如何在Python中使用numpy/scipy或其他工具实现这一点?此外,使用欧几里得距离作为度量,用大约11000个基因的矩阵来计算是否可行

编辑:许多人建议使用集群软件包,但我仍然不确定如何用Python绘制我上面链接到的图像类型。如何使用Matplotlib将树状图与热图矩阵叠加在一起


谢谢。

您可以使用scipy的模块完成此操作。这些命令实际上甚至非常相似。但是,您必须使用
correlation
而不是
corr
作为
pdist
的参数,而不是
cluster
函数scipy的群集模块的名称是
fcluster
。此外,对于树状图,函数在scipy中为
dendrogram
,而在Matlab中为
clustergram


您完全可以使用欧几里德度量(认为它是
pdist
的默认值)。我认为用11000个基因来计算应该是可行的,因为这将是11000*(11000-1)/2=60494500(11000选择2)个要计算的距离。这是一个很大的数字,但我认为肯定是可行的。

许多聚类方法,包括
scipy.cluster
首先对所有成对距离进行排序, 在你的情况下大约有6000万,不算太大。
以下几项需要多长时间

import scipy.cluster.hierarchy as hier
import pylab as pl

def fcluster( pts, ncluster, method="average", criterion="maxclust" ):
    """ -> (pts, Y pdist, Z linkage, T fcluster, clusterlists)   
        ncluster = n1 + n2 + ... (including n1 singletons)
        av cluster size = len(pts) / ncluster
    """
    pts = np.asarray(pts)
    Y = scipy.spatial.distance.pdist( pts )  # ~ N^2 / 2
    Z = hier.linkage( Y, method )  # N-1                         
    T = hier.fcluster( Z, ncluster, criterion=criterion )
        # clusters = clusterlists(T)
    return (pts, Y, Z, T)

hier.dendrogram( Z )
如何排列矩阵并很好地进行绘图
今年3月,So给出了部分答案。

一些人在使用scipy和matplotlib创建用于分层聚类和热图可视化的原型模块方面取得了一些不错的进展:

我一直在修改这段代码,使之成为一个成熟的分层聚类模块,我可以将其集成到我的转录组分析包中。我对最终产品非常满意,它将使用各种聚类度量和方法以及颜色梯度生成热图。代码和示例输出如下所示:


是否有工具用于在scipy中绘制生成的树状图?您还需要
matplotlib
模块。看一下这个文档可能会有所帮助:它使用了scipy集群包(hcluster),我很确定它是放在scipy.cluster.hierarchy模块中的。