SlideShare une entreprise Scribd logo
1  sur  62
Télécharger pour lire hors ligne
Python avancé
                  Pierre Poulain
   pierre.poulain@univ-paris-diderot.fr

                       M2 BI – 09/2011
À l’exception des illustrations et images dont les crédits sont indiqués
à la fin du document et dont les droits appartiennent à leurs auteurs
respectifs, le reste de ce cours est sous licence Creative Commons
Paternité (CC-BY).
http://creativecommons.org/licenses/by/2.0/fr/




PP                         Université Paris Diderot - Paris 7              2
Menu


 1   Introduction / rappels                6     Biopython

 2   Bonnes pratiques                      7     Programmation objet

 3   Gestion des erreurs                   8     Tkinter

 4   Numpy                                 9     Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7             3
Menu


 1   Introduction / rappels                6     Biopython

 2   Bonnes pratiques                      7     Programmation objet

 3   Gestion des erreurs                   8     Tkinter

 4   Numpy                                 9     Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7             4
Python, langage :




     interprété à bytecode
     multi-plateforme
     orienté objet (classes) « tout est objet »




PP                       Université Paris Diderot - Paris 7   5
Python, langage : (2)
     « batteries included » nombreux modules fournis en
     standard (math, random, sys, os, re, urllib2, Tkinter)




     modules extérieurs (numpy, Biopython, rpy)
     une bibliothèque doit exister pour votre problème
     (sinon écrivez la)

Objectif
Tour d’horizon de quelques fonctionnalités avancées
(modules, classes, astuces)
PP                       Université Paris Diderot - Paris 7   6
Menu


 1   Introduction / rappels                6     Biopython

 2   Bonnes pratiques                      7     Programmation objet

 3   Gestion des erreurs                   8     Tkinter

 4   Numpy                                 9     Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7             7
Localisation Python et UTF-8


     1   Dire où se trouve Python
     2   Gérer les caractères accentués




                    #! /usr/bin/env python
                    # -*- coding: utf-8 -*-




PP                         Université Paris Diderot - Paris 7   8
Optimisation et itérations des boucles
toto = range( 1000000 )

# methode 1
for i in range( len(toto) ):
    print toto[i]

# methode 2
for ele in toto:
    print ele

# methode 3
for i in xrange( len(toto) ):
    print toto[i]
Quelle méthode est la plus rapide ?
1. for x in y
2. for z in xrange(len(y))
3. for z in range(len(y)) (très lente)
PP                     Université Paris Diderot - Paris 7   9
Listes de compréhension
List comprehensions

Générer une liste à la volée à partir d’une boucle for
[operation sur élément for élément in liste condition]


Exemples :
>>> toto = [1, 3, 6, 9]
>>> [i**2 for i in toto]
[1, 9, 36, 81]

>>> [i**2 for i in toto if i>3]
[36, 81]

>>> seq = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
>>> width = 60
>>> print "n".join([seq[i:i+width] for i in xrange(0, len(seq), width)])
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAA



PP                         Université Paris Diderot - Paris 7        10
Menu


 1   Introduction / rappels                6      Biopython

 2   Bonnes pratiques                      7      Programmation objet

 3   Gestion des erreurs                   8      Tkinter

 4   Numpy                                 9      Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7              11
Gestion des erreurs



But
Éviter le plantage d’un programme Python
     anticiper les erreurs
     et les intercepter




PP                    Université Paris Diderot - Paris 7   12
Exemple
>>> nb = int(raw_input("Entrez un nombre: "))
Entrez un nombre: 23
>>> print nb
23


Mais si...
>>> nb = int(raw_input("Entrez un nombre: "))
Entrez un nombre: ATCG

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'ATCG'


int() ne peut pas convertir "ATCG" en entier.

PP                    Université Paris Diderot - Paris 7   13
Try / except

>>> try:
...     nb = int(raw_input("Entrez un nombre: "))
... except:
...     print "Vous n'avez pas entré un nombre !"
...

Entrez un nombre: ATCG
Vous n'avez pas entré un nombre !




try permet de « tenter » une instruction.
En cas de problème, except prend la main.



PP                   Université Paris Diderot - Paris 7   14
Try / except et les fichiers


>>> nom = "toto.pdb"
>>> try:
...     f = open(nom, "r")
... except:
...     print "Impossible d'ouvrir le fichier", nom




Fichier absent ou problème de droits en lecture © exception.




PP                     Université Paris Diderot - Paris 7      15
Typage des exceptions

>>> try:
...     nb = int(raw_input("Entrez un nombre: "))
... except ValueError:
...     print "Vous n'avez pas entre un nombre !"
...
Entrez un nombre: ATCG
Vous n'avez pas entre un nombre !



ValueError   © problème de conversion (avec int())


RuntimeError, TypeError, IOError



PP                     Université Paris Diderot - Paris 7   16
Menu


 1   Introduction / rappels                6      Biopython

 2   Bonnes pratiques                      7      Programmation objet

 3   Gestion des erreurs                   8      Tkinter

 4   Numpy                                 9      Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7              17
Numpy (Numerical Python)

http://numpy.scipy.org


Bibliothèque de base pour le calcul numérique
     objet de type array à n-dimensions (matrices)
     algèbre linéaire (de base)
     transformée de Fourier (de base)
     générateur de nombre aléatoire (avancé)


 graphiques © autre modules (rpy, matplotlib)



PP                     Université Paris Diderot - Paris 7   18
Objets de type array
Chargement du module numpy
 import numpy


Définition d’un vecteur
 vector1 = numpy.array([1,2,3,4])
 vector1
array([1, 2, 3, 4])


Construction automatique d’un vecteur
 data = numpy.arange(5)
 data
array([0, 1, 2, 3, 4])
 numpy.arange() ∼ range()


PP                       Université Paris Diderot - Paris 7   19
Objets de type array (2)




Opération vectorielle
 data = numpy.arange(5)
 data + 0.1
array([ 0.1, 1.1, 2.1, 3.1,                     4.1])




PP                      Université Paris Diderot - Paris 7   20
Redimensionnement
 v = numpy.arange(4)
 v
array([0, 1, 2, 3])
 numpy.reshape(v, (2,2))
array([[0, 1],
       [2, 3]])

array v doit avoir un nombre d’éléments compatibles avec la
nouvelle matrice 2 x 2

 w = numpy.arange(4)
 numpy.resize(w, (3,2))
array([[0, 1],
       [2, 3],
       [0, 1]])

array w peut contenir un nombre quelconque d’éléments

