BLAST - Ent Paris 13

publicité
BLAST :
Basic Local Alignment Search Tool
Paramètres à régler :
La matrice utilisé pour calculer les scores d'alignements
Les seuils de scores utilisés par la méthode
Il existe des valeurs « par défaut »
Lorsqu'elles ne conviennent pas, il est possible de changer ces
valeurs
BLAST est disponible sur Internet
Équivalent de Google, mais pour rechercher des séquences d'ADN,
d'ARN ou de protéines
140
BLAST sur Internet
http://blast.ncbi.nlm.nih.gov/Blast.cgi
Plusieurs programmes :
Blast p : recherche d'une séquence protéique dans une banque de
protéine (cf exemple précédent)
Blast n : recherche d'une séquence nucléotidique dans une banque
d'ADN
Blast x : recherche d'une séquence nucléotidique dans une banque
de protéine
t Blast n : recherche d'une séquence protéique dans une banque
d'ADN
t Blast x : recherche d'une séquence nucléotidique dans une banque
d'ADN (comme Blast n), mais compare les protéines produites par
gène et pas les gènes eux-mêmes
Deux séquences d'ADN différentes donnant la même protéine
sont considérées comme identiques
141
BLAST sur Internet
SEQUENCE
BANQUE
BLASTP
Protéique
TB
LA
ST
N
Protéique
TX
S
A
BL
T
T
BLASTN
Nucléique
T
TBLASTX
Nucléique
T
142
Séquence à rechercher
Base de données où la
recherche est effectuée
Rechercher seulement
chez certaines espèces
Lancer le BLAST !
BLAST sur Internet
Nombre maximum de
séquences affichées
Nombre d'erreur que l'on
accepte (E-value)
Longueur des mots
Matrice de substitution
protéique
E-value = 10 => parmi les résultats, statistiquement en
moyenne 10 alignement de séquence seront dus au hasard
BLAST sur Internet
Durée du BLAST : quelques secondes / minutes
BLAST sur Internet
Séquence requête
14 séquences
retrouvées
par BLAST
La position des barres indique les alignements locaux
La couleur indique le score d'alignement
BLAST sur Internet
BLAST sur Internet
Quelle partie de cette protéine
est la mieux conservée ?
Exercice BLAST
Blast p : recherche d'une séquence protéique dans une banque de protéine
Blast n : recherche d'une séquence nucléotidique dans une banque d'ADN
Blast x : recherche d'une séquence nucléotidique dans une banque de protéine
t Blast n : recherche d'une séquence protéique dans une banque d'ADN
t Blast x : recherche d'une séquence nucléotidique dans une banque d'ADN
(comme Blast n), mais compare les protéines produites par gène et pas les gènes
eux-mêmes
Quel(s) BLAST utiliser dans les situations suivantes :
Une molécule thérapeutique marquée a permis d'extraire la protéine cible de
ce médicament, qui a ensuite été purifiée puis séquencée. On souhaite à
présent savoir de quelle protéine il s'agit ?
Un gène a été isolé chez E. Coli puis séquencé. On souhaite déterminer
quelle(s) est(sont) la(les) protéine(s) codée(s) par ce gène ?
L'enzyme de conversion de l'angiotensine est une protéase bien conservée au
cours de l'évolution. Le gène de cette protéine chez l'homme a été récupéré
dans la base EMBL, et on souhaite rechercher des gènes homologues chez
d'autres espèces éloignées ?
150
Exercice BLAST
Blast p : recherche d'une séquence protéique dans une banque de protéine
Blast n : recherche d'une séquence nucléotidique dans une banque d'ADN
Blast x : recherche d'une séquence nucléotidique dans une banque de protéine
t Blast n : recherche d'une séquence protéique dans une banque d'ADN
t Blast x : recherche d'une séquence nucléotidique dans une banque d'ADN
(comme Blast n), mais compare les protéines produites par gène et pas les gènes
eux-mêmes
Quel(s) BLAST utiliser dans les situations suivantes :
Une molécule thérapeutique marquée a permis d'extraire la protéine cible de
ce médicament, qui a ensuite été purifiée puis séquencée. On souhaite à
présent savoir de quelle protéine il s'agit ? => Blast p
Un gène a été isolé chez E. Coli puis séquencé. On souhaite déterminer
quelle(s) est(sont) la(les) protéine(s) codée(s) par ce gène ? => Blast x
L'enzyme de conversion de l'angiotensine est une protéase bien conservée au
cours de l'évolution. Le gène de cette protéine chez l'homme a été récupéré
dans la base EMBL, et on souhaite rechercher des gènes homologues chez
d'autres espèces éloignées ? => t Blast x
151
FASTA
Un autre algorithme pour rechercher des alignements locaux
S'utilise de manière similaire à BLAST
Plus ancien
Le format du logiciel FASTA est très utilisé pour représenter les
séquences
Ex : BLAST utilise ce format
http://fasta.bioch.virginia.edu
152
Résumé des méthodes
d'alignement de séquences
2 séquences :
DotPlot,
programmation dynamique
< 500 séquences :
Clustal W
Au-delà :
BLAST, FASTA
153
Programmation
en langage Python
Présentation de Python
Python est un langage de programmation
Facile à apprendre
De plus en plus utilisé
En général
Et en bioinformatique en particulier
Disponible en logiciel libre
À télécharger ici : http://www.python.org
Multiplateforme : Linux, Windows, Mac
Un grand nombre de modules complémentaires sont disponibles
Entre autre pour la bioinformatique
155
Présentation de Python
Programmation impérative
L'utilisateur donne des ordres à l'ordinateur
2 possibilités d'utilisation : ligne de commande / fichier
Interface en ligne de commande
Taper « python2 » dans un terminal
La touche <entrée> valide les commandes
En appuyant sur la touche <haut>, on peut récupérer la commande
précédente pour la modifier
On peut appuyer plusieurs fois sur <haut>
Création de fichiers de code source
Les commandes sont écrites dans un fichier « .py »
Une fois le fichier terminé, on l'exécute dans un terminal :
python nom_du_fichier.py
156
Le génie de la programmation
Appelez-moi « ordinateur » !
157
Le génie de la programmation
Ordinateur, calcule 2 + 2 !
Ok, calcul effectué sans erreur.
Tu ne m'as pas donné le résultat ?
Tu ne m'as pas demandé de l'afficher.
158
Le génie de la programmation
Ordinateur, calcule 2 + 2
et affiche le résultat !
4.
Ajoute encore 2 à ce résultat !
Tu ne m'a pas demandé de
garder le résultat en mémoire.
Je ne m'en souviens plus
donc recommence de zéro !
159
Le génie de la programmation
Ordinateur, calcule 2 + 2 et
appelle ce résultat « r » !
Affiche « r » !
4.
Ajoute 2 à « r » !
Affiche « r » !
6.
160
Le génie de la programmation
r=2+2
print(r)
4.
r=r+2
print(r)
6.
Ne jamais laisser le « génie »
avoir le dernier mot !
161
Présentation de Python
Commentaires
Les lignes qui commencent par # sont des commentaires et ne sont
pas prises en compte par Python :
# Ceci est un commentaire qui n'est pas pris
# en compte par Python !
Les commentaires sont destinés aux humains, pas à l'ordinateur
Ils facilitent la lecture et la compréhension du programme par
d'autres personnes (ou par soi-même quelques années plus tard !)
Affichage
La fonction print() permet d'écrire à l'écran (dans le terminal)
print(2 + 2)
print("Bonjour")
En ligne de commande, le print() peut être omis
2+2
162
Les variables
Une variable est un nom auquel on associe une valeur
La valeur est souvent connu seulement à l'exécution du programme (par
exemple elle résulte d'un calcul)
Chaque variable a un nom
Le nom commence par une lettre, il peut contenir des lettres, des chiffres et
des _ (éviter les accents), mais jamais d'espace ! On les remplace par _
Attention majuscules et minuscules sont différenciées !
Il est important de trouver des noms parlants
On crée une variable en lui donnant une valeur, avec =
age = 36
On obtient la valeur d'une variable en donnant son nom
print(age)
La valeur de la variable peut être modifiée avec =
age = 37
age = age + 1
163
Les types de données
Principaux types de données
Nombre entier (int) : ex 8
Flottant (nombre à virgule, float) : 64.5
Chaîne de caractères (texte, string / str) : "Lamy"
Booléen (bool) : True, False
Liste de plusieurs valeurs (list) : [1, 2, 3]
Dictionnaires (dict)
Quel est le type de donnée de la variable suivante ?
telephone = "01 48 38 73 34"
164
Opérations
Python peut effectuer les opérations courantes :
Addition : +
Soustraction : Multiplication : *
Division : /
Puissance : **
Modulo : %
Ces opérations peuvent s'appliquer sur différents types de donnée
somme = 2 + 2
concatenation = "ACT" + "GCC"
queue_poly_a = "A" * 20
165
Chaînes de caractères
Caractères spéciaux
Retour à la ligne : "\n"
Tabulation : "\t"
Antislash : "\\"
Chaînes avec des guillemets à l'intérieur
Tripler les guillemets extérieurs :
"""Il dit "Bonjour"."""
Alterner guillemets doubles et simples :
'Il dit "Bonjour".'
« Antislasher » les guillemets à l'intérieur de la chaîne :
"Il dit \"Bonjour\"."
166
Chaînes de caractères
Opérations sur les chaînes
Exemples :
arn = "GCCUGCUUA"
Obtenir la longueur d'une chaîne
(= le nombre de caractères)
len(arn)
=> 9
Obtenir un caractère de la chaîne
arn[0]
=> "G"
Obtenir une partie de la chaîne
arn[0:3]
=> "GCC"
Rechercher si une chaîne est
incluse dans une autre
"GCCUGCUUA".find("UGC")
=> 3 # Trouvé en position 3
(-1 si pas trouvé)
Passer une chaîne en minuscule
ou en majuscule
"AttCgcG".lower()
"AttCgcG".upper()
Demander à l'utilisateur de saisir
une chaîne
saisie = raw_input("Entrez un nom : ")
167
Conversions
Il est souvent nécessaire de convertir d'un type de donnée vers une
autre
Les fonctions int(), float() et str() permettent de convertir une valeur
vers un entier, un flottant et une chaîne de caractère
int("8")
str(8)
=> 8
=> "8"
raw_input() retourne toujours une chaîne de caractères ; il faut penser
à la transformer en entier ou en flottant si l'on demande la saisie d'un
nombre !
age = int(raw_input("Entrez votre âge : "))
poids = float(raw_input("Entrez votre poids : "))
168
Listes
Les listes contiennent zéros, un ou plusieurs éléments
Les éléments peuvent être de types différents
Les listes sont créées avec des crochets, les éléments sont donnés à
l'intérieur des crochets et séparés par des virgules
[0, "Lamy", True]
[ ] # Exemple de liste vide (zéro élément)
Pour obtenir un élément d'une liste, on utilise aussi des crochets
animaux = ["éléphant", "girafe", "rhinocéros", "gazelle"]
animaux[2]
=> "rhinocéros"
Le premier élément est numéroté 0
Il est aussi possible de compter à partir de la fin : le dernier élément
est alors numéroté -1, l'avant dernier -2, etc
len() permet d'obtenir le nombre d'élément
len(animaux)
169
Listes
Les listes peuvent être
modifiées
Exemples
animaux = ["éléphant", "girafe",
"rhinocéros", "gazelle"]
Ajouter un élément à la fin
animaux.append("lion")
Ajouter un élément à une
position donnée
animaux.insert(0, "hippopotame")
Enlever un élément
animaux.remove("gazelle")
Enlever un élément à une
position donnée
del animaux[-2]
Que contient alors la liste animaux ?
170
Algorithme
Un algorithme est une série d'ordre que la machine accomplit
Pour le dîner,
mange les restes
qui sont au frigo.
Maman
171
Algorithme
Un algorithme est une série d'ordre que la machine accomplit
Pour le dîner,
commande une
pizza par
téléphone.
Maman
172
Algorithme
On cherche un algorithme générique : qui convient à plusieurs
situations
Cela évite de réécrire un programme à chaque fois !
Pour le dîner,
s'il y a des restes au frigo :
mange ces restes.
sinon :
commande une pizza
par téléphone.
Maman
173
Algorithme
On cherche un algorithme générique : qui convient à plusieurs
situations
Conditions (si...) et boucles (pour chaque...)
Pour chaque jour de la semaine :
Pour le dîner,
s'il y a des restes au frigo :
mange ces restes.
sinon :
commande une pizza
par téléphone.
Maman
174
Algorithme
Bug !
5 jours de restes avalés en un seul dîner...
175
Conditions
Les conditions permettent d'exécuter des commandes seulement dans
certaines situations
if condition:
commande exécuté si la condition est vraie
commande exécuté si la condition est vraie…
suite du programme (exécuté que la condition soit vraie ou fausse)
Attention à l'indentation (= les espaces blancs en début de ligne)
La condition est une comparaison utilisant l'un des opérateurs suivants :
Inférieur à : <
Supérieur à : >
Inférieur ou égal à : <=
Supérieur ou égal à : >=
Égal à : == (ne pas confondre avec le = simple qui définit les variables)
Différent de : !=
176
Conditions
Exemple de condition :
age = int(raw_input("veuillez saisir votre âge : "))
if age >= 65 :
print("Vous êtes une personne âgée.")
print("L'année prochaine vous aurez " + str(age + 1) + " ans.")
Ici il n'y a qu'une seule commande à exécuté si la condition est vraie,
dans ce cas il est possible de tout mettre sur une seule ligne :
if age >= 65 : print("Vous êtes une personne âgée.")
177
Conditions
Il est possible d'ajouter plusieurs conditions successives, et un bloc
par défaut (else = sinon)
if condition1:
commande exécuté si condition1 est vraie
commande exécuté si condition1 est vraie…
elif condition2:
commande exécuté si condition1 est fausse et condition2 est vraie...
else:
commande exécuté si condition1 et condition2 sont fausses…
suite du programme (exécuté que les conditions soient vraies ou fausses)
178
Conditions
Exemple de condition :
age = int(raw_input("veuillez saisir votre âge : "))
if age == 0 :
print("Vous êtes un nouveau-né.")
elif age < 18 :
print("Vous êtes un enfant.")
elif age >= 65 :
print("Vous êtes une personne âgée.")
else :
print("Vous êtes un adulte.")
print("L'année prochaine vous aurez " + str(age + 1) + " ans.")
179
Conditions
Les conditions peuvent être imbriquées :
age = int(raw_input("veuillez saisir votre âge : "))
poids = float(raw_input("veuillez saisir votre poids : "))
if age == 0 :
print("Vous êtes un nouveau-né.")
if poids > 10.0 :
print("Je pense qu'il y a une erreur sur le poids !")
Les opérateurs and et or permettent de combiner plusieurs
conditions entre elles
if (age < 18) or (age > 65) :
print("Vous ne travaillez probablement pas.")
180
Boucles
Une boucle permet d'exécuter plusieurs fois les mêmes commandes
La boucle parcourt une liste
for variable in liste :
commande répétée plusieurs fois
commande répétée plusieurs fois
suite du programme (exécuté une seule fois)
La liste peut être une variable, ou bien une liste d'indice générée avec
la fonction range()
range(4)
=> [0, 1, 2, 3]
181
Boucles
Exemples
animaux = ["éléphant", "biche", "rhinocéros", "brochet"]
environnements = ["savane", "forêt", "savane", "rivière"]
Afficher un animal par ligne
for animal in animaux : print(animal)
print("C'est fini !")
Afficher un animal par ligne avec son numéro
for i in range(len(animaux)) :
print("Numéro " + str(i) + " : " + animaux[i])
print("C'est fini !")
Afficher un animal par ligne avec son environnement
for i in range(len(animaux)) :
print(animaux[i] + " dans la " + environnements[i])
182
Boucles
Boucles et conditions
Il est possible de mélanger boucles et conditions
La commande break permet d'interrompre la boucle
Que fait le programme suivant ?
À quoi sert le break dans ce programme ?
sequence_nucléotidique = "ACGAC…"
for base in sequence_nucléotidique :
if base == "T" :
print("C'est un ADN !")
break
elif base == "U" :
print("C'est un ARN !")
break
183
Boucles
Programme-type n°1 : compter les éléments d'une liste satisfaisant
certains critères
compteur = 0
for élément in liste :
if élément satisfait la condition :
compteur = compteur + 1
print(str(compteur) + " éléments trouvés")
Exemple : compter les acides aminés aromatiques d'une protéine
proteine = "MIWRAVHRF..."
nb_aromatique = 0
for aa in proteine :
if (aa == "F") or (aa == "Y") or (aa == "W") or (aa == "H"):
nb_aromatique = nb_aromatique + 1
print(str(nb_aromatique) + " acides aminés aromatiques dans la protéine")
184
Boucles
Programme-type n°2 : garder seulement les éléments d'une liste
satisfaisant certains critères
nouvelle_liste = [ ]
for élément in liste :
if élément satisfait la condition :
nouvelle_liste.append(élément)
print(nouvelle_liste)
Exemple : garder seulement les nombres pairs
nombres = [1, 4, 7, 8, 12, 15]
nombres_pairs = [ ]
for nombre in nombres :
if nombre % 2 == 0 :
nombres_pairs.append(nombre)
print(nombres_pairs)
185
Boucles
Programme-type n°3 : créer une nouvelle liste à partir d'une liste
existante
nouvelle_liste = [ ]
for élément in liste :
calculer nouvel_élément à partir de élément
nouvelle_liste.append(nouvel_élément)
print(nouvelle_liste)
Exemple : mettre les noms d'animaux au pluriel
animaux = ["girafe", "lion", "éléphant"]
couples_danimaux = [ ]
for animal in animaux :
couples_danimaux.append("deux " + animal + "s")
print(couples_danimaux)
186
Boucles
Les programmes-types n°2 et 3 peuvent aussi s'appliquer à des
chaînes de caractère
Exemple : calculer un ADN complémentaire
adn = "GCATTC..."
adn_complementaire = ""
# Chaîne vide
for base in adn :
if base == "A" : base_complementaire = "T"
elif base == "T" : base_complementaire = "A"
elif base == "C" : base_complementaire = "G"
elif base == "G" : base_complementaire = "C"
adn_complementaire = adn_complementaire + base_complementaire
print(adn_complementaire)
187
Séquences biologiques en Python
Le module BioPython permet de gérer les séquences biologiques
Charger des séquences
Depuis des fichiers FASTA
Depuis Internet
Effectuer la transcription et la traduction
Effectuer des alignements
Rechercher des motifs dans des séquences
Etc.
http://biopython.org
188
Séquences biologiques en Python
Deux types de donnée pour les séquences en Python :
Seq : une séquence anonyme (une suite de base / d'acide aminé)
SeqRecord : une séquence nommé, incluant :
La séquence proprement dite (un « Seq »)
Le nom du gène / de la protéine
Le nom de l'espèce auquel cette séquence appartient
L'identifiant de la séquence,…
SeqRecord : séquence nommée
>sp|P05231|IL6_HUMAN Interleukin-6 precursor (IL-6) - Homo sapiens (Human).
MNSFSTSAFGPVAFSLGLLLVLPAAFPAPVPPGEDSKDVAAPHRQPLTSSERIDKQIRYI
LDGISALRKETCNKSNMCESSKEALAENNLNLPKMAEKDGCFQSGFNEETCLVKIITGLL
EFEVYLEYLQNRFESSEEQARAVQMSTKVLIQFLQKKAKNLDAITTPDPTTNASLLTKLQ
AQNQWLQDMTTHLILRSFKEFLQSSLRALRQM
Seq :
séquence
anonyme
Un fichier FASTA correspond à un (ou plusieurs) SeqRecord
189
Séquences biologiques en Python
Chaque séquence est associée à un alphabet
Il y a des alphabets différents pour les ADN, les ARN et les protéines
ADN : ATCG
ARN : AUCG…
De plus, plusieurs alphabets sont disponibles pour un même type de
séquence :
ADN non-ambigu : ATCG
ADN ambigu : ATCGRYWSMKHBVDN
R = A ou G
H = A, C ou T,...
En général on travaille sur des séquences en alphabet non-ambigu
Ces alphabets ont été standardisés par l'IUPAC (International Union of
Pure and Applied Chemistry)
190
Séquences biologiques en Python
Les alphabets IUPAC sont disponibles :
IUPAC.unambiguous_dna
IUPAC.unambiguous_rna
IUPAC.ambiguous_dna
IUPAC.ambiguous_rna
IUPAC.protein
Pour créer une séquence (anonyme) d'ADN :
adn = Seq("ATGC", IUPAC.unambiguous_dna)
Pour charger une séquence (nommé) d'ADN depuis un fichier FASTA :
adn = read("fichier.fasta", format="fasta")
(note : l'alphabet est déduit automatiquement en général)
Pour obtenir la séquence anonyme (Seq) :
adn_anonyme = adn.seq
191
Téléchargement