python中具有基因表达矩阵的层次聚类
Posted
技术标签:
【中文标题】python中具有基因表达矩阵的层次聚类【英文标题】:hierarchical clustering with gene expression matrix in python 【发布时间】:2011-02-28 00:41:06 【问题描述】:如何在 Python 中以显示基因表达值矩阵和树状图的方式进行层次聚类(在本例中为基因表达数据)?我的意思就像这里的例子:
http://www.mathworks.cn/access/helpdesk/help/toolbox/bioinfo/ug/a1060813239b1.html
显示在第 6 点之后(图 1),树状图绘制在基因表达矩阵的左侧,其中行已重新排序以反映聚类。
如何使用 numpy/scipy 或其他工具在 Python 中执行此操作?此外,使用欧几里得距离作为度量,使用大约 11,000 个基因的矩阵来执行此操作在计算上是否可行?
编辑:许多人建议使用集群包,但我仍然不确定如何在 Python 中绘制我上面链接到的那种图像。如何在热图矩阵旁边叠加树状图,例如使用 Matplotlib?
谢谢。
【问题讨论】:
【参考方案1】:包括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 在 3 月的 So 中,有部分答案。
【讨论】:
【参考方案2】:您可以使用 scipy 的 cluster.hierarchy 模块来做到这一点。这些命令实际上甚至非常相似。但是,您必须使用correlation
而不是corr
作为pdist
的参数,而不是cluster
,函数scipy 的集群模块的名称是fcluster
。此外,对于树状图,scipy 中的函数是 dendrogram
,而 Matlab 中的函数是 clustergram
。
您绝对可以使用欧几里得度量(认为这是pdist
的默认值)。我认为用 11,000 个基因来做这件事应该是可行的,因为这将是 11000*(11000-1)/2 = 60494500 (11000 选择 2) 距离来计算。这是一个很大的数字,但我认为肯定是可行的。
【讨论】:
在 scipy 中是否有用于绘制结果树状图的工具? 您还需要matplotlib
模块。查看此文档可能会有所帮助:cs.swarthmore.edu/~turnbull/cs67/s09/labs/lab05.pdf 它使用 scipy-cluster 包(hcluster),我很确定这是 scipy.cluster.hierarchy 模块中的内容。【参考方案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
【讨论】:
以上是关于python中具有基因表达矩阵的层次聚类的主要内容,如果未能解决你的问题,请参考以下文章
层次聚类python,scipy(dendrogram, linkage,fcluster函数)总算有博文说清楚层次聚类Z矩阵的意义了