2017-07-27 30 views
0

我想了解如何使用biopython进行集群基因的基本理解。biopython集群的简单例子

可以说我有我想要分组的基因。如何将它们提供给算法,以及如何给出一个在哪个大小和数量的群集将取决于的截点?

我试过直接的方法:

from Bio.Cluster import kcluster 
list1 = [ 
    'ADHAMKCAIROSURBANDJVUGLOBALIZATIONANDURBANFANTASIESPLA', 
    'AGGESTAMKTHEARABSTATEANDNEOLIBERALGLOBALIZATIONTHEARAB', 
    'AGGESTAMKTHEARABSTATEANDNEOLIBERALGLOBALIZATIONTHEARAB', 
    'AGGESTAMKTHEARABSTATEANDNEOLIBERALGLOBALIZATIONTHEARAB' 
] 
list2 = [Seq(gen, IUPAC.extended_protein) for gen in list1] 
clusterid, error, nfound = kcluster(list2) 

,但它只是给我带来了一个错误:

Traceback (most recent call last): 
    File "./test.py", line 9, in <module> 
    clusterid, error, nfound = kcluster(list2) 
TypeError: data cannot be converted to needed array. 

回答

1

kcluster功能需要一个数据矩阵作为输入,而不是Seq实例。

您需要将序列转换为矩阵并将其提供给kcluster函数。

将数据转换为仅包含数字元素的矩阵的一种方法是使用numpy.fromstring函数。它基本上将序列中的每个字母转换为它的ASCII对应字母。

这将创建kcluster函数识别并用于对您的序列进行聚类的编码序列的二维数组。

>>> from Bio.Cluster import kcluster 
>>> import numpy as np 
>>> sequences = [ 
...  'ADHAMKCAIROSURBANDJVUGLOBALIZATIONANDURBANFANTASIESPLA', 
...  'AGGESTAMKTHEARABSTATEANDNEOLIBERALGLOBALIZATIONTHEARAB', 
...  'AGGESTAMKTHEARABSTATEANDNEOLIBERALGLOBALIZATIONTHEARAB', 
...  'AGGESTAMKTHEARABSTATEANDNEOLIBERALGLOBALIZATIONTHEARAB' 
... ] 
>>> matrix = np.asarray([np.fromstring(s, dtype=np.uint8) for s in sequences]) 
>>> clusterid, error, nfound = kcluster(matrix) 
>>> print(clusterid) 
[1, 0, 0, 0] 
+0

感谢队友,效果很好。顺便说一句如何调整聚类灵敏度的想法?并且如果我想比较大小不相等的序列(基本上它会丢失一个错误),那么建议将末尾的零增加到相同的大小? – Darius

+0

@Darius检查帖子中链接功能的文档。它允许你改变一些参数,这可能会给你更大的灵敏度。如果你有不同的序列,**首先使用[T-Coffee](http://www.ebi.ac.uk/Tools/msa/tcoffee/)等工具对它们进行排列以获得蛋白质序列。聚类算法不会对齐,因此会考虑零并给您不正确的聚类。 – fsimkovic

+0

谢谢队友:) – Darius