PP                   Université Paris Diderot - Paris 7   21
01

Création d’une matrice de 0
 numpy.zeros((3,3))
array([[ 0., 0., 0.],
       [ 0., 0., 0.],
       [ 0., 0., 0.]])


Création d’une matrice de 1
 numpy.ones((2,2))
array([[ 1., 1.],
       [ 1., 1.]])
 numpy.ones((2,2), int)
array([[1, 1],
       [1, 1]])



PP                    Université Paris Diderot - Paris 7   22
Dimensions



   mat = numpy.reshape(numpy.arange(81), (9,9))
   numpy.shape(mat)
(9,   9)
   print mat.shape
(9,   9)




PP                    Université Paris Diderot - Paris 7   23
Extraction

 a = numpy.resize(numpy.arange(9), (3,3))
 a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

 a [1,:]        # 2e ligne
array([3, 4, 5])

 a [:,2]        # 3e colonne
array([2, 5, 8])

 a [2,2]        # élément de la 3e ligne et 3e colonne
8



PP                  Université Paris Diderot - Paris 7   24
Algèbre linéaire
 a = numpy.array([[1,2], [3,4]])
 a
array([[1, 2],
       [3, 4]])

Multiplication de matrices
 numpy.dot(a, a)
array([[ 7, 10],
       [15, 22]])

Inversion de matrice
 from numpy import linalg
# importation du module d'algebre lineaire
 inv_a = linalg.inv(a)
 inv_a
array([[-2. , 1. ],
       [ 1.5, -0.5]])

PP                      Université Paris Diderot - Paris 7   25
Valeurs et vecteurs propres
 a = numpy.resize(numpy.arange(9), (3,3))
 a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])



 import numpy.linalg as linalg
 eig_val, eig_vec = linalg.eig(a)
 eig_val
array([ 1.33484692e+01, -1.34846923e+00, -2.48477279e-16])
 eig_vec
array([[ 0.16476382, 0.79969966, 0.40824829],
       [ 0.50577448, 0.10420579, -0.81649658],
       [ 0.84678513, -0.59128809, 0.40824829]])

 utile pour connaître les axes principaux d’inertie d’une
molécule

PP                        Université Paris Diderot - Paris 7   26
Menu


 1   Introduction / rappels                6      Biopython

 2   Bonnes pratiques                      7      Programmation objet

 3   Gestion des erreurs                   8      Tkinter

 4   Numpy                                 9      Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7              27
Rpy (R for Python)
utilisation des fonctions de R dans Python
http://rpy.sourceforge.net/
 from rpy import r as R
 R.plot(range(10), main=Test RPy, xlab=x, ylab=y)




PP                     Université Paris Diderot - Paris 7   28
Exemple
Nombre de chaque base pour la séquence
ACGATCATAGCGAGCTACGTAGAA




PP                      Université Paris Diderot - Paris 7   29
Exemple
# -*- coding: utf-8 -*-

from rpy import r as R

seq = ACGATCATAGCGAGCTACGTAGAA
seq2 = list( seq )

R.png(rpy_test.png, width=800, height=800, pointsize=30)
# tri des bases car unique() n'ordonne pas les données
# alors que table() le fait
seq3 = R.sort( seq2 )
# listes des bases présentes
bases = R.unique( seq3 )
# effectif de chaque base
effectifs = R.table( seq3 )
# dessin du barplot et sauvegarde de la position des abscisses
coords = R.barplot( effectifs, ylab=nombre de bases)
# ajout du texte pour l'axe des abscisses
R.text(coords, -0.5, bases, xpd = True, cex = 1.2, font = 2 )
# fermeture du graphique
R.dev_off()


 dev_off()
PP                        Université Paris Diderot - Paris 7     30
Menu


 1   Introduction / rappels                6      Biopython

 2   Bonnes pratiques                      7      Programmation objet

 3   Gestion des erreurs                   8      Tkinter

 4   Numpy                                 9      Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7              31
Biopython
http://biopython.org



     manipulations de séquences (ADN, ARN, protéine)
     interrogations de banques de données biologiques
     (ExPASy, Entrez [NCBI], SCOP)
     recherches BLAST
     alignements multiples (clustalw)
     lectures de fichiers PDB
     ...

Très bon tutoriel à http://www.biopython.org/DIST/docs/
tutorial/Tutorial.html


PP                     Université Paris Diderot - Paris 7   32
Manipulation de séquences

Définition d’un alphabet (ADN, ARN, protéine)
 from Bio.Alphabet import IUPAC
# module Biopython s'appelle Bio
# IUPAC = International Union of Pure and Applied Chemistry



Définition d’un objet séquence
 my_dna_alphabet = IUPAC.unambiguous_dna
 from Bio.Seq import Seq
 my_seq = Seq('CATCCCTTCGATCGGGGCTATAGCTAGC',my_dna_alphabet)
 print my_seq
CATCCCTTCGATCGGGGCTATAGCTAGC
 my_seq
Seq('CATCCCTTCGATCGGGGCTATAGCTAGC', IUPACUnambiguousDNA())




PP                        Université Paris Diderot - Paris 7       33
Manipulation de séquences (2)


Propriétés des chaînes de caractères
 print my_seq[4:12]
CCTTCGAT
 print len(my_seq)
28
 new_seq = my_seq[0:5]
 new_seq
Seq('CATCC', IUPACUnambiguousDNA())
 my_seq + new_seq
Seq('CATCCCTTCGATCGGGGCTATAGCTAGCCATCC', IUPACUnambiguousDNA())




PP                        Université Paris Diderot - Paris 7      34
Interrogation d’Entrez I



 from Bio import Entrez         # chargement du module

# definition de l'e-mail, obligatoire pour eviter les abus
 Entrez.email = votremail@provider.fr




PP                  Université Paris Diderot - Paris 7      35
Interrogation d’Entrez II
# requete dans la base de donnees pubmed
# des termes small heat shock proteins
 ma_req = Entrez.esearch(db=pubmed, 
... term=small heat shock proteins, retmax=50)

# recuperation des resultats
# sous la forme d'un dictionnaire
 mon_res = Entrez.read(ma_req)

# clefs disponibles
 print(mon_res.keys())
[u'Count', u'RetMax', u'IdList', u'TranslationStack',
u'TranslationSet', u'RetStart', u'QueryTranslation']

# liste des identifiants pubmed
 print(mon_res[IdList])
['20679393', '20668846', '20668218', ...]


PP                  Université Paris Diderot - Paris 7   36
Interrogation d’Entrez III
# requete sur un article en particulier
 requete = Entrez.esummary(db=pubmed, id='20668846')

