Introduction à l`informatique pour biologistes Examen du semestre

Transcription

Introduction à l`informatique pour biologistes Examen du semestre
Introduction à l’informatique pour biologistes
Examen du semestre de printemps 2016
Cours 12X010
Le 27 juin 2016
Instructions
Cet examen dure 4 heures. L’heure de fin de l’examen sera annoncée oralement. Les
dernières minutes sont prévues pour la vérification du dépôt de vos fichiers sur Chamilo.
Tout travail rendu après l’heure de fin annoncée sera pénalisé. Si l’épreuve débute à temps,
l’examen durera de 8h30 à 12h30.
Il est formellement interdit de communiquer avec qui que ce soit pendant l’examen.
Ne vous connectez donc pas à un quelconque service de messagerie électronique, comme
une messagerie web (par ex. celui de l’université, Gmail, Yahoo! Mail, ...), une messagerie
instantanée (par ex. Google Talk, Windows Live Messenger, Messages, ...), ou tout autre
service de communication. Éteignez aussi tous vos dispositifs de communication mobiles :
ordinateur portable, téléphone mobile, smartphone, tablette, etc.
Dans votre code, choisissez des noms de variables en rapport avec leur rôle. Commentez votre code si nécessaire.
N’oubliez pas de sauvegarder régulièrement votre travail sur votre espace disque
pour éviter les mauvaises surprises en cas d’erreur de manipulation ou de plantage
de votre ordinateur.
Vous trouverez toutes les données nécessaires sur Chamilo dans le sous-répertoire :
Documents → Examens → Printemps 2016
Vous rendrez une archive ZIP dans laquelle se trouveront les fichiers que vous aurez
créés. L’archive doit être nommée login.zip (si votre login est toto5, votre archive est
nommée toto5.zip). vous déposerez votre archive sur Chamilo dans le sous-répertoire :
Travaux → Printemps 2016
Assurez-vous que tous vos fichiers se trouvent bien dans l’archive ZIP. Une fois vérifiée
la présence de votre fichier ZIP sur Chamilo, aucun nouveau fichier ne sera accepté.
La version déposée sur Chamilo est celle qui comptera pour la notation.
Lisez attentivement l’ensemble du sujet avant de commencer.
Section de biologie
Université de Genève
1
Examen du cours 12X010
Printemps 2016
Introduction
Le repliement d’une protéines ainsi que ses intéractions avec d’autres molécules (DNA,
lipides, autres protéines, etc.) dépend des propriétés physico-chimiques des acides aminés
qui la composent. Plusieurs de ces propriétés vous sont certainement familières telles que
la charge, la masse moléculaire, ou encore le pH isoélectrique Cependant, un très grand
nombre de ces propriétés a été publié (544 actuellement). De nombreuses recherches en
bioinformatique exploitent ces proriétés pour prédire, la forme, la fonction ou les intéractions d’une protéine dont on ne connaît que la séquence d’acides aminés. Toutes ces
propriétés ont été compilée dans un fichier texte nommé AAIndex, maintenu par l’Université de Kyoto.
Dans le cadre de cet examen, nous nous intéresseront principalement à l’index d’hydropathie de Kyte-Doolittle. Il s’agit d’une mesure d’hydrophobicité, c’est à dire de l’affinité
pour l’eau de l’acide aminé en question. Les acides-aminés ayant peu d’affinité pour l’eau
(hydrophobe) ont tendance à se retrouver à l’intérieur des protéines repliées et peuvent
intéragir avec d’autres molécules hydrophobes tels que des lipides. Au contraire, les acidesaminés ayant une forte affinité pour l’eau (hydrophiles), ont tendance à se retrouver à la
surface des protéines repliées et intéragissent avec d’autres molécules hydrophiles tels que
les résidus chargés. Dans le recueil AAindex l’index de Kyte-Doolittle apparaît tel qu’illustré
par la Fig. 1.
Nous nous intéresserons uniquement aux dernières lignes (à partir de la ligne qui débute par un I). Ces lignes décrivent les valeurs de chaque acide-aminé. Par exemple, l’alanine (A) a la valeur 1.8 (hydrophobe) alors que la lysine (K) à la valeur -3.9 (fortement
hydrophile). A partir d’une famille de protéines, nous allons définir la valeur moyenne de
l’index de Kyte-Doolittle position par position. Cela pourrait permettre, par exemple, de
définir l’existence de région hydrophobes caractéristiques à cette famille.
2
Marche à suivre
Le fichier aaindex.py contient un squelette du programme. Il vous faudra implémenter
toutes les fonctions dont l’entête est précédé par le commentaire : #IMPLEMENTER.
Chaque fonction est fournie avec une implémentation correcte du point de vue de python. Etudiez bien ces implémentations factices car elles vous indiquent le type de retour
attendu. Si vous n’arrivez pas à implémenter une fonction, vous pouvez utiliser l’implémentation fournie pour implémenter les autres, au lieu de rester bloqué-e. Cette implémentation vous donne également une idée de la forme que doivent prendre les valeurs
retournées par la fonction.
Vous pouvez ajouter des fonctions supplémentaires si cela vous aide à implémenter les
fonctions demandées. Évitez d’ajouter du code en dehors des fonctions (sauf éventuellement pour tester votre code).
3 /6
Section de biologie
Université de Genève
Examen du cours 12X010
Printemps 2016
F IGURE 1 – Exemple de propriété physico-chimique au format AAIndex : l’index de KyteDoolittle (contenu du fichier fourni 'kd.index').
H
D
R
A
T
J
C
KYTJ820101
Hydropathy index (Kyte-Doolittle, 1982)
LIT:0807099 PMID:7108955
Kyte, J. and Doolittle, R.F.
A simple method for displaying the hydropathic character of a protein
J. Mol. Biol. 157, 105-132 (1982)
JURD980101
0.996 CHOC760103
0.964 OLSK800101
0.942
JANJ780102
0.922 NADH010102
0.920 NADH010101
0.918
DESM900102
0.898 EISD860103
0.897 CHOC760104
0.889
NADH010103
0.885 WOLR810101
0.885 RADA880101
0.884
MANP780101
0.881 EISD840101
0.878 PONP800103
0.870
WOLR790101
0.869 NAKH920108
0.868 JANJ790101
0.867
JANJ790102
0.866 BASU050103
0.863 PONP800102
0.861
MEIH800103
0.856 NADH010104
0.856 PONP800101
0.851
PONP800108
0.850 CORJ870101
0.848 WARP780101
0.845
COWR900101
0.845 PONP930101
0.844 RADA880108
0.842
ROSG850102
0.841 DESM900101
0.837 BLAS910101
0.836
BIOV880101
0.829 RADA880107
0.828 BASU050101
0.826
KANM800104
0.824 LIFS790102
0.824 CIDH920104
0.824
MIYS850101
0.821 RADA880104
0.819 NAKH900111
0.817
CORJ870104
0.812 NISK800101
0.812 FAUJ830101
0.811
ROSM880105
0.806 ARGP820103
0.806 CORJ870103
0.806
NADH010105
0.804 NAKH920105
0.803 ARGP820102
0.803
CORJ870107
0.801 MIYS990104 -0.800 CORJ870108 -0.802
KRIW790101 -0.805 MIYS990105 -0.818 MIYS990103 -0.833
CHOC760102 -0.838 MIYS990101 -0.840 MIYS990102 -0.840
MONM990101 -0.842 GUYH850101 -0.843 FASG890101 -0.844
RACS770102 -0.844 ROSM880101 -0.845 JANJ780103 -0.845
ENGD860101 -0.850 PRAM900101 -0.850 JANJ780101 -0.852
GRAR740102 -0.859 PUNT030102 -0.862 GUYH850104 -0.869
MEIH800102 -0.871 PUNT030101 -0.872 ROSM880102 -0.878
KUHL950101 -0.883 GUYH850105 -0.883 OOBM770101 -0.899
I
A/L
R/K
N/M
D/F
C/P
Q/S
E/T
G/W
H/Y
1.8
-4.5
-3.5
-3.5
2.5
-3.5
-3.5
-0.4
-3.2
3.8
-3.9
1.9
2.8
-1.6
-0.8
-0.7
-0.9
-1.3
//
4 /6
I/V
4.5
4.2
Section de biologie
Université de Genève
2.1
Examen du cours 12X010
Printemps 2016
Lecture des séquences de protéines
Implémentez la fonction readSeq qui se charge de lire les séquences de protéines à
partir d’un fichier et les tronque à la longueur souhaitée. Cette fonction retourne une liste
de protéines (liste de chaînes de caractères). Les arguments sont le nom du fichier contenant les séquences et la longueur souhaitée. Le fichier fourni, sequences.txt, contient 10
séquences différentes, une par ligne.
Exemple d’utilisation :
>>> readSeq( "sequences.txt", 5 )
['MTWQD', 'MTFIK', 'MSELL', 'MFSAL', 'MLKLL', 'MRYIK',
'MRYSA', 'MKQSA', 'MSEFI', 'MKYIK']
2.2
Lecture de la propriété physico-chimique (difficile)
Implémentez la fonction readIndex qui lit un fichier contenant une propriété physicochimique au format AAIndex et retourne un dictionnaire associant une valeur numérique à
chaque acide-aminé.
Cette fonction est clairement la partie la plus difficile de l’examen. Il est conseillé de la
garder pour la fin de l’examen et d’utiliser la pseudo-implémentation fournie pour répondre
aux autres questions. Si votre implémentation est correcte, elle doit fonctionner avec les
fichiers fournis kd.index et weight.kd. Il existe de nombreuses stratégies possibles, mais
essayer de décomposer le problème en plusieurs étapes et préférez la simplicité. Les expressions régulières peuvent aider, mais ne sont pas obligatoires.
Exemple d’utilisation :
>>> readIndex( "kd.index" )
{'W': -0.9, 'V': 4.2, 'P': -1.6, 'T': -0.7, 'N': -3.5, 'A': 1.8, 'G': -0.4,
'C': 2.5, 'I': 4.5, 'E': -3.5, 'S': -0.8, 'M': 1.9, 'Q': -3.5, 'K': -3.9,
'F': 2.8, 'R': -4.5, 'Y': -1.3, 'L': 3.8, 'H': -3.2, 'D': -3.5}
2.3
Evaluation d’une séquence
Implémentez la fonction evalSeq qui prend en argument une séquence de protéines et
une propriété physico-chimique (dictionaire, tel que décrit dans le point précédent).
La fonction devra retourner une liste de la même longueur que la séquence où chaque
acide aminé est remplacé par sa valeur dans la propriété passée en argument. Par exemple :
>>> kd = readIndex( "kd.index" )
>>> evalSeq( "MAACCDDD", kd )
[1.9, 1.8, 1.8, 2.5, 2.5, -3.5, -3.5, -3.5]
5 /6
Section de biologie
Université de Genève
2.4
Examen du cours 12X010
Printemps 2016
Evaluation d’une liste de séquence
Implémentez la fonction evalAllSeq qui prend en argument une liste de séquences de
protéines, ainsi qu’une propriété physico-chimique (cf. point précédent). Elle retourne une
liste de liste de nombres, correspondant au résultat de l’évaluation de chaque séquence.
Par exemple :
>>> evalAllSeq( ["MAA", "MCC", "MDD"], kd )
[[1.9, 1.8, 1.8], [1.9, 2.5, 2.5], [1.9, -3.5, -3.5]]
Pour vous simplifier le travail, cette fonction fera appel à la fonction evalSeq définie
ci-dessus.
2.5
Moyenne des colonnes
Implémentez la fonction averageCol qui prend en argument un tableau de nombres
représenté par une liste de liste de nombres. Cette fonction retournera la moyenne de
chaque colonne dans une liste. Par exemple :
>>> averageCol( [ [1, 2, 3],
[2, 2, 3],
[3, 2, 1] ] )
[2.0, 2.0, 2.3333333333333335]
2.6
Profil d’une famille de protéines
Finalement, implémentez la fonction seqAverage qui calcule la moyenne d’une propriétéphysico chimique d’une famille de protéines, position par position. Elle prend en argument,
une liste de séquences de protéines, et une propriété physico-chimique (dictionnaire tel
que défini dans les points précédents). Elle retournera une liste de valeurs numériques. Par
exemple, avec les fichiers fournis :
>>> seqs = readSeq( "sequences.txt", 10 )
>>> kd = readIndex( "kd.index" )
>>> seqAverage( seqs, kd )
[1.9, -1.32, -1.72, 2.0599999999999996, 0.4299999999999999, 1.1300000000000001,
1.2, 0.5999999999999999, -0.03000000000000016, 0.18999999999999986]
6 /6

Documents pareils