我想基本了解如何使用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.
答案 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]