# lecture du resultat
# sous forme d'une liste de dictionnaire
 res_parse = Entrez.read(requete)

# clefs disponibles
 print(res_parse[0].keys())
['DOI', 'Title', 'Source', 'PmcRefCount', 'Issue', ...]

# affiche du titre
 res_parse[0][Title]
'Characterization of Xanthomonas campestris pv. campestris
heat shock protein A (HspA), which possesses an intrinsic
ability to reactivate inactivated proteins.'



PP                  Université Paris Diderot - Paris 7    37
En résumé


Biopython
    puissant
    polyvalent
    la syntaxe change régulièrement
    le format des bases des données aussi...


Exemple plus poussé pendant le TP.




PP                    Université Paris Diderot - Paris 7   38
Menu


 1   Introduction / rappels                6      Biopython

 2   Bonnes pratiques                      7      Programmation objet

 3   Gestion des erreurs                   8      Tkinter

 4   Numpy                                 9      Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7              39
Programmation objet et classe
Une minuscule introduction




Une classe définit des objets qui sont des instances
(∼ représentants) de cette classe.




Les objets possèdent des attributs (∼ variables) et des
méthodes (∼ fonctions) associés à cette classe.




 PP                          Université Paris Diderot - Paris 7   40
Programmation objet et classe (2)




PP             Université Paris Diderot - Paris 7   41
Quelques propriétés

Encapsulation. Interface (attributs ou méthodes) « publique ».
Possibilité d’interface « privée ».


Polymorphisme. Transformation des opérateurs standards (*,
+, /, -) suivant le contexte.


Héritage mutliple. Création de sous-classes héritant des
propriétés de la classe mère.


Python © programmation objet implicite.



PP                     Université Paris Diderot - Paris 7        42
Exemple de classe Rectangle()
class Rectangle:
    ceci est la classe Rectangle

     def __init__(self, long = 0.0, larg = 0.0, coul = blanc):
      initialisation d'un objet (constructeur)
         self.longueur = long
         self.largeur = larg
         self.couleur = coul

     def calcule_surface(self):
      calcule la surface
         return self.longueur * self.largeur

     def change_carre(self, cote):
      transforme un rectangle en carre
         self.longueur = cote
         self.largeur = cote



 self désigne l’objet lui-même et est obligatoire.

PP                         Université Paris Diderot - Paris 7      43
Utilisation de la classe Rectangle()
# creation d'un objet Rectangle avec les parametres par defaut
 rect1 = Rectangle()

# affichage des attributs
 print rect1.longueur, rect1.largeur, rect1.couleur
0.0 0.0 blanc

# calcul de la surface
 print rect1.calcule_surface()
0.0

# on change le rectangle en carre
 rect1.change_carre(30)
 print rect1.calcule_surface()
900

# creation d'un objet Rectangle avec des parametres imposes
 rect2 = Rectangle(2, 3, rouge)
 print rect2.calcule_surface()
6




PP                        Université Paris Diderot - Paris 7     44
Autres attributs redéfinissables

     __add__(self, other) opérateur +

     __mul__(self, number) opérateur *

     __del__(self) destructeur

     __len__(self) opérateur len (taille)

     __getslice__(self, low, high) tranchage

     etc.


PP                      Université Paris Diderot - Paris 7   45
Menu


 1   Introduction / rappels                6      Biopython

 2   Bonnes pratiques                      7      Programmation objet

 3   Gestion des erreurs                   8      Tkinter

 4   Numpy                                 9      Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7              46
Tkinter

Tk (Tool kit) ensemble de fonctionnalités graphiques


Tkinter © interface Python pour Tk


Développement de programmes Python avec des interfaces
graphiques (Graphical User Interface, GUI).


Fourni en standard dans Python (Windows, Linux, MacOS)



PP                     Université Paris Diderot - Paris 7   47
Exemple Tkinter
from Tkinter import *

racine = Tk()

texte = Label(racine,text=Salut tout le monde !,fg=red)
texte.pack()

bouton = Button(racine, text=Quit, command=racine.destroy)
bouton.pack()

racine.mainloop()




PP                        Université Paris Diderot - Paris 7   48
Exemple Tkinter commenté I
 Importation du module Tkinter
from Tkinter import *

 Création d’une instance d’une objet graphique (widget) Tk,
ici une fenêtre
racine = Tk()




PP                      Université Paris Diderot - Paris 7     49
Exemple Tkinter commenté II

 Création d’un objet de la classe Label() contenu dans
racine.
message = Label(racine, text=Salut tout le monde !, fg=red)

Attributs de message : un texte et une couleur de texte.

 Accrochage du texte dans la fenêtre et ajustement de sa taille
message.pack()




PP                        Université Paris Diderot - Paris 7      50
Exemple Tkinter commenté III
 Création d’un objet graphique de la classe Button() dans
racine.
bouton = Button(racine, text=Quit, command=racine.destroy)

Attributs de bouton : un texte et une commande.

 Accrochage du texte dans la fenêtre et ajustement de sa taille
bouton.pack()




 Démarrage du gestionnaire d’évènements (clavier, souris).
Obligatoire dans un script mais pas dans l’interpréteur.
racine.mainloop()

PP                        Université Paris Diderot - Paris 7   51
Menu


 1   Introduction / rappels                6      Biopython

 2   Bonnes pratiques                      7      Programmation objet

 3   Gestion des erreurs                   8      Tkinter

 4   Numpy                                 9      Subprocess

 5   Rpy



PP                      Université Paris Diderot - Paris 7              52
subprocess




gestion des entrées / sorties d’une commande Unix
http://docs.python.org/library/subprocess.html




PP                Université Paris Diderot - Paris 7   53
Sortie standard
Code



import subprocess
command = ls
proc = subprocess.Popen(command, shell=True,
stdout=subprocess.PIPE)

# contenu de la sortie standard
out = proc.communicate()[0]
print ===Sortie standard :
print out
# affiche le code de sortie (0 = OK)
print ===Code de sortie :
print proc.wait()




PP                  Université Paris Diderot - Paris 7   54
Sortie standard
Résultat



===Sortie standard :
cours_CGI_Python.aux
cours_CGI_Python.log
cours_CGI_Python.nav
cours_CGI_Python.out
cours_CGI_Python.pdf
cours_CGI_Python.snm
cours_CGI_Python.tex

===Code de sortie :
0




PP                     Université Paris Diderot - Paris 7   55
Sortie et erreur standards
Code


