2017-07-27 3 views
0

Je voudrais obtenir quelques notions de base sur l'utilisation de biopython pour la mise en cluster de gènes.Exemple simple de mise en grappe biopython

Disons que j'ai des gènes que j'aimerais regrouper. Comment les nourrir à l'algorithme, et comment donner un point de coupure sous lequel la taille et la quantité de cluster dépendraient?

J'ai essayé approche directe:

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) 

mais il vient de me apporter une erreur:

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. 

Répondre

1

La fonction kcluster prend une matrice de données en entrée et non Seq instances.

Vous devez convertir vos séquences en une matrice et le fournir à la fonction kcluster.

Une façon de convertir les données en une matrice contenant uniquement des éléments numériques consiste à utiliser la fonction numpy.fromstring. Il traduit fondamentalement chaque lettre dans une séquence à son homologue ASCII.

Ceci crée un tableau 2D de séquences codées que la fonction kcluster a reconnu et utilise pour regrouper vos séquences.

>>> 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

Merci compagnon, fonctionne bien. Btw des idées sur la façon d'ajuster la sensibilité du clustering? et aussi si je voudrais comparer des séquences qui sont de taille inégale (en gros, il laisse tomber une erreur), donc la recommandation serait d'ajouter des zéros à la fin à la même taille? – Darius

+0

@Darius vérifier la documentation de la fonction liée dans le message. Il vous permet de changer un certain nombre de paramètres qui pourraient vous donner une plus grande sensibilité. Si vous avez des séquences inégales, ** alignez-les d'abord ** en utilisant des outils comme [T-Coffee] (http://www.ebi.ac.uk/Tools/msa/tcoffee/) pour les séquences protéiques. L'algorithme de clustering ne s'aligne pas, donc les zéros seraient considérés et vous donneraient des clusters incorrects. – fsimkovic

+0

Merci mon pote :) – Darius