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

2024-04-25 12:34:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

http://www.mathworks.cn/access/helpdesk/help/toolbox/bioinfo/ug/a1060813239b1.html

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

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

编辑:许多人建议使用集群包,但我仍然不确定如何在Python中绘制我链接到上面的那种图像。例如,如何使用Matplotlib将树状图与热图矩阵重叠?

谢谢。


Tags: 数据httpaccesswww方式基因绘制矩阵
3条回答

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

How to get flat clustering corresponding to color clusters in the dendrogram created by scipy

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

http://altanalyze.blogspot.com/2012/06/hierarchical-clustering-heatmaps-in.html

许多聚类方法包括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 )

有人问如何对矩阵进行排列并绘出好的图 here 在三月的时候,有一个部分的答案。

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

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

相关问题 更多 >