import subprocess
command = ls *.blabla
proc = subprocess.Popen(command, shell = True,
stdout = subprocess.PIPE, stderr = subprocess.PIPE)
# contenu de la sortie standard
# et de la sortie d'erreur standard
(out, err) = proc.communicate()
print ===Sortie standard :
print out
print ===Sortie d'erreur standard :
print err
# affiche le code de sortie (0 = OK)
print ===Code de sortie :
print proc.wait()



PP                  Université Paris Diderot - Paris 7   56
Sortie et erreur standards
Résultat




===Sortie standard :

===Sortie d'erreur standard :
ls: impossible d'accéder à *.blabla: Aucun fichier ou dossi

===Code de sortie :
2




PP                     Université Paris Diderot - Paris 7   57
Entrée, sortie et erreur standards
Code
import subprocess
command = wc -l
data = sp|Q41560|HS16B_WHEAT 16.9 kDa class I heat shock protein
MSIVRRTNVFDPFADLWADPFDTFRSIVPAISGGGSETAAFANARMDWKETPEAHVFKAD
LPGVKKEEVKVEVEDGNVLVVSGERTKEKEDKNDKWHRVERSSGKFVRRFRLLEDAKVEE
VKAGLENGVLTVTVPKAEVKKPEVKAIQISG

proc = subprocess.Popen(command, shell = True,
stdout = subprocess.PIPE, stderr = subprocess.PIPE,
stdin = subprocess.PIPE)
# contenu de la sortie standard
# et de la sortie d'erreur standard
(out, err) = proc.communicate(data)
print ===Entree standard :
print data
print ===Sortie standard :
print out
print ===Sortie d'erreur standard :
print err
# affiche le code de sortie (0 = OK)
print ===Code de sortie :
print proc.wait()

PP                        Université Paris Diderot - Paris 7           58
Entrée, sortie et erreur standards
Résultat



===Entree standard :
sp|Q41560|HS16B_WHEAT 16.9 kDa class I heat shock protein
MSIVRRTNVFDPFADLWADPFDTFRSIVPAISGGGSETAAFANARMDWKETPEAHVFKAD
LPGVKKEEVKVEVEDGNVLVVSGERTKEKEDKNDKWHRVERSSGKFVRRFRLLEDAKVEE
VKAGLENGVLTVTVPKAEVKKPEVKAIQISG

===Sortie standard :
4

===Sortie d'erreur standard :

===Code de sortie :
0




PP                        Université Paris Diderot - Paris 7   59
Références

Cours de Python – Patrick Fuchs  PP
http://www.dsimb.inserm.fr/~fuchs/python/index.html




Bonnes pratiques et astuces Python – David Larlet – BioloGeek
http://www.biologeek.com/bonnes-pratiques,conferences,django,python,traduction/

bonnes-pratiques-et-astuces-python/




Python for Bioinformatics – Sebastian Bassi




PP                                Université Paris Diderot - Paris 7              60
Contributeurs



Ce cours est basé sur un cours original de Patrick Fuchs.




PP                     Université Paris Diderot - Paris 7   61
Crédits graphiques



      Frank Stajano (Wikimedia Commons)




PP               Université Paris Diderot - Paris 7   62

Contenu connexe

Tendances

LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfLUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
RedaBelattar
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
badr zaimi
 
Cours python
Cours pythonCours python
Cours python
salmazen
 

Tendances (20)

Python
PythonPython
Python
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfLUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Cours python
Cours pythonCours python
Cours python
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 

En vedette

Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2
Emeric Tapachès
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec python
Mohammed TAMALI
 
Gestion de projets en bioinformatique
Gestion de projets en bioinformatiqueGestion de projets en bioinformatique
Gestion de projets en bioinformatique
pierrepo
 
Cours docking gros grain
Cours docking gros grainCours docking gros grain
Cours docking gros grain
pierrepo
 
Cours préparation au monde professionnel
Cours préparation au monde professionnelCours préparation au monde professionnel
Cours préparation au monde professionnel
pierrepo
 
Cours veille scientifique
Cours veille scientifiqueCours veille scientifique
Cours veille scientifique
pierrepo
 

En vedette (20)

Python et les bases de données non sql
Python et les bases de données non sqlPython et les bases de données non sql
Python et les bases de données non sql
 
python
pythonpython
python
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
 
Python après 15 ans de JAVA
Python après 15 ans de JAVAPython après 15 ans de JAVA
Python après 15 ans de JAVA
 
Formats de données en biologie
Formats de données en biologieFormats de données en biologie
Formats de données en biologie
 
Introduction à la programmation
Introduction à la programmationIntroduction à la programmation
Introduction à la programmation
 
Rendez votre code Python plus beau !
Rendez votre code Python plus beau !Rendez votre code Python plus beau !
Rendez votre code Python plus beau !
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec python
 
Créer une api publique avec Django REST framework
Créer une api publique avec Django REST frameworkCréer une api publique avec Django REST framework
Créer une api publique avec Django REST framework
 
Formation python
Formation pythonFormation python
Formation python
 
Gestion de projets en bioinformatique
Gestion de projets en bioinformatiqueGestion de projets en bioinformatique
Gestion de projets en bioinformatique
 
Cours docking gros grain
Cours docking gros grainCours docking gros grain
Cours docking gros grain
 
Cours préparation au monde professionnel
Cours préparation au monde professionnelCours préparation au monde professionnel
Cours préparation au monde professionnel
 
attitude professionnelle
attitude professionnelleattitude professionnelle
attitude professionnelle
 
Cours veille scientifique
Cours veille scientifiqueCours veille scientifique
Cours veille scientifique
 
Cours communication scientifique
Cours communication scientifiqueCours communication scientifique
Cours communication scientifique
 
CM uml-concepts-avances
CM uml-concepts-avancesCM uml-concepts-avances
CM uml-concepts-avances
 
Django by mrjmad
Django by mrjmadDjango by mrjmad
Django by mrjmad
 

Similaire à Cours python avancé

Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
Emeric Tapachès
 
Cours_D3SI_S5_Python for DS_MatPlotLib.pdf
Cours_D3SI_S5_Python for DS_MatPlotLib.pdfCours_D3SI_S5_Python for DS_MatPlotLib.pdf
Cours_D3SI_S5_Python for DS_MatPlotLib.pdf
said350040
 
Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdf
OuailChoukhairi
 

Similaire à Cours python avancé (20)

