Python - NumPy Sup`Biotech 2

publicité
TP
Python - NumPy
Sup'Biotech 2
Edouard Véron, Thibaut Baroyer
Mardi 21 février 2017
TP: Python - NumPy
2016 - 2017
Préambule
Propriété du document
Auteurs
Version
Nombre de pages
Edouard Véron, Thibaut Baroyer
1.0
7
Contact
Contacter l'équipe assistante à l'adresse suivante: supbiotech-bioinfo-bt2@googlegroups.
com
Copyright
Ce document est destiné aux étudiants de Sup'Biotech 2. Ce dernier a été téléchargé depuis
www.intranet.supbiotech.fr. Si ce n'est pas le cas, contacter l'auteur à l'adresse indiquée plus
haut.
c Assistants Sup'Biotech 2016.
1 /7
TP: Python - NumPy
2016 - 2017
Table des matières
1
2
3
Introduction
2
Consignes
2
2.1 Modalités de rendu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Deadlines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sujet
3.1 Revenons aux basiques . . . . . . . . .
Exercice 1 Coco . . . . . . .
Exercice 2 Test d'ADN . . . .
Exercice 3 Score d'alignement . .
3.2 Numpy . . . . . . . . . . . . . . . . . .
Exercice 4 Matrice symétrique . .
Exercice 5 Concaténation. . . .
Exercice 6 Matrice paire . . . .
Exercice 7 Indice du max. . . .
Exercice 8 Diminution de matrice.
Exercice 9 Somme de matrices . .
1
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .
.
.
.
. .
.
.
.
.
.
.
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
2
3
3
3
3
4
4
5
5
5
6
6
6
7
Introduction
L'objectif de ce TP est de valider vos acquis en Python.
Pour cela, les exercices qui vous sont demandés font appel à toutes les notions dans ce langage
vues depuis le début de vos études à Sup'Biotech.
2
Consignes
Le TP est à réaliser par groupe de 1, 2 ou 3 personnes (maximum). Vous devrez rendre le
code de votre projet selon les modalités décrites ci-dessous.
2.1
Modalités de rendu
Le rendu se fera sur l'intranet de rendu habituel (http://supbiotech-bioinfo.sites.djangoeurope.
com). Pour pouvoir rendre votre archive, vous devrez donc créer votre groupe sur l'intranet et y
ajouter tous les membres.
Votre code sera corrigé par un programme automatique, qui testera vos fonctions indépendamment les unes des autres et comparera leur résultat selon ce qui est demandé dans l'exercice
correspondant. Vous devez donc rendre des chiers de code .py ne contenant que les fonctions qui
vous sont demandées, et respectant l'architecture de rendue dénie plus bas.
Ces chiers doivent se trouver dans une archive zip, dont le nom doit respecter la norme
suivante : tp-04-login_l.zip, où login_l est à remplacer par le plus petit login des membres du
groupe en considérant l'ordre lexicographique.
En cas de doute, utilisez python :
>>> min("faudra_a", "fau_b", "fau-ra_c")
fau-ra_c
L'architecture du rendu attendue est la suivante :
2 /7
TP: Python - NumPy
2016 - 2017
+ tp-04-login_l.zip
|- easy.py
|- medium.py
|- hard.py
Remarquez que les chiers se trouvent à la racine de l'archive (et non pas dans un dossier).
Conseil : avant de commencer à vous plonger dans votre code, et même à lire la suite du
sujet, assurez-vous que vous savez comment faire pour rendre le TP en respectant les modalités
de rendu : créez-vous un dossier de travail contenant les chiers Python (vides pour le moment)
selon l'architecture demandée, puis faites votre Zip comme si vous rendiez. Assurez-vous ensuite
que votre archive n'est pas corrompue. Pour le tester, vous pouvez par exemple essayer de l'ouvrir
sur l'ordinateur d'un autre membre de votre groupe.
2.2
Deadlines
Ce TP est à rendre avant ce soir 23h42.
3
Sujet
Chaque exercice est indépendant, vous pouvez donc les faire dans l'ordre que vous voulez.
Voici le tableau de correspondances chier -> fonctions demandées.
Fichier
easy.py
medium.py
hard.py
3.1
Fonctions
parrot, is_odd, my_sum
is_dna_rec, is_symetric, score_dummy, remove
extend, array_max_coords, score
Revenons aux basiques
Commençons par nous remettre dans le Python, et à nous assurer que les bases sont toujours
bien là.
Exercice 1: Coco
Écrire la fonction parrot(s: string) -> int qui ache la chaîne de caractères s et retourne
le nombre de caractères qu'elle contient :
In [1]: parrot("perroquet")
perroquet
Out[1]: 9
Si la chaîne de caractère est vide, votre fonction devra avoir le comportement suivant :
In [1]: parrot("")
coco
Out[1]: 4
3 /7
TP: Python - NumPy
2016 - 2017
Exercice 2: Test d'ADN
Écrire la fonction is_dna_rec(seq: string) -> bool qui retourne True ssi la chaîne de caractères seq est de l'ADN. Votre fonction doit impérativement être récursive !
In [1]: is_dna_rec("ACCCC")
Out[1]: True
In [2]: is_dna_rec("ACTQA")
Out[2]: False
In [3]: is_dna_rec("")
Out[3]: True
Exercice 3: Score d'alignement
Un algorithme nous retourne deux séquences alignées x, y mais pas le score de l'alignement.
On souhaite donc retrouver ce score en partie, correspondant uniquement au score des correspondances/substitutions, calculé selon une matrice de substitution M :
In [0]: from numpy import array
In [1]: M = array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])
In [2]: score_dummy("", "", M)
Out[2]: 0
In [3]: score_dummy("AATCGCCT---GATGGCGA", "AA-CACCTGTTGAA--CGA", M)
Out[3]: 11
Vous devez donc écrire la fonction score_dummy(x: string, y: string, M: array) -> int
qui retourne le score de l'alignement comme déni plus haut. Vous devez utiliser la builtin Python zip (vous référer à la documentation sur internet).
On suppose que les 2 séquences x et y sont de même taille, et que la matrice M (qui représente
la fameuse matrice Σ) est sous la forme suivante (prêtez bien attention à l'ordre des nucléotides
A, T , G et C correspondant aux indices de la matrice) :
A T G C
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
Bonus : Écrire la fonction score(x: string, y: string, M: array, g: function) -> int
qui calcule le score complet de l'alignement, c'est-à-dire qu'il prend également en compte les trous,
dont le score est calculé selon la fonction d'évaluation de trous g :
A
Σ= T
G
C
In [0]: from numpy import array
4 /7
TP: Python - NumPy
2016 - 2017
In [1]: M = array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])
In [2]: def g(x): return -0.5*len(x)
In [3]: score("", "", M, g)
Out[3]: 0
In [4]: score("AATCGCCT---GATGGCGA", "AA-CACCTGTTGAA--CGA", M, g)
Out[4]: 8
3.2
Numpy
Voici maintenant quelques exercices courts dont le but est de vous montrer que Numpy est
votre ami lorsqu'il s'agit de manipuler des tableaux.
Exercice 4: Matrice symétrique
En une ligne, écrire la fonction is_symetric(M -> array) -> boolean qui renvoie True ssi
la matrice M est symétrique, False sinon.
Exercice 5: Concaténation
Écrire la fonction extend(M -> array, r -> array, c -> array) -> array qui ajoute à la
matrice M une nouvelle ligne correspondant à r, puis une nouvelle colonne correspondant à c. On
suppose que r et c sont de la bonne taille :
In [0]: from numpy import array
In [1]: a = array([[1, 2], [4, 5], [7, 8]])
In [2]: a
Out[2]:
array([[ 1, 2],
[ 4, 5],
[ 7, 8]])
In [3]: extend(a, array([10, 11]), array([3, 6, 9, 12]))
Out[3]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
Indice :
utile...
la fonction append est votre amie ! Et sa documentation sur internet vous serait bien
5 /7
TP: Python - NumPy
2016 - 2017
Exercice 6: Matrice paire
En une ligne, écrire la fonction is_odd(M -> array) -> boolean qui renvoie True ssi la matrice M ne contient que des nombres pairs, False sinon.
Exercice 7: Indice du max
A partir d'un array A (de dimension quelconque), nous souhaitons récupérer les coordonnées
du plus grand nombre qu'elle contient (s'il y en a plusieurs, nous voulons les coordonnées de la
première occurrence). Écrire la fonction array_max_coords(A -> array) -> tuple of int qui
permette de récupérer ces coordonnées :
In [0]: from numpy import array
In [1]: a = array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
In [2]: a
Out[2]:
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
In [3]: array_max_coords(a)
Out[3]: (3, 3)
In [4]: a = array([[1, 2, 3, 4], [5, 6, 77, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
In [5]: a
Out[5]:
array([[ 1, 2, 3, 4],
[ 5, 6, 77, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
In [6]: array_max_coords(a)
Out[6]: (1, 2)
Attention :
votre fonction ne doit pas faire plus de 2 lignes
Conseil : Numpy fournit toutes les fonctions qu'il faut pour arriver au résultat tout en respectant les contraintes
Indice :
demandez-le moi durant le TP et je vous le donnerais si j'estime que c'est mérité
Exercice 8: Diminution de matrice
Écrire la fonction remove(M -> array, r -> int, c -> int) -> array qui supprime la
ligne d'indice r puis la colonne d'indice c de la matrice M :
6 /7
TP: Python - NumPy
2016 - 2017
In [0]: from numpy import array
In [1]: a = array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
In [2]: a
Out[2]:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
In [3]: delete(a, 2, 1)
Out[3]:
array([[ 1, 3],
[ 4, 6],
[10, 12]])
Exercice 9: Somme de matrices
Nous vous demandons ici d'écrire la fonction my_sum(M1 -> array, M2 -> array) -> array
qui eectue la somme des 2 matrices M1 et M2, que l'on suppose être de même taille.
7 /7
Téléchargement