biopython聚类的简单示例

时间:2017-07-27 12:54:31

标签: python cluster-analysis 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 个答案:

答案 0 :(得分:1)

kcluster函数将数据矩阵作为输入,而不是Seq个实例。

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

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

这将创建一个编码序列的2D数组,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]