Mathématiques et Python
Mathématiques et PythonMathématiques et Python
Mathématiques et Python
 
Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2Algorithmique_et_programmation_part3_V2
Algorithmique_et_programmation_part3_V2
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
ALF 11 - WebAssembly
ALF 11 - WebAssemblyALF 11 - WebAssembly
ALF 11 - WebAssembly
 
PJ - machine learning avec scikit-learn.pdf
PJ - machine learning avec scikit-learn.pdfPJ - machine learning avec scikit-learn.pdf
PJ - machine learning avec scikit-learn.pdf
 
ALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlle
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
la complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicitéla complexité des algorithmes en toute simplicité
la complexité des algorithmes en toute simplicité
 
Theme 7
Theme 7Theme 7
Theme 7
 
Calcul scientifique avec python Numpy
Calcul scientifique avec python NumpyCalcul scientifique avec python Numpy
Calcul scientifique avec python Numpy
 
Python chapitre 4.pdf
Python chapitre 4.pdfPython chapitre 4.pdf
Python chapitre 4.pdf
 
Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et Pinba
 
pythonxxzexexzxzexzexzexzxzexezxzexzxz.pdf
pythonxxzexexzxzexzexzexzxzexezxzexzxz.pdfpythonxxzexexzxzexzexzexzxzexezxzexzxz.pdf
pythonxxzexexzxzexzexzexzxzexezxzexzxz.pdf
 
Cours_D3SI_S5_Python for DS_MatPlotLib.pdf
Cours_D3SI_S5_Python for DS_MatPlotLib.pdfCours_D3SI_S5_Python for DS_MatPlotLib.pdf
Cours_D3SI_S5_Python for DS_MatPlotLib.pdf
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
Design Pattern introduction
Design Pattern introductionDesign Pattern introduction
Design Pattern introduction
 
Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdf
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 

Dernier

ilide.info-cours-recherche-d-emploi-pr_aa839df7439dd234c803551c86e0197c.pdf
ilide.info-cours-recherche-d-emploi-pr_aa839df7439dd234c803551c86e0197c.pdfilide.info-cours-recherche-d-emploi-pr_aa839df7439dd234c803551c86e0197c.pdf
ilide.info-cours-recherche-d-emploi-pr_aa839df7439dd234c803551c86e0197c.pdf
ssuser6041d32
 

Dernier (16)

Réunion des directeurs de Jonzac - 15 mai 2024
Réunion des directeurs de Jonzac - 15 mai 2024Réunion des directeurs de Jonzac - 15 mai 2024
Réunion des directeurs de Jonzac - 15 mai 2024
 
ilide.info-cours-recherche-d-emploi-pr_aa839df7439dd234c803551c86e0197c.pdf
ilide.info-cours-recherche-d-emploi-pr_aa839df7439dd234c803551c86e0197c.pdfilide.info-cours-recherche-d-emploi-pr_aa839df7439dd234c803551c86e0197c.pdf
ilide.info-cours-recherche-d-emploi-pr_aa839df7439dd234c803551c86e0197c.pdf
 
Saint Damien, missionnaire auprès des lépreux de Molokai, Hawaï.pptx
Saint Damien, missionnaire auprès des lépreux de Molokai, Hawaï.pptxSaint Damien, missionnaire auprès des lépreux de Molokai, Hawaï.pptx
Saint Damien, missionnaire auprès des lépreux de Molokai, Hawaï.pptx
 
Texte avec différentes critiques positives, négatives ou mitigées
Texte avec différentes critiques positives, négatives ou mitigéesTexte avec différentes critiques positives, négatives ou mitigées
Texte avec différentes critiques positives, négatives ou mitigées
 
CALENDRIER ET COMPTE RENDU REUNION DIRECTION
CALENDRIER ET COMPTE RENDU REUNION DIRECTIONCALENDRIER ET COMPTE RENDU REUNION DIRECTION
CALENDRIER ET COMPTE RENDU REUNION DIRECTION
 
Methode 5S - support de formation -.pdf
Methode 5S  - support de formation -.pdfMethode 5S  - support de formation -.pdf
Methode 5S - support de formation -.pdf
 
Fiche de vocabulaire pour faire une appréciation
Fiche de vocabulaire pour faire une appréciationFiche de vocabulaire pour faire une appréciation
Fiche de vocabulaire pour faire une appréciation
 
Télécommunication et transport .pdfcours
Télécommunication et transport .pdfcoursTélécommunication et transport .pdfcours
Télécommunication et transport .pdfcours
 
Chapitre3-Classififcation des structures de chaussu00E9e.pptx
Chapitre3-Classififcation des structures de  chaussu00E9e.pptxChapitre3-Classififcation des structures de  chaussu00E9e.pptx
Chapitre3-Classififcation des structures de chaussu00E9e.pptx
 
GHASSOUB _Seance 4_ measurement and evaluation in education_-.pptx
GHASSOUB _Seance 4_ measurement and evaluation in education_-.pptxGHASSOUB _Seance 4_ measurement and evaluation in education_-.pptx
GHASSOUB _Seance 4_ measurement and evaluation in education_-.pptx
 
GHASSOUB _Seance 3_ measurement and evaluation in education.pptx
GHASSOUB _Seance 3_ measurement and evaluation in education.pptxGHASSOUB _Seance 3_ measurement and evaluation in education.pptx
GHASSOUB _Seance 3_ measurement and evaluation in education.pptx
 
Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024
 
Neuvaine de la Pentecôte avec des textes de saint Jean Eudes
Neuvaine de la Pentecôte avec des textes de saint Jean EudesNeuvaine de la Pentecôte avec des textes de saint Jean Eudes
Neuvaine de la Pentecôte avec des textes de saint Jean Eudes
 
Les phases d'analyse des parties prenantes
Les phases d'analyse des parties prenantesLes phases d'analyse des parties prenantes
Les phases d'analyse des parties prenantes
 
python-Cours Officiel POO Python-m103.pdf
python-Cours Officiel POO Python-m103.pdfpython-Cours Officiel POO Python-m103.pdf
python-Cours Officiel POO Python-m103.pdf
 
Àma Gloria.pptx Un film tourné au Cap Vert et en France
Àma Gloria.pptx   Un film tourné au Cap Vert et en FranceÀma Gloria.pptx   Un film tourné au Cap Vert et en France
Àma Gloria.pptx Un film tourné au Cap Vert et en France
 

