2017-07-27 67 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