Cours python avancé

  • 1. Python avancé Pierre Poulain pierre.poulain@univ-paris-diderot.fr M2 BI – 09/2011
  • 2. À l’exception des illustrations et images dont les crédits sont indiqués à la fin du document et dont les droits appartiennent à leurs auteurs respectifs, le reste de ce cours est sous licence Creative Commons Paternité (CC-BY). http://creativecommons.org/licenses/by/2.0/fr/ PP Université Paris Diderot - Paris 7 2
  • 3. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 3
  • 4. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 4
  • 5. Python, langage : interprété à bytecode multi-plateforme orienté objet (classes) « tout est objet » PP Université Paris Diderot - Paris 7 5
  • 6. Python, langage : (2) « batteries included » nombreux modules fournis en standard (math, random, sys, os, re, urllib2, Tkinter) modules extérieurs (numpy, Biopython, rpy) une bibliothèque doit exister pour votre problème (sinon écrivez la) Objectif Tour d’horizon de quelques fonctionnalités avancées (modules, classes, astuces) PP Université Paris Diderot - Paris 7 6
  • 7. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 7
  • 8. Localisation Python et UTF-8 1 Dire où se trouve Python 2 Gérer les caractères accentués #! /usr/bin/env python # -*- coding: utf-8 -*- PP Université Paris Diderot - Paris 7 8
  • 9. Optimisation et itérations des boucles toto = range( 1000000 ) # methode 1 for i in range( len(toto) ): print toto[i] # methode 2 for ele in toto: print ele # methode 3 for i in xrange( len(toto) ): print toto[i] Quelle méthode est la plus rapide ? 1. for x in y 2. for z in xrange(len(y)) 3. for z in range(len(y)) (très lente) PP Université Paris Diderot - Paris 7 9
  • 10. Listes de compréhension List comprehensions Générer une liste à la volée à partir d’une boucle for [operation sur élément for élément in liste condition] Exemples : >>> toto = [1, 3, 6, 9] >>> [i**2 for i in toto] [1, 9, 36, 81] >>> [i**2 for i in toto if i>3] [36, 81] >>> seq = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA >>> width = 60 >>> print "n".join([seq[i:i+width] for i in xrange(0, len(seq), width)]) AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAA PP Université Paris Diderot - Paris 7 10
  • 11. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 11
  • 12. Gestion des erreurs But Éviter le plantage d’un programme Python anticiper les erreurs et les intercepter PP Université Paris Diderot - Paris 7 12
  • 13. Exemple >>> nb = int(raw_input("Entrez un nombre: ")) Entrez un nombre: 23 >>> print nb 23 Mais si... >>> nb = int(raw_input("Entrez un nombre: ")) Entrez un nombre: ATCG Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'ATCG' int() ne peut pas convertir "ATCG" en entier. PP Université Paris Diderot - Paris 7 13
  • 14. Try / except >>> try: ... nb = int(raw_input("Entrez un nombre: ")) ... except: ... print "Vous n'avez pas entré un nombre !" ... Entrez un nombre: ATCG Vous n'avez pas entré un nombre ! try permet de « tenter » une instruction. En cas de problème, except prend la main. PP Université Paris Diderot - Paris 7 14
  • 15. Try / except et les fichiers >>> nom = "toto.pdb" >>> try: ... f = open(nom, "r") ... except: ... print "Impossible d'ouvrir le fichier", nom Fichier absent ou problème de droits en lecture © exception. PP Université Paris Diderot - Paris 7 15
  • 16. Typage des exceptions >>> try: ... nb = int(raw_input("Entrez un nombre: ")) ... except ValueError: ... print "Vous n'avez pas entre un nombre !" ... Entrez un nombre: ATCG Vous n'avez pas entre un nombre ! ValueError © problème de conversion (avec int()) RuntimeError, TypeError, IOError PP Université Paris Diderot - Paris 7 16
  • 17. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 17
  • 18. Numpy (Numerical Python) http://numpy.scipy.org Bibliothèque de base pour le calcul numérique objet de type array à n-dimensions (matrices) algèbre linéaire (de base) transformée de Fourier (de base) générateur de nombre aléatoire (avancé) graphiques © autre modules (rpy, matplotlib) PP Université Paris Diderot - Paris 7 18
  • 19. Objets de type array Chargement du module numpy import numpy Définition d’un vecteur vector1 = numpy.array([1,2,3,4]) vector1 array([1, 2, 3, 4]) Construction automatique d’un vecteur data = numpy.arange(5) data array([0, 1, 2, 3, 4]) numpy.arange() ∼ range() PP Université Paris Diderot - Paris 7 19
  • 20. Objets de type array (2) Opération vectorielle data = numpy.arange(5) data + 0.1 array([ 0.1, 1.1, 2.1, 3.1, 4.1]) PP Université Paris Diderot - Paris 7 20
  • 21. Redimensionnement v = numpy.arange(4) v array([0, 1, 2, 3]) numpy.reshape(v, (2,2)) array([[0, 1], [2, 3]]) array v doit avoir un nombre d’éléments compatibles avec la nouvelle matrice 2 x 2 w = numpy.arange(4) numpy.resize(w, (3,2)) array([[0, 1], [2, 3], [0, 1]]) array w peut contenir un nombre quelconque d’éléments PP Université Paris Diderot - Paris 7 21
  • 22. 01 Création d’une matrice de 0 numpy.zeros((3,3)) array([[ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.]]) Création d’une matrice de 1 numpy.ones((2,2)) array([[ 1., 1.], [ 1., 1.]]) numpy.ones((2,2), int) array([[1, 1], [1, 1]]) PP Université Paris Diderot - Paris 7 22
  • 23. Dimensions mat = numpy.reshape(numpy.arange(81), (9,9)) numpy.shape(mat) (9, 9) print mat.shape (9, 9) PP Université Paris Diderot - Paris 7 23
  • 24. Extraction a = numpy.resize(numpy.arange(9), (3,3)) a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) a [1,:] # 2e ligne array([3, 4, 5]) a [:,2] # 3e colonne array([2, 5, 8]) a [2,2] # élément de la 3e ligne et 3e colonne 8 PP Université Paris Diderot - Paris 7 24
  • 25. Algèbre linéaire a = numpy.array([[1,2], [3,4]]) a array([[1, 2], [3, 4]]) Multiplication de matrices numpy.dot(a, a) array([[ 7, 10], [15, 22]]) Inversion de matrice from numpy import linalg # importation du module d'algebre lineaire inv_a = linalg.inv(a) inv_a array([[-2. , 1. ], [ 1.5, -0.5]]) PP Université Paris Diderot - Paris 7 25
  • 26. Valeurs et vecteurs propres a = numpy.resize(numpy.arange(9), (3,3)) a array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) import numpy.linalg as linalg eig_val, eig_vec = linalg.eig(a) eig_val array([ 1.33484692e+01, -1.34846923e+00, -2.48477279e-16]) eig_vec array([[ 0.16476382, 0.79969966, 0.40824829], [ 0.50577448, 0.10420579, -0.81649658], [ 0.84678513, -0.59128809, 0.40824829]]) utile pour connaître les axes principaux d’inertie d’une molécule PP Université Paris Diderot - Paris 7 26
  • 27. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 27
  • 28. Rpy (R for Python) utilisation des fonctions de R dans Python http://rpy.sourceforge.net/ from rpy import r as R R.plot(range(10), main=Test RPy, xlab=x, ylab=y) PP Université Paris Diderot - Paris 7 28
  • 29. Exemple Nombre de chaque base pour la séquence ACGATCATAGCGAGCTACGTAGAA PP Université Paris Diderot - Paris 7 29
  • 30. Exemple # -*- coding: utf-8 -*- from rpy import r as R seq = ACGATCATAGCGAGCTACGTAGAA seq2 = list( seq ) R.png(rpy_test.png, width=800, height=800, pointsize=30) # tri des bases car unique() n'ordonne pas les données # alors que table() le fait seq3 = R.sort( seq2 ) # listes des bases présentes bases = R.unique( seq3 ) # effectif de chaque base effectifs = R.table( seq3 ) # dessin du barplot et sauvegarde de la position des abscisses coords = R.barplot( effectifs, ylab=nombre de bases) # ajout du texte pour l'axe des abscisses R.text(coords, -0.5, bases, xpd = True, cex = 1.2, font = 2 ) # fermeture du graphique R.dev_off() dev_off() PP Université Paris Diderot - Paris 7 30
  • 31. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 31
  • 32. Biopython http://biopython.org manipulations de séquences (ADN, ARN, protéine) interrogations de banques de données biologiques (ExPASy, Entrez [NCBI], SCOP) recherches BLAST alignements multiples (clustalw) lectures de fichiers PDB ... Très bon tutoriel à http://www.biopython.org/DIST/docs/ tutorial/Tutorial.html PP Université Paris Diderot - Paris 7 32
  • 33. Manipulation de séquences Définition d’un alphabet (ADN, ARN, protéine) from Bio.Alphabet import IUPAC # module Biopython s'appelle Bio # IUPAC = International Union of Pure and Applied Chemistry Définition d’un objet séquence my_dna_alphabet = IUPAC.unambiguous_dna from Bio.Seq import Seq my_seq = Seq('CATCCCTTCGATCGGGGCTATAGCTAGC',my_dna_alphabet) print my_seq CATCCCTTCGATCGGGGCTATAGCTAGC my_seq Seq('CATCCCTTCGATCGGGGCTATAGCTAGC', IUPACUnambiguousDNA()) PP Université Paris Diderot - Paris 7 33
  • 34. Manipulation de séquences (2) Propriétés des chaînes de caractères print my_seq[4:12] CCTTCGAT print len(my_seq) 28 new_seq = my_seq[0:5] new_seq Seq('CATCC', IUPACUnambiguousDNA()) my_seq + new_seq Seq('CATCCCTTCGATCGGGGCTATAGCTAGCCATCC', IUPACUnambiguousDNA()) PP Université Paris Diderot - Paris 7 34
  • 35. Interrogation d’Entrez I from Bio import Entrez # chargement du module # definition de l'e-mail, obligatoire pour eviter les abus Entrez.email = votremail@provider.fr PP Université Paris Diderot - Paris 7 35
  • 36. Interrogation d’Entrez II # requete dans la base de donnees pubmed # des termes small heat shock proteins ma_req = Entrez.esearch(db=pubmed, ... term=small heat shock proteins, retmax=50) # recuperation des resultats # sous la forme d'un dictionnaire mon_res = Entrez.read(ma_req) # clefs disponibles print(mon_res.keys()) [u'Count', u'RetMax', u'IdList', u'TranslationStack', u'TranslationSet', u'RetStart', u'QueryTranslation'] # liste des identifiants pubmed print(mon_res[IdList]) ['20679393', '20668846', '20668218', ...] PP Université Paris Diderot - Paris 7 36
  • 37. Interrogation d’Entrez III # requete sur un article en particulier requete = Entrez.esummary(db=pubmed, id='20668846') # lecture du resultat # sous forme d'une liste de dictionnaire res_parse = Entrez.read(requete) # clefs disponibles print(res_parse[0].keys()) ['DOI', 'Title', 'Source', 'PmcRefCount', 'Issue', ...] # affiche du titre res_parse[0][Title] 'Characterization of Xanthomonas campestris pv. campestris heat shock protein A (HspA), which possesses an intrinsic ability to reactivate inactivated proteins.' PP Université Paris Diderot - Paris 7 37
  • 38. En résumé Biopython puissant polyvalent la syntaxe change régulièrement le format des bases des données aussi... Exemple plus poussé pendant le TP. PP Université Paris Diderot - Paris 7 38
  • 39. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 39
  • 40. Programmation objet et classe Une minuscule introduction Une classe définit des objets qui sont des instances (∼ représentants) de cette classe. Les objets possèdent des attributs (∼ variables) et des méthodes (∼ fonctions) associés à cette classe. PP Université Paris Diderot - Paris 7 40
  • 41. Programmation objet et classe (2) PP Université Paris Diderot - Paris 7 41
  • 42. Quelques propriétés Encapsulation. Interface (attributs ou méthodes) « publique ». Possibilité d’interface « privée ». Polymorphisme. Transformation des opérateurs standards (*, +, /, -) suivant le contexte. Héritage mutliple. Création de sous-classes héritant des propriétés de la classe mère. Python © programmation objet implicite. PP Université Paris Diderot - Paris 7 42
  • 43. Exemple de classe Rectangle() class Rectangle: ceci est la classe Rectangle def __init__(self, long = 0.0, larg = 0.0, coul = blanc): initialisation d'un objet (constructeur) self.longueur = long self.largeur = larg self.couleur = coul def calcule_surface(self): calcule la surface return self.longueur * self.largeur def change_carre(self, cote): transforme un rectangle en carre self.longueur = cote self.largeur = cote self désigne l’objet lui-même et est obligatoire. PP Université Paris Diderot - Paris 7 43
  • 44. Utilisation de la classe Rectangle() # creation d'un objet Rectangle avec les parametres par defaut rect1 = Rectangle() # affichage des attributs print rect1.longueur, rect1.largeur, rect1.couleur 0.0 0.0 blanc # calcul de la surface print rect1.calcule_surface() 0.0 # on change le rectangle en carre rect1.change_carre(30) print rect1.calcule_surface() 900 # creation d'un objet Rectangle avec des parametres imposes rect2 = Rectangle(2, 3, rouge) print rect2.calcule_surface() 6 PP Université Paris Diderot - Paris 7 44
  • 45. Autres attributs redéfinissables __add__(self, other) opérateur + __mul__(self, number) opérateur * __del__(self) destructeur __len__(self) opérateur len (taille) __getslice__(self, low, high) tranchage etc. PP Université Paris Diderot - Paris 7 45
  • 46. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 46
  • 47. Tkinter Tk (Tool kit) ensemble de fonctionnalités graphiques Tkinter © interface Python pour Tk Développement de programmes Python avec des interfaces graphiques (Graphical User Interface, GUI). Fourni en standard dans Python (Windows, Linux, MacOS) PP Université Paris Diderot - Paris 7 47
  • 48. Exemple Tkinter from Tkinter import * racine = Tk() texte = Label(racine,text=Salut tout le monde !,fg=red) texte.pack() bouton = Button(racine, text=Quit, command=racine.destroy) bouton.pack() racine.mainloop() PP Université Paris Diderot - Paris 7 48
  • 49. Exemple Tkinter commenté I Importation du module Tkinter from Tkinter import * Création d’une instance d’une objet graphique (widget) Tk, ici une fenêtre racine = Tk() PP Université Paris Diderot - Paris 7 49
  • 50. Exemple Tkinter commenté II Création d’un objet de la classe Label() contenu dans racine. message = Label(racine, text=Salut tout le monde !, fg=red) Attributs de message : un texte et une couleur de texte. Accrochage du texte dans la fenêtre et ajustement de sa taille message.pack() PP Université Paris Diderot - Paris 7 50
  • 51. Exemple Tkinter commenté III Création d’un objet graphique de la classe Button() dans racine. bouton = Button(racine, text=Quit, command=racine.destroy) Attributs de bouton : un texte et une commande. Accrochage du texte dans la fenêtre et ajustement de sa taille bouton.pack() Démarrage du gestionnaire d’évènements (clavier, souris). Obligatoire dans un script mais pas dans l’interpréteur. racine.mainloop() PP Université Paris Diderot - Paris 7 51
  • 52. Menu 1 Introduction / rappels 6 Biopython 2 Bonnes pratiques 7 Programmation objet 3 Gestion des erreurs 8 Tkinter 4 Numpy 9 Subprocess 5 Rpy PP Université Paris Diderot - Paris 7 52
  • 53. subprocess gestion des entrées / sorties d’une commande Unix http://docs.python.org/library/subprocess.html PP Université Paris Diderot - Paris 7 53
  • 54. Sortie standard Code import subprocess command = ls proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) # contenu de la sortie standard out = proc.communicate()[0] print ===Sortie standard : print out # affiche le code de sortie (0 = OK) print ===Code de sortie : print proc.wait() PP Université Paris Diderot - Paris 7 54
  • 55. Sortie standard Résultat ===Sortie standard : cours_CGI_Python.aux cours_CGI_Python.log cours_CGI_Python.nav cours_CGI_Python.out cours_CGI_Python.pdf cours_CGI_Python.snm cours_CGI_Python.tex ===Code de sortie : 0 PP Université Paris Diderot - Paris 7 55
  • 56. Sortie et erreur standards Code import subprocess command = ls *.blabla proc = subprocess.Popen(command, shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE) # contenu de la sortie standard # et de la sortie d'erreur standard (out, err) = proc.communicate() print ===Sortie standard : print out print ===Sortie d'erreur standard : print err # affiche le code de sortie (0 = OK) print ===Code de sortie : print proc.wait() PP Université Paris Diderot - Paris 7 56
  • 57. Sortie et erreur standards Résultat ===Sortie standard : ===Sortie d'erreur standard : ls: impossible d'accéder à *.blabla: Aucun fichier ou dossi ===Code de sortie : 2 PP Université Paris Diderot - Paris 7 57
  • 58. Entrée, sortie et erreur standards Code import subprocess command = wc -l data = sp|Q41560|HS16B_WHEAT 16.9 kDa class I heat shock protein MSIVRRTNVFDPFADLWADPFDTFRSIVPAISGGGSETAAFANARMDWKETPEAHVFKAD LPGVKKEEVKVEVEDGNVLVVSGERTKEKEDKNDKWHRVERSSGKFVRRFRLLEDAKVEE VKAGLENGVLTVTVPKAEVKKPEVKAIQISG proc = subprocess.Popen(command, shell = True, stdout = subprocess.PIPE, stderr = subprocess.PIPE, stdin = subprocess.PIPE) # contenu de la sortie standard # et de la sortie d'erreur standard (out, err) = proc.communicate(data) print ===Entree standard : print data print ===Sortie standard : print out print ===Sortie d'erreur standard : print err # affiche le code de sortie (0 = OK) print ===Code de sortie : print proc.wait() PP Université Paris Diderot - Paris 7 58
  • 59. Entrée, sortie et erreur standards Résultat ===Entree standard : sp|Q41560|HS16B_WHEAT 16.9 kDa class I heat shock protein MSIVRRTNVFDPFADLWADPFDTFRSIVPAISGGGSETAAFANARMDWKETPEAHVFKAD LPGVKKEEVKVEVEDGNVLVVSGERTKEKEDKNDKWHRVERSSGKFVRRFRLLEDAKVEE VKAGLENGVLTVTVPKAEVKKPEVKAIQISG ===Sortie standard : 4 ===Sortie d'erreur standard : ===Code de sortie : 0 PP Université Paris Diderot - Paris 7 59
  • 60. Références Cours de Python – Patrick Fuchs PP http://www.dsimb.inserm.fr/~fuchs/python/index.html Bonnes pratiques et astuces Python – David Larlet – BioloGeek http://www.biologeek.com/bonnes-pratiques,conferences,django,python,traduction/ bonnes-pratiques-et-astuces-python/ Python for Bioinformatics – Sebastian Bassi PP Université Paris Diderot - Paris 7 60
  • 61. Contributeurs Ce cours est basé sur un cours original de Patrick Fuchs. PP Université Paris Diderot - Paris 7 61
  • 62. Crédits graphiques Frank Stajano (Wikimedia Commons) PP Université Paris Diderot - Paris 7 62