12.07.2015 Views

slides_programmation.. - xavierdupre.fr

slides_programmation.. - xavierdupre.fr

slides_programmation.. - xavierdupre.fr

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProgrammation et algorithmeXavier DupréSeptember 3, 2010Xavier Dupré Programmation et algorithme 1 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesCoordonnéesXavier Dupré▶ xavier.dupre@gmail.com▶ http://www.<strong>xavierdupre</strong>.<strong>fr</strong>▶ http://www.<strong>xavierdupre</strong>.<strong>fr</strong>/mywiki/EnseignementsCette présentation n’est pas exhaustive. Pour deplus amples explications, voirhttp://www.<strong>xavierdupre</strong>.<strong>fr</strong>/mywiki/InitiationPython.Xavier Dupré Programmation et algorithme 2 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesSéances 2009Cours▶ mercredi 15 septembre 2010 16:30▶ mercredi 22 septembre 2010 16:30▶ mercredi 29 septembre 2010 16:30▶ mercredi 13 octobre 2010 16:30Examen : jeudi 6 janvier 11:00 à 12:05TD▶ jeudi 16 septembre 2010 16:30▶ jeudi 23 septembre 2010 16:30▶ mercredi 6 octobre 2010 16:30▶ mercredi 20 octobre 2010 16:30▶ mercredi 10 novembre 2010 16:30▶ mercredi 17 novembre 2010 16:30▶ mercredi 24 novembre 2010 16:30▶ mercredi 1 er décembre 2010 16:30▶ mercredi 8 décembre 2010 16:30▶ mercredi 15 décembre 2010 16:30Xavier Dupré Programmation et algorithme 3 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPlanPrincipes communs à tous les langagesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesExtensions, ModulesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixClasses, Programmation ObjectPrésentationOpérateursHéritageCopiePython, R, VBA, SQL, ...Problèmes simplesLangage SQLCarte de FranceConclusionQuelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et defemellesXavier Dupré Programmation et algorithme 4 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesPartie IPrincipes communs à tous les langagesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesExtensions, ModulesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixClasses, Programmation ObjectPrésentationOpérateursHéritageCopiePython, R, VBA, SQL, ...Problèmes simplesLangage SQLCarte de FranceConclusionQuelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et defemellesXavier Dupré Programmation et algorithme 5 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesCitationPourquoi tirons-nous de mille cas une inférence que nous sommes incapablesde tirer d’un seul cas, qui ne diffère à aucun regard des précédents ?[...] Toutes les inférences tirées de l’expérience sont donc des effets del’accoutumance et non des effets du raisonnement.David HumeEnquête sur l’entendement humainXavier Dupré cultive une aversion pour ce qu’il appelle le scolaire. Cependant,cette aversion tourne à la confusion entre un enseignement scolaireet un enseignement instructif.Elève anonyme (2009)Xavier Dupré Programmation et algorithme 6 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesExemple../exemple_eleve/2006_barricades/version1.1/barricades.pyXavier Dupré Programmation et algorithme 7 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesQuelques langagesC, C++ Ce sont deux langages qui existent depuis les années 1970 pour le C et les années1980 pour le C++. Ils sont rapides et sont encore très utilisés pour toutes lesapplications qui exigent d’être rapides. La rigueur nécessaire à leur pratiqueralentit nettement la conception d’un programme.JavaLangage objet, sa syntaxe est proche du C++, il est moins rapide mais plus facileà manipuler notamment grâce à une gestion de la mémoire plus automatique.Perl, PHP, Ce sont des langages très utilisés dans le monde Internet.JavascriptPython Ce langage a une syntaxe plus exigeante que Perl, ou PHP mais est en contrepartieplus lisible. Sa simplicité d’utilisation, la possibilité de relier des applicationsexistantes écrites en C++ en font un langage très utilisé aujourd’hui.R Langage dédié aux statistiques. C’est la version gratuite du logiciel S+, toutcomme SciLab est un substitut gratuit à MatLab. Sa grande force est le calculmatriciel et un grand nombre d’extensions mathématiques qui profitent de lacontribution de tous les chercheurs académiques.SQL C’est le langage des bases de données relationnelles. Sa logique est très différentesdes langages précédemment cités car l’objectif est de réaliser des opérationssimples sur de grandes tables.SASAutant un langage qu’un logiciel, ce langage est dédié au calcul de statistiquessur de gros volumes de données.Les informaticiens continuent d’inventer des langages pour écrire toujours plus facilement desprogrammes sur des systèmes de plus en plus complexes comme le langage PIG utilisé sur lesgrilles informatiques qui relient plusieurs milliers de machines entre elles.Xavier Dupré Programmation et algorithme 8 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesLangage PythonCe cours s’appuie sur le langage Python pour sesillustrations.▶ C’est un langage dont l’utilisation s’étend.▶ Il couvre de nombreux domaines (calcul scientifique,interface graphiques, jeux, <strong>programmation</strong> internet).▶ Son apprentissage est l’un des plus simples.▶ Il bénéficie de nombreuses extensions.▶ Il est gratuit.▶ Il s’interface facilement avec d’autres langages tels queR ou SQL.En tant que langage interprété, son principal défaut est salenteur qui est en partie contournée par la possibilité deréécrire les parties les plus lentes en C++ à condition deconnaître ce second langage.Xavier Dupré Programmation et algorithme 9 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesAccentsLe langage Python s’appuie sur la langue anglaise et il faut lui préciser explicitementlorsque le programme contient des accents. Le message suivantindique que c’est le cas :SyntaxError: Non-ASCII character ’\xe9’ in file pl.py on line 7,but no encoding declared; see http://www.python.org/peps/pep-0263.html for detailsIl faut ajouter en première ligne du programme :# coding: latin-1Ou pour insérer tout caractère, latin ou asiatique :# coding: utf-8Xavier Dupré Programmation et algorithme 10 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesMot-cléTous les langages s’appuient sur des symboles et des mots qu’on appelledes mots-clés.and del <strong>fr</strong>om not whileas elif global or withassert else if pass yieldbreak except import printclass exec in raisecontinue finally is returndef for lambda tryEn italique figurent ceux qu’on utilise moins souvent.Xavier Dupré Programmation et algorithme 11 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesTypes de données standardL’ordinateur ne connaît que les nombres.Xavier Dupré Programmation et algorithme 12 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesVariableUne variable est caractérisée par :▶ un identificateur : il peut contenir des lettres, des chif<strong>fr</strong>es, desblancs soulignés mais il ne peut commencer par un chif<strong>fr</strong>e.Minuscules et majuscules sont différenciées. Il est aussi unique.▶ un type : c’est une information sur le contenu de la variable quiindique à l’interpréteur Python la manière de manipuler cetteinformation.Les variables sont essentielles : elles permettent de manipuler les informations que les algorithmesmanipulent. Une variable désigne un contenu ou plus précisément un objet.printL’instruction print permet d’afficher le contenu de n’importe quelle variable. Il ne faut pashésiter à l’utiliser lorsqu’on cherche à corriger les erreurs d’un programme.print vaprint (va)# affiche le contenu de la variable va# les parenthèses sont requises pour les versions de Python# supérieures à 2.6# le symbol # indique un commentaireXavier Dupré Programmation et algorithme 13 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesTypes numériquesint type entier, compris entre ±2 milliardsfloat type réel, environ 15 chif<strong>fr</strong>es de précision 1OpérationsLes opérations standard sont disponibles +,-,/,*, ** (puissance). Il estpréférable d’écrire des opérations sur le même type. Dans le cascontraire, le type float l’emporte sur le type int.x + 4.5x - y6 * 7 3 / iAffectationx = 3 # affectation de la valeur entière 3 à la variable xy = 3.0 # affectation de la valeur réelle 3.0 à la variable yz += 5 # ajoute 5 à la variable z (z = z + 5)1 Il est possible de faire des calculs avec plus de précision en utilisant une extensiondu langage (http://sourceforge.net/projects/gmpy/).Xavier Dupré Programmation et algorithme 14 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesint, floatx1 = 5.5x2 = 6y1,y2 = 3.3,7 # affectation multipled = ((x1-x2)**2 + (y1-y2)**2) ** 0.5 # distance euclidiennedivision entièrea = 5 / 3print a # affiche 1Lorsqu’on divise deux entiers entre eux, le résultat est entier etcorrespond au quotient.a,b = 5,3print a / bprint a % b# affiche le quotient de la division# affiche le reste de la divisionXavier Dupré Programmation et algorithme 15 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesChaînes de caractèresOn utilise les chaînes de caractères pour représenter toutes les informationsqui ne sont pas numériques (du texte le plus souvent). Elles apparaissententre guillemets, entre apostrophes.OpérationsDes opérations sont disponibles +,*.’abc’ + ’def’’abc’ * 3# donne ’abcdef’# donne ’abcabcabc’Affectations = ’abc’ # affectation de la chaîne de caractères ’abc’ à ss = "abc" # affectation de la chaîne de caractères ’abc’ à ss = """abc""" # affectation de la chaîne de caractères ’abc’ à ss += ’abc’ # ajoute ’abc’ à la variable sXavier Dupré Programmation et algorithme 16 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesManipulation de chaînes de caractèresOn suppose que s est une chaîne de caractères.Opérations <strong>fr</strong>équenteslen (s)retourne la longueur de ss.lower () retourne s en minusculess.upper () retourne s en majusculess.split (sep) découpe s en utilisant sep comme séparateurs.replace (a,b) remplace toutes les occurrences de a par b dans lachaînes ss.find (a) retourne la position de a dans s, -1 si a n’est pas trouvés = ’abC,deF’i = len (s) # i vaut 7m = s.lower () # m vaut ’abc,def’M = s.upper () # m maut ’ABC,DEF’a,b = s.split (’,’) # a vaut ’abC’ et b vaut ’deF’i = s.find (’,’) # i vaut 3 car la première position est 0La recherche d’expressions plus complexes est possible via les expressionsrégulières (transparent 61.).Xavier Dupré Programmation et algorithme 17 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesCaractères spéciauxCertains caractères sont invisibles dans un éditeur de texte même si leurusage est courant.\n passage à la ligne\t tabulation\r retour chariot (uniquement sur Windows)\\ \On nettoie souvent les lignes en utilisant l’instruction suivante :s.strip ("\r\n\t ")Le langage Python permet également d’afficher des informations selon unformat :s = "un entier %d un réel %f une chaîne %s un réel formatté %2.3f" %(-5, 5.67894, "voilà", 5.67894)Ce qui donne :un entier -5 un réel 5.678940 une chaîne voilà un réel formatté 5.679Xavier Dupré Programmation et algorithme 18 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesTableaux (listes, t-uple)list et tupleIl existe deux types de tableaux en Python : les t-uples et les listes. Ilsapparaissent comme des listes d’autres objets entre parenthèses pour lestuples, entre crochets pour les listes. Le premier élément a pour indice 0.Affectationt = (’abc’, 4, 5.5, (’Z’, 5) ) # affectation d’un tuple à la variable tu = (0,) # tuple d’un élément (ne pas oublier ,)l = [’abc’, 4, 5.5, [’Z’, 5] ] # affectation d’une liste à la variable tl [1] = t# on change la seconde valeur de la listex = l [2] # on met dans la variable x le contenu de latroisième caseDifférenceIl n’est pas possible de modifier un tuple alors que c’est possible avecune liste.t [1] = 0 # erreur : TypeError: ’tuple’ object does not support item assignmentl [1] = 0 # instruction valideXavier Dupré Programmation et algorithme 19 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesOpérations sur les tableauxOpérationsDes opérations sont disponibles +,*. Il n’est pas possible d’ajouter deuxtableaux de types différents.(0,1,2) + (3,4,5) # donne (0,1,2,3,4,5)[0,1,2] + [3,4,5] # donne [0,1,2,3,4,5](0,1,2) * 3 # donne (0,1,2,0,1,2,0,1,2)[0,1,2] * 3 # donne [0,1,2,0,1,2,0,1,2]Affectation et opérationst = [] # liste videt = (3,4,5)l = [3,4,5]t += (6,7) # ajoute (6,7) au tuple tl += [6,7] # ajoute [6,7] à la liste lXavier Dupré Programmation et algorithme 20 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesManipulation de tableauxOn suppose que t est un tableau, l une liste.Opérations <strong>fr</strong>équenteslen (t)in, not int[i:j]min(t), max(t), sum(t)retourne la longueur de la liste ou tuple tappartenance d’un élément au tableaudésigne les éléments de i à j exclu.minimum, maximum, sommet = [5,6.7,’r’, (7,8)]i = len (t) # i vaut 4m = max (t) # m vaut 5f = t [1:3] # f vaut 56.7, ’r’]’r’ in t# test d’appartenance à t (ici vrai ou True)IndicesSi l est un tableau, les indices des éléments vont de 0,1,...,len(l)-1. Ledernier élément de la liste est désigné par l[len(l)-1] ou toutsimplement l[-1].Xavier Dupré Programmation et algorithme 21 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesManipulations de listesOn suppose que l une liste.Opérations <strong>fr</strong>équentesdel l [i:j] supprime les éléments de i à j exclu.l.count(x) compte le nombre d’éléments égaux à x dans ll.reverse () retourne la listel.sort () trie la liste ll.append (x) ajoute x à la liste ls.join (l) si l est une liste de chaînes de caractères, cette instructionles colle toutes ensemble séparées par sl = [5,6.7,’r’, (7,8)]l [1:3] = [4] # après cette ligne, l vaut [5,4,(7,8)]del l [1:3] # après cette ligne, l vaut [5]l = [4,5,3,2]l.sort () # après cette ligne, l vaut [2,3,4,5]l.reverse () # après cette ligne, l vaut [5,4,3,2]";".join ( [’un’,’deux’] ) # vaut ’un;deux’Xavier Dupré Programmation et algorithme 22 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesErreurs <strong>fr</strong>équentesIndice hors limiteLorsque qu’un indice est plus grand que le nombre d’éléments, le langagePython affiche l’erreur suivante :IndexError: list index out of rangeRechercher un élémentIl est possible de chercher la position d’un élément dans un tableau :t = [’a’,’b’,’c’,’e’]i = t.index(’b’) # i vaut 1Lorsque cet élément n’existe pas, une erreur est générée :ValueError: list.index(x): x not in listXavier Dupré Programmation et algorithme 23 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesDictionnairesDéfinitionUn dictionnaire est un tableau dont les éléments ne sont plus associés àun indice entier mais à n’importe quel objet de type entier, réel, chaînede caractères, tuple. L’indice s’appelle la clé, il est associé à une valeur.Les clés sont uniques, les valeurs pas nécessairement.Affectationd = { } # création d’un dictionnaire vided [4] = ’element’ # ajout d’un élémentd [’ty’] = ’autre element’ # ajout d’un autre élémentd = { 4:’element’, ’ty’:’autre element’ }# cette ligne est équivalente aux trois précédentesXavier Dupré Programmation et algorithme 24 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesManipulations de dictionnairesOn suppose que d est un dictionnaire.Opérations <strong>fr</strong>équentesx in dx est-elle une clé de dd [k]désigne la valeur associée à klen (d) nombre de clésmin(d), max(d) minimum, maximum des clésdel d [k] supprime la clé k (et la valeur associée)d.keys() retourne la liste des clésd.values() retourne la liste des valeursd.items() retourne la liste de couples (clé, valeur)d.clear() supprime tous les élémentsd = { 4:’element’, ’ty’:’autre element’ }i = len(d) # vaut 2m = min(i) # vaut 4it = d.items () # vaut [(4, ’element’), (’ty’, ’autre element’)]del d [’ty’] # après cette ligne, d vaut { 4:’element’}Xavier Dupré Programmation et algorithme 25 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesAutres manipulations de dictionnairesOn suppose que d est un dictionnaire.Opérations <strong>fr</strong>équentesd.get (k, v) retourne la valeur associée à la clé k ou retourne v sila clé k ne fait pas partie du dictionnaired.update (d2) fusionne deux dictionnaires, si une clé apparaît dans lesdeux dictionnaires, la valeur de d2 est conservéed = { 4:’element’, ’ty’:’autre element’ }v = d.get (4,0) # v vaut ’element’v = d.get (5,0) # v vaut 0d2 = { 4:’different’, ’rt’:’R’ }d.update (d2) # après cette ligne, d vaut# {’rt’: ’R’, 4: ’different’, ’ty’: ’autre element’}Xavier Dupré Programmation et algorithme 26 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesConversionLe langage Python peut convertir une information d’un type dans un autretype. Si la conversion n’est pas possible, une erreur est déclenchée.i = int (v) # convertit v en entier si possibler = float (v) # convertit v en réel si possibles = str (v) # convertit v en chaîne de caractères si possiblet = tuple (v) # convertit v en tuple si possiblel = list (v) # convertit v en liste si possibled = dict (v) # convertit v en dictionnaire si possibleXavier Dupré Programmation et algorithme 27 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesTrue, False, NonePython inclut trois constantes qui représentent :▶ True : résultat d’une condition valide (5 < 6)▶ False : résultat d’une condition invalide (5 > 6)▶ None : représente un résultat vide, souvent utilisé comme valeur pardéfaut, c’est aussi le résultat d’une fonction qui ne retourne pasexplicitement de résultatXavier Dupré Programmation et algorithme 28 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesStructures de langageCe que l’ordinateur sait faire avec des nombres.Xavier Dupré Programmation et algorithme 29 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesGrammaire réduiteLe Python est un langage de <strong>programmation</strong> impérative. Il se composed’une suite d’instructions qui ne sont pas toujours exécutées dans l’ordreoù on les lit. Il utilise les concepts suivant :▶ la séquence▶ le test▶ la boucleA ces trois concepts, on ajoutera les fonctions qui permettent de présenterun programme sous la forme d’un assemblage de petits programmesindépendants. Il est possible d’utiliser ces concepts les uns à la suite desautres, de les imbriquer.La séquence est simplement le fait d’exécuter les instructions dans l’ordreoù elles se présentent. Une séquence est toute suite d’instructions necontenant ni boucle, ni test, ni fonction.Xavier Dupré Programmation et algorithme 30 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesTestsLes tests permettent de faire dépendre une séquence d’instructions d’unecondition. Les instructions concernées doivent être décalées ou indentéespar rapport aux mots-clés if et else.if :# séquence excutée si la condition est vraie (ligne indentée)else :# séquence excutée si la condition est fausse (ligne indentée)# cette partie est facultative (ligne indentée)Exemples :if x > 0 :y = log (x)else :y = log(-x)# --> log |x|# --> log |x|a = 0if (y == 1 and x == 2) or z


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesBoucle forIl existe deux types de boucles. Elles permettent de répéter une séquenced’instructions. La première est une boucle for qui parcourt les élémentsd’une liste.l = [ ... ] # l est une listefor element in l :# instructions à répéter autant de fois qu’il y a d’éléments dans la liste l# ...La boucle for la plus couramment utilisée est certainement celle qui parcourtune liste d’entiers :n = ... # n est un entierfor i in range (0,n) : # dans ce cas précis, xrange est plus rapide que range# instructions à répéter pour tous les entiers compris entre 0 et n-1# ...Exemple : somme de tous les entiers compris entre 1 et 100 incluss = 0for i in range (1,101) :s += iXavier Dupré Programmation et algorithme 32 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesBoucle whileLa seconde boucle while répète une séquence d’instructions autant de foisqu’une condition est vraie. Il faut donc que cette condition soit invalidéeau moins une fois pour permettre au programme de s’arrêter.while :# instructions à répéter tant que la condition est vraie# ...Exemple : on veut connaître le nombre de chif<strong>fr</strong>es d’un nombre entier nl = 0while n > 0 :l += 1n /= 10Xavier Dupré Programmation et algorithme 33 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesbreak et continuebreak et continueDeux instructions viennent perturber le déroulement d’une boucle.L’instruction break arrête la boucle à l’endroit même où elle estexécutée. L’instruction continue passe directement à l’itération suivantesans exécuter les lignes suivantes.L’exemple suivante recherche l’élément trois dans une liste.m = [ 0, 5, 6, 3, 6, 7]for i in xrange (0, len (m)) :if m [i] == 3 :breakL’exemple suivante multiplie tous les éléments non nuls d’une liste.m = [ 0, 5, 6, 3, 6, 7]s = 1for i in xrange (0, len (m)) :if m [i] == 0 : continues *= m [i]Xavier Dupré Programmation et algorithme 34 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesListes abrégéesLa langage Python of<strong>fr</strong>e une notation abrégée pour construire des listes.l = range (0,10) # égale à [0,1,2,3,4,5,6,7,8,9]l = [ 2*i+1 for i in range (0,10) ] # égale à [1,3,5,7,9,11,13,15,17]l = range (1,18,2) # égale à [1,3,5,7,9,11,13,15,17]On peut également inclure une condition :l = [ 2*i+1 for i in range (0,10) if i % 3 == 0 ] # égale à [1,7,13]Ou utiliser plusieurs boucles :l = [ (x,y) for x in range (0,3) for y in range (0,2) ]# égale à [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)On peut imbriquer les listes :l = [ [ 0 if i!=j else 1 for i in range (0,3) ] for j in range (0,3) ]# égale à [[1, 0, 0], [0, 1, 0], [0, 0, 1]]Xavier Dupré Programmation et algorithme 35 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesFonctionsLes fonctions permettent de reproduire la même tâche sur des donnéesdifférentes sans avoir à recopier le code. Elles acceptent des paramètres etretournent des résultats avec le mot-clé return.def fonction (a,b,c) :# fonction de trois paramètres# r2 = ...# r1 = ...return r1,r2Exemple : somme de n éléments choisis aléatoirement dans une listedef somme_aleatoire (l,n = 10) :s = 0for e in range (0,n) :i = randint (0, len(l)-1)s += l [i]return sr = somme_aleatoire ( [0,1,3,4,5], 50 )r = somme_aleatoire ( [0,1,3,4,5] ) # n vaut par défaut 10Xavier Dupré Programmation et algorithme 36 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesParamètres d’une fonctionIl peut exister une variable portant le même nom dans deux fonctionsdifférentes : ce sont deux variables différentes.def somme_aleatoire (l, n = 10) :s = 0for e in range (0,n) :i = randint (0, len(l)-1)s += l [i]return sdef somme_aleatoire2 (l, n = 10) :s = 0for e in range (0,n) :i = somme_aleatoire (l, n)s += l [i]return slistes et dictionnairesIl faut faire attention lorsqu’on modifie une liste ou un dictionnaire passéen paramètre d’une fonction.def param_list (l,i) :l [i] = 5i = -1a = [5,6]i = 0param_list (a,i)print a,’,’,i # affiche [0,6], 0def param_dict (l,i) :l [0] = 5i = -1a = {5:6}i = 0param_dict (a)print a,’,’,i # affiche {0:5, 5:6}, 0Xavier Dupré Programmation et algorithme 37 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesLes électionsOn revient sur les élections présidentielles de 2007.On cherche à connaître le report des voix en fonction des candidats : pourqui ont voté les électeurs de Bayrou ?Xavier Dupré Programmation et algorithme 38 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesRésultats des deux tours▶ Premier tourdépartement inscrits votants Bayrou Royal SarkozyAIN 372899 320859 62119 65449 109211AISNE 377475 315501 42000 72835 91118ALLIER 259537 221525 39700 55744 60994▶ Second tourdépartements inscrits votants Sarkozy RoyalAIN 372951 319523 185174 120679AISNE 377467 317396 161670 141338ALLIER 259503 220677 102426 107442Comment définir le report des voix ou comment savoir pour qui ont votéles électeurs de Bayrou au second tour ?Xavier Dupré Programmation et algorithme 39 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesModélisation linéaireEn comptant les votes blancs, nous connaissons le nombre de votes pourchaque candidat, chaque département et chaque tour. On note X =(x 1 , ..., x 13 ) le vecteur des 13 nombres de votes pour un département etY = (y 1 , ..., y 3 ) le même vecteur pour le second tour. On cherche àexpliquer Y d’après X avec un modèle linéaire :Y = XA (1)A est une matrice de 13 lignes et 3 colonnes. Ainsi, le vote y 1 sera unecombinaison linéaire des notes du premier tour :y 1 =13∑i=1a 1i x i (2)Xavier Dupré Programmation et algorithme 40 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesRégressionPour déterminer les coefficients de la matrice A, on suppose que le modèleest le même pour tous les départements. On effectue une régressionlinéaire. Si n est le nombre de départements, on définit X par une matricen × 13 et Y est une matrice n × 3. On cherche une matrice A vérifiant :Y = XA + ɛ ⇐⇒ ɛ = Y − XA (3)ɛ est un bruit blanc. On cherche à minimiser la variance du bruit, donc àtrouver la matrice  qui minimise :La solution est :minA‖(Y − XA) ′ (Y − XA)‖ 2 (4) = (X ′ X ) −1 X ′ Y (5)Xavier Dupré Programmation et algorithme 41 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesOpérationsLe calcul précédent nécessite trois opérations : la multiplication, la transposée et l’inversiond’une matrice qui sera représentée par une liste de listes. L’inversion commence par un pivot.def mult (m1, m2) :"""multiplication de matrices"""res = [ [ 0.0 for l in m2 [0] ] for k in m1 ]for i in xrange (0, len (res)) :for j in xrange (0, len (res [i])) :s = 0.0for k in xrange (len (m2)) :s += m1 [i][k] * m2 [k][j]res [i][j] = sreturn resdef transposee (m) :"""transposee d’une matrice"""res = [ [ 0.0 for l in m ] for ll in m [0]]for i in xrange (0, len (m)) :for j in xrange (0, len (m [0])) :res [j][i] = m [i][j]return resdef _identite (n) :return [ [ 0.0 if i != j else 1.0 \for i in xrange (0, n)] \for j in xrange (0, n) ]def _pivot_gauss (mat) :passage = _identite (len (mat))for n in xrange (0, len (mat)) :fact = mat [n][n]if fact == 0 :pos = n+1while ((pos < len (mat)) and \(mat [pos][n] == 0)) : pos += 1if pos == len (mat) : continuefor k in xrange (n, len (mat)) :mat [n][k] += mat [pos][k]for k in xrange (0, len (mat)) :passage [n][k] += passage [pos][k]fact = mat [n][n]for l in xrange (n+1, len (mat)) :div = mat [l][n]if div == 0 : continuetemp = div / factfor k in xrange (n, len (mat)) :mat [l][k] -= mat [n][k] * tempfor k in xrange (0, len (mat)) :passage [l][k] -= passage [n][k] * tempreturn passageXavier Dupré Programmation et algorithme 42 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesInversion d’une matriceL’inversion se termine par un second pivot de Gauss en sens inverse.def _pivot_gauss_inverse (mat) :passage = _identite (len (mat))for n in xrange (0, len (mat)) :fact = mat [n][n]for k in xrange (n, len (mat)) :mat [n][k] /= factfor k in xrange (0, len (mat)) :passage [n][k] /= factdef inversion (m) :m = copy.deepcopy (m)pas1 = _pivot_gauss (m)pas2 = _pivot_gauss_inverse (m)return mult (pas2, pas1)for n in xrange (len (mat)-1, -1, -1) :fact = mat [n][n]for l in xrange (n-1, -1, -1) :div = mat [l][n]if div == 0 : continuetemp = div / factfor k in xrange (n, len (mat)) :mat [l][k] -= mat [n][k] * tempfor k in xrange (0, len (mat)) :passage [l][k] -= passage [n][k] * tempreturn passageXavier Dupré Programmation et algorithme 43 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesRésultatsblancs Sarkozy Royalblancs 0.622 1.287 0.59701-Besancenot 0.058 -0.516 1.01002-Buffet -0.021 0.087 1.04303-Schivardi 0.525 0.062 -0.64504-Bayrou 0.119 0.330 0.28305-Bové -0.013 1.006 0.66806-Voynet -0.356 1.620 0.70507-De Villiers 0.057 0.747 0.04808-Royal 0.002 -0.139 1.13109-Nihous 0.068 0.542 0.76710-Le Pen 0.086 0.946 -0.10611-Laguiller 0.140 -0.328 2.19512-Sarkozy -0.000 1.078 -0.012Interprétation ?Xavier Dupré Programmation et algorithme 44 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesOptimisation sous contrainte (1/2)On cherche maintenant à obtenir des coefficients uniquement positifs. Ce problème fait partiede la famille des optimisations quadratiques convexes sous contraintes :avecet{min 1 x 2 x ′ Qx + p ′ x }Gx ⩽ hCx = bEn définissant x comme la concaténation des lignes de la matrice A, il est possible de réécrirele problème de minimisation de la façon qui précède. On définit Y i le vecteur correspondant àla colonne i de Y . On définit X i ∈ M n,3×13 définie par trois blocs de même taille que X . Lebloc i est égal à X , les autres sont nuls.(6)∥∥(Y − XA) ′ (Y − XA) ∥ ∥ 2 ===3∑(Y i − X i x) ′ (Y i − X i x) (7)i =13∑Y ′i Y i − x ′ X ′i Y i − Y ′i X i x + x ′ X ′i X i x (8)i =13∑3∑Y ′i Y i −2 Y ′i X ii =1i =1} {{ }3∑x + x ′ i =1p ′X ′i X i} {{ }12 Q x (9)Xavier Dupré Programmation et algorithme 45 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesOptimisation sous contrainte (2/2)On suppose que les coefficients sont désormais tous positifs et que lesvoies obtenues au premier tour pour un candidat se répartissent entre lestrois choix possibles du second tour. Autrement dit, la somme des lignesde la matrice A est égale à 1. Une recherche sur internet montre que ceproblème a déjà été implémenté 2 (voir séance suivante).Interprétation ?blancs Sarkozy Royalblancs 0.048 0.000 0.95201-Besancenot 0.000 0.000 1.00002-Buffet 0.000 0.000 1.00003-Schivardi 1.000 0.000 0.00004-Bayrou 0.229 0.312 0.45905-Bové 0.009 0.569 0.42206-Voynet 0.000 1.000 0.00007-De Villiers 0.137 0.863 0.00008-Royal 0.000 -0.000 1.00009-Nihous 0.102 0.000 0.89810-Le Pen 0.112 0.888 0.00011-Laguiller 0.000 0.000 1.00012-Sarkozy -0.000 1.000 -0.0002 http://abel.ee.ucla.edu/cvxopt/examples/tutorial/qp.htmlXavier Dupré Programmation et algorithme 46 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesAstucesComment trier deux tableaux de même dimension de sorte que le secondtableau soit rangé dans le même ordre ?voir livre http://www.<strong>xavierdupre</strong>.<strong>fr</strong>/mywiki/InitiationPython paragraphe3.7, page 87Xavier Dupré Programmation et algorithme 47 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesRésuméLe langage Python comme la plupart des langages inclut :▶ types simples▶ int : type entier▶ float : type réel▶ str : chaîne de caractères▶ types ensemble▶ list : listes ou tableaux▶ dict : dictionnaires = tableaux avec indices non entierOn manipule ces types à l’aide d’opérations standard (opérations numériques,ajout, retrait...) et à l’aide de :▶ boucles▶ for : parcourir tous les éléments d’un ensemble▶ while : répéter tant qu’une condition est vraie▶ test if...else : choisir d’exécuter des instructions plutôt qued’autres▶ fonctions def : éviter de réécrire les mêmes instructions à plusieursendroits du programmeXavier Dupré Programmation et algorithme 48 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixPartie IIPrincipes communs à tous les langagesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesExtensions, ModulesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixClasses, Programmation ObjectPrésentationOpérateursHéritageCopiePython, R, VBA, SQL, ...Problèmes simplesLangage SQLCarte de FranceConclusionQuelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et defemellesXavier Dupré Programmation et algorithme 49 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixCitationJe suis convaincu que le changement peut intervenir à l’occasion des crisesmais ne se produit pas naturellement de façon favorable.Michel CrozierLa crise de l’intelligenceXavier Dupré a de l’humour. L’humour d’un informaticien. Donc, durantles deux premières minutes, son cours est intéressant car il commmenceavec une citation plus ou moins provocatrice. Mais ensuite, il se met surson ordinateur et là, c’est le drame.Elève anonyme (2010)Xavier Dupré Programmation et algorithme 50 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixExemple../exemple_eleve/2009_systeme_solaire/projetpythonfxctt.pyXavier Dupré Programmation et algorithme 51 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixLecture d’un fichier texteLa lecture d’un fichier s’effectue toujours selon le même schéma. Elle est souvent suivie d’unpost-traitement.f = open (file, "r")lines = f.readlines ()f.close ()# ouverture du fichier# récupération des lignes du fichier# fermeture du fichierExemple : data/tour1_2007.txt data/tour2_2007.txtdépartement inscrits votantsAIN 372899 320859AISNE 377475 315501ALLIER 259537 221525def load_file (file) :f = open (file, "r") #lines = f.readlines ()# lecturef.close () #line = [ l.strip ("\r\n\t ").split ("\t") for l in lines ] # nettoyage et colonnesline = [ l for l in line if len (l) > 1 ] # pas de ligne videheader = line [0][2:] # on sépare la première lignedep = [ l [0] for l in line [1:] ] # on récupère les départementsmat = [ [ float (x.replace (" ", "")) for x in l[2:] ] for l in line [1:] ]# suppression des espaces dans les nombres avant une conversion en floatmat = [ [ m [0] - sum (m [1:])] + m [1:] for m in mat ] # votes blancsreturn header, dep, mat# retour du résultatXavier Dupré Programmation et algorithme 52 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixEcriture d’un fichier texteL’écriture d’un fichier s’effectue toujours selon le même schéma.f = open (file, "w")f.write ( ... )f.write ( ... )f.close ()# ouverture du fichier ("w" pour write)# écriture d’une information# écriture d’une autre information# fermeture du fichierOn enregistre les matrices (liste de listes) souvent selon un même formatlisible depuis d’autres applications telles que Excel.def save_matrix (file, mat) :f = open (file, "w")# ouverture du fichierfor line in mat :# on parcourt les lignes de la matriceconv = [ str (x) for x in mat ] # on convertit les informations en chaînes de caractèress = "\t".join (conv) # on les colle ensemble séparées par une tabulationf.write (s + "\n")# on écrit la chaîne suivie d’un marqueur de ligne ("\n")f.close ()# on ferme le fichierXavier Dupré Programmation et algorithme 53 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixRattraper une erreurMême si un programme provoque une erreur d’exécution, ce n’est pas une fatalité.x = 0.0y = 1.0 / xL’erreur est inévitablement :Traceback (most recent call last):File "divi.py", line 4, in y = 1.0 / xZeroDivisionError: float divisionMais on peut rattraper l’erreur :try :x = 0.0y = 1.0 / xexcept Exception, e :print "erreur attrapée :", eprint "on continue quand même"L’objectif n’est pas de contournerles erreurs provoquées par unprogramme mais plus de gérersoi-même l’erreur.Le programme affiche maintenant :erreur attrapée : float divisionon continue quand mêmeXavier Dupré Programmation et algorithme 54 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixCréer une erreurPython permet de générer des erreurs d’exécution (si un paramètre prend une valeur inattenduepar exemple).def factorielle (n) :if n < 0 : raise Exception ("impossible de calculer la factorielle d’un nombre négatif")if n = 0 # ne déclenche une erreur que si n < 0if n


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixModulesUn module : c’est utiliser le programme du voisin sans le recopier.Xavier Dupré Programmation et algorithme 56 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixTrois types d’extensionsTous les langages possèdent des librairies. Leur usage en langage Pythonest assez simple. Les extensions ou modules sont de trois types :1. Les modules internes : ils sont disponibles dès l’installation dulangage comme le module os ou sys.2. Les modules externes : il faut les télécharger depuis Internet. Laliaison simple entre C++ et Python a permis l’utilisation denombreuses librairies antérieures à la création du langage Python .3. Les modules créés par l’utilisateur.Pour utiliser un module, la syntaxe est toujours la même. La ligne suivante doit figurer en débutde programme :import modulePour utiliser un élément du module :<strong>fr</strong>om module import fonctionx = module.fonction (...) x = fonction (...)Xavier Dupré Programmation et algorithme 57 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixQuelques modules internescgicodecscopydatetimeUtilisé dans les scripts CGI (<strong>programmation</strong> Internet).Jeux de caractères.Copies d’instances de classes.Calculs sur les dates et heures.glob Chercher des fichiers (voir chapitre ??).mathosos.pathprofilerandomreshutilsqlite3systhreadingtimeTkinterunittesturllibxml.saxzipfileFonctions mathématiques standard telles que cos, sin, exp, log...Fonctions systèmes dont certaines fonctions permettant de gérer les fichiersManipulations de noms de fichiers.Etudier le temps passé dans les fonctions d’un programme.Génération de nombres aléatoires.Expressions régulières.Copie de fichiers.Accès aux fonctionnalités du gestionnaire de base de données SQLite3.Fonctions systèmes, fonctions liées au langage Python.Utilisation de threads.Accès à l’heure, l’heure système, l’heure d’une fichier.Interface graphique.Tests unitaires (ou comment améliorer la fiabilité d’un programme).Pour lire le contenu de page HTML sans utiliser un navigateur.Lecture du format XML.Lecture de fichiers ZIP.Xavier Dupré Programmation et algorithme 58 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixQuelques modules externesmatplotlibscipynumpymdpce module reprend la même logique que le logiciel MatLab ou Octave pour dessiner desgraphes.ce module propose de nombreux algorithmes, algorithmes de classification, intégration,optimisation, génération de nombres aléatoires, traitement du signal, interpolation, algorithmesgénétiques, algèbre linéaire, transformée de Fourier, dessin de courbes 2D, 3D.Son installation requiert d’abord celle du module numpy.ce module manipule efficacement les tableaux de grandes dimensions, intègre le calculmatriciel, la transformée de Fourier.ce module of<strong>fr</strong>e quelques fonctionnalités relatives à l’analyse des données tels que l’analyseen composante principale (ACP).cvxoptce module propose diverses fonctions d’optimisation.Rpy le langage R est un langage dédié aux calculs statistiques. Il est optimisé pour la manipulationde grandes matrices et des calculs statistiques et matriciels rapides. Il disposeégalement de nombreux graphiques. Il faut au préalable installer Python et R puis lemodule Rpy fera la liaison entre les deux.wxPythonpygamewin32comil propose des interfaces graphiques plus complètes que le module standard Tkintercomme une fenêtre tableur. Utilisé par de nombreuses applications, il est régulièrementmis à jour. Il est entièrement gratuit.ce module est prévu pour concevoir des jeux en Python. Il permet entre autres d’écouterles morceaux enregistrés sur un CD, d’afficher un film et également d’afficher des images,de récupérer les touches pressées au clavier, les mouvements de la souris, ceux de lamanette de jeux. Il suffit d’une heure ou deux pour écrire ses premiers programmes avecpygame.ce module permet de communiquer avec les applications Microsoft Windows tels que MicrosoftExcel. Il est ainsi possible de créer une feuille Excel depuis un programme Python,de l’imprimer, de la sauvegarder sans avoir à ouvrir Excel. Un moteur de recherche permettrade trouver de nombreux petits exemples utilisant ce module.Xavier Dupré Programmation et algorithme 59 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixCréer un module personnelTout programme peut être considéré comme un module.Module extension.pydef distance (x1,y1,x2,y2) :dx = float (x1-x2)dy = float (y1-y2)return (dx**2 + dy**2) ** 0.5if __name__ == "__main__" :# test, exécuté que si le module# est considéré comme le# programme principalprint distance (1,2,3,4)Programme principalimport extension# ne pas écrire .pyd = extension.distance (1,2,3,4)# le test inclut dans l’extension# n’est pas exécuté iciLe module doit se trouver dans le même répertoire que le programmeprincipal. Dans le cas contraire, il faut ajouter :import syssys.path.append ( )import Xavier Dupré Programmation et algorithme 60 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixExpressions régulièresLes expressions régulières sont disponibles dans la plupart des langages.Elles permettent la recherche avancée dans du texte. Le langage Pythonles propose via le module interne re 3 .Par exemple, on souhaite extraire toutes les dates du texte suivant :s = """date 0 : 14/9/2000date 1 : 20/04/1971 date 2 : 14/09/1913 date 3 : 2/3/1978date 4 : 1/7/1986 date 5 : 7/3/47 date 6 : 15/10/1914date 7 : 08/03/1941 date 8 : 8/1/1980 date 9 : 30/6/1976"""On construit le programme suivant :import re# première étape : constructionexpression = re.compile ("([0-3]?[0-9]/[0-1]?[0-9]/([0-2][0-9])?[0-9][0-9])")# seconde étape : rechercheres = expression.findall (s)print resCe qui donne :[(’14/9/2000’, ’20’), (’20/04/1971’, ’19’), (’14/09/1913’, ’19’),(’2/3/1978’, ’19’), (’1/7/1986’, ’19’), (’7/3/47’, ’’),(’15/10/1914’, ’19’), (’08/03/1941’, ’19’), (’8/1/1980’, ’19’),(’30/6/1976’, ’19’)]3 voir la page http://docs.python.org/library/re.html.Xavier Dupré Programmation et algorithme 61 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixCalcul matricielLe module numpy facilite l’écriture d’opérations sur les matrices à l’instarde langages comme MatLab ou R.import numpymat = numpy.matrix ([[1, 0],[1,2]])add = mat + mat# additionmul = mat * mat# multiplicationtr = mat.transpose () # transposéeinv = mat ** (-1)# inversionm3 = mat ** 3 # puissance 3L’intérêt est également de pouvoir réaliser facilement des opérations surles lignes ou les colonnes.mat [:,0] = 1 # tous les coefficients de la première 1 sont égaux à 1mat [0,:] = 1 # tous les coefficients de la première ligne 1 sont égaux à 1mat [:,:] = 2 # tous les coefficients de la matrice sont égaux à 2mat [:,0] = mat [0,:].transpose ()# la première colonne devient égale à la première lignemat [:,2:4] = 4 # les coefficients des colonnes 2 à 4 exclu sont égales à 4mat [5:10,2:4] = m # une sous-matrice est égale à une autreXavier Dupré Programmation et algorithme 62 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixGraphesLe module matplotlib permet de dessiner des graphes.X = [float(x) / 100 for x in range (0,101) ]Y = [ x**2 - x for x in X ]import pylabpylab.plot (X,Y)pylab.savefig (’c:\\temp\\x2-x.png’)pylab.show ()La libraire est assez bien documentée, elle of<strong>fr</strong>e de nombreux exemplesavec pour chacun d’eux le programme qui a permis de le créer.http://matplotlib.sourceforge.net/gallery.htmlXavier Dupré Programmation et algorithme 63 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixSortie HTMLLorsqu’un programme fournit des résultats graphiques et textuels, il estpréférable d’éviter de programmer l’affichage de ces données. Utiliser lenavigateur est plus rapide.import matplotlib.finance as FINimport datetimed1 = datetime.datetime (2009,1,1)d2 = d1.now ()dates,prices = get_financial_series ("YHOO", d1, d2)GraphOHLC ("Yahoo", dates, prices, "yahoo.png")f = open ("rapport_serie.html", "w")f.write ("\n")f.write ("Yahoo\n")f.write (’\n’)f.write ("volatilité: " + str (volatitity (prices)) + "\n")f.write ("\n")f.close ()Il suffit alors de ra<strong>fr</strong>aîchir le navigateur pour faire appartenir les dernièresmodifications.Xavier Dupré Programmation et algorithme 64 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixSortie PDFUne autre option consiste à produire un document PDF à l’aide du langageLatex.package = """a4 amsmath amssymb subfigure float latexsym amsfontsepic eepic makeidx multido varindex moreverb alltt fancyvrb fancyhdrcolor eurosym tabularx placeins url shorttoc""".split ()header = """\\documentclass[<strong>fr</strong>ench,11pt]{article}\n\\usepackage[<strong>fr</strong>ench]{babel}\\usepackage[usenames]{color}\\usepackage{""" + \"}\n\\usepackage{".join (package) + \"""}\\usepackage[small,normal]{caption2}\\urlstyle{sf}\\usepackage[pdftex]{graphicx}\usepackage[T1]{fontenc}\\begin{document}\n"""# création d’un fichier texf = open ("rapport_serie.tex", "w")f.write (header)f.write (’\\includegraphics[height=4cm]{yahoo.png}\n\n’)f.write ("volatilité: " + str (volatitity (prices)) + "\n")f.write ("\\end{document}\n")# finf.close ()import osos.system (r’"C:\Program Files\MiKTeX 2.7\miktex\bin\pdflatex" rapport_serie.tex’)os.system (r’"C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" rapport_serie.pdf’)Les deux dernières lignes servent à compiler le fichier résultat puis à l’afficher.Xavier Dupré Programmation et algorithme 65 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixOptimisationRetour sur les élections de 2007.Xavier Dupré Programmation et algorithme 66 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixOptimisationLa première solution sans contrainte (transparent 41) nous amenait à calculer :Â = (X ′ X ) −1 X ′ Y (10)On charge tout d’abord les deux matrices des deux tours en utilisant la fonction transparent 52.h1,d1,mat1 = load_file ("tour1_2007.txt")h2,d2,mat2 = load_file ("tour2_2007.txt")On utilise ensuite le module numpy et sa classe matrix pour réaliser les calculs :import numpyx = numpy.matrix (mat1) # conversion d’une liste de listes en matricey = numpy.matrix (mat2) # conversion d’une liste de listes en matricexp = x.transpose () # transposéexx = xp * x # produit X’Xxxi = xx ** (-1)# on utilise l’inverseres = xxi * xp * y# on calcule le résultat finalIl est conseillé chaque fois que c’est possible d’éviter la réécriture d’algorithmes déjàimplémentés dans un module. Les modules les plus populaires contiennent peu d’erreurset sont simples d’utilisation.Xavier Dupré Programmation et algorithme 67 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixOptimisation sous contrainteOn cherche toujours à résoudre le report des voix via le problème d’optimisation suivant :avecet{min 1 x 2 x ′ Qx + p ′ x }Gx ⩽ hCx = b(11)Où :∥∥(Y − XA) ′ (Y − XA) ∥ ∥ 2 =3∑3∑3∑Y ′i Y i −2 Y ′i X i x + x ′i =1i =1i =1} {{ }p ′X ′i X i} {{ }12 Q x (12)La contrainte d’égalité permet de forcer la somme des coefficients égaux à 1 et la contrainted’inégalité permet de n’avoir que des poids positifs.On utilise pour obtenir la solution deux modules :numpycvxoptpermet de manipuler les matrices facilementcontient différentes fonctions d’optimisation dont celle qui nous intéresseXavier Dupré Programmation et algorithme 68 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixConstruction des matrices avec numpyPréliminairesdef _zeros (lin, col) :return [ [ 0.0 for i in xrange (0, col) ] \for j in xrange (0, lin) ]lin,col = X.shapeConstruction de QbigX = [ numpy.matrix ( _zeros (lin, col*3) ) \for i in xrange (0,3) ]for i in xrange (0,3) :bigX [i] [:,col*i:col*(i+1)] = X [:,:]pX = []for m in bigX :pX.append ( m.transpose () * m )Q = Nonefor m in pX :if Q == None : Q = +melse : Q += m * 2Construction de pp = Nonefor i in xrange (0, 3) :tr = bigX [i].transpose ()y2 = Y [:,i] * (-2)t = tr * y2if p == None : p = telse : p += tConstruction de G et hh = numpy.matrix ( _zeros (col*3,1) )G = - numpy.matrix ( _identite (col*3 ) )Construction de C et bb = numpy.matrix ( _zeros (col,1) )b [:,:] = 1.0C = numpy.matrix ( _zeros (col,col*3) )for i in xrange (0, col) :C [i,i ] = 1.0C [i,i+col ] = 1.0C [i,i+col*2] = 1.0Xavier Dupré Programmation et algorithme 69 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixRésolution avec cvxoptPréliminaires<strong>fr</strong>om cvxopt import solvers<strong>fr</strong>om cvxopt import matrixD’un vecteur 36 × 1 à une matrice13 × 3res = numpy.matrix ( _zeros (13,3) )res [:,0] = coef [0:13]res [:,1] = coef [13:26]res [:,2] = coef [26:]Conversion des matricesnumpy en matrices cvxoptQ = matrix (Q)p = matrix (p)G = matrix (G)h = matrix (h)C = matrix (C)b = matrix (b)Résolutionsol = solvers.qp(Q, p, G, h, C, b)coef = sol [’x’]Résultats (voir égalementtransparent 46)print res[[ 4.79886469e-02 1.81127307e-07 9.52011164e-01][ 1.59033732e-07 1.53131638e-08 9.99999817e-01][ 1.41936533e-07 2.90582652e-08 9.99999821e-01][ 9.99998511e-01 7.59130873e-07 7.21079762e-07][ 2.28831971e-01 3.11875121e-01 4.59292900e-01][ 9.27881196e-03 5.69011069e-01 4.21710111e-01][ 2.54885986e-06 9.99994975e-01 2.46781162e-06][ 1.36601572e-01 8.63398309e-01 1.10627940e-07][ 3.26267821e-09 -3.35411137e-09 9.99999992e-01][ 1.02168584e-01 1.01129044e-07 8.97831307e-01][ 1.12107579e-01 8.87892377e-01 3.62329275e-08][ 5.04600428e-07 5.65653860e-08 9.99999430e-01][ -4.88111166e-09 9.99999999e-01 -2.09327090e-09]]Xavier Dupré Programmation et algorithme 70 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixRésuméLe langage Python fait très peu de choses par lui-même mais il permetl’utilisation de modules via le mot-clé import :▶ modules internes : fournis avec le langage (copy, datetime, os,math, re, random, sys, TKinter, ...)▶ modules externes : accessible via Internet (matplotlib, numpy,scipy, pygame)▶ modules personnalisés : modules créés par le programmeurParmi les algorithmes qu’on ne reprogramme plus :▶ tri▶ traitements des chaînes de caractères ou expressions régulières(re)▶ calcul matriciel (numpy)▶ problèmes simple d’optimisation (scipy, cvxopt)▶ dessin de courbes (matplotlib)Xavier Dupré Programmation et algorithme 71 / 132


Partie IIIPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopiePrincipes communs à tous les langagesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesExtensions, ModulesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixClasses, Programmation ObjectPrésentationOpérateursHéritageCopiePython, R, VBA, SQL, ...Problèmes simplesLangage SQLCarte de FranceConclusionQuelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et defemellesXavier Dupré Programmation et algorithme 72 / 132


CitationPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieEt comme la multitude des lois fournit souvent des excuses aux vices, ensorte qu’un Etat est bien mieux réglé lorsque, n’en ayant que fort peu, ellesy sont fort étroitement observées.René DescartesDiscours de la méthodeXavier Dupré Programmation et algorithme 73 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieExemple../exemple_eleve/xd_einstein/einstein_prolog.pyLes faits :1. Il y a cinq maisons de 5 couleurs différentes.2. Dans chaque maison vit une personne de nationalité différente.3. Chacun des 5 propriétaires boit un certain type de boisson, fume un certain type de cigares et garde uncertain animal domestique.La question : Qui a le poisson ?Quelques indices :1. L’Anglais vit dans une maison rouge.2. Le Suédois a des chiens comme animaux domestiques.3. Le Danois boit du thé.4. La maison verte est à gauche de la maison blanche.5. Le propriétaire de la maison verte boit du café.6. La personne qui fume des Pall Mall a des oiseaux.7. Le propriétaire de la maison jaune fume des Dunhill.8. La personne qui vit dans la maison du centre boit du lait.9. Le Norvégien habite la première maison.10. L’homme qui fume les Blend vit à côté de celui qui a des chats.11. L’homme qui a un cheval est le voisin de celui qui fume des Dunhill.12. Le propriétaire qui fume des Blue Master boit de la bière.13. L’Allemand fume des Prince.14. Le Norvégien vit juste à côté de la maison bleue.15. L’homme qui fume des Blend a un voisin qui boit de l’eau.Xavier Dupré Programmation et algorithme 74 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesGrouper variables et fonctionsPrésentationOpérateursHéritageCopieOn peut souvent grouper des fonctions et des variables entre elles car :1. Les mêmes fonctions s’appliquent toujours aux mêmes variables.2. Ces mêmes variables sont toujours appariées.Exemples :▶ Point dans un plan▶ variables : x et y▶ fonctions : addition, soustraction, norme, ...▶ Matrice▶ variables : nombre de lignes, de colonnes, liste des coefficients▶ fonctions : addition, multiplication, inversion, ...▶ Pièce d’un jeu d’échecs▶ variables : couleur, valeur, type de pièce▶ fonctions : position, déplacement, ...Xavier Dupré Programmation et algorithme 75 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPièce d’un jeu d’échecPrésentationOpérateursHéritageCopieDéterminer les cases accessibles par un cavalier ?def cases_dans_lechiquier (x,y) :if 1


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopiePièce d’un jeu d’échec et une classePrésentation différente, même programmeclass Cavalier :def __init__ (self, x,y,couleur) :self.x= xself.y= yself.couleur = couleurdef cases_dans_lechiquier (self, x,y) :if 1


Deux pièces en prisePrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopiedef cavalier_en_prise (x1,y1,c1, x2,y2,c2) :if c1 == c2 : return Falseprises = cases_accessibles_cavalier (x1,y1)if (x2,y2) in prises : return Trueelse : return Falseprint cavalier_en_prise (4,5,"noir",6,7,"blanc")Ecriture avec une classe :class Cavalier :...def en_prise (self, autre) :if self.couleur == autre.couleur : return Falseprises = self.cases_accessibles ()if (autre.x, autre.y) in prises : return Trueelse : return Falsepiece = Cavalier (4,5,"blanc")piece2 = Cavalier (6,7,"noir")print piece.en_prise (piece2)Xavier Dupré Programmation et algorithme 78 / 132


printPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieAfficher le contenu n’est pas immédiat :piece = Cavalier (5,6,"blanc")print pieceprint piece.x, piece.yLe résultat de l’instruction print piece est plutôt obscur :5 6Xavier Dupré Programmation et algorithme 79 / 132


Opérateur __str__Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieLes opérateurs sont des méthodes spéciales :▶ leur nom est ____▶ ils simplifient certaines écrituresclass Cavalier :#...def __str__ (self) :s = "position %d,%d couleur %s" % (self.x, self.y, self.couleur)return spiece = Cavalier (5,6,"blanc")print pieceprint piece.__str__ () # équivalent à la ligne précédenteLe résultat est plus explicite :position 4,5 couleur blancXavier Dupré Programmation et algorithme 80 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesOpérateur __iadd__, __neg__PrésentationOpérateursHéritageCopieclass Cavalier :#...def __iadd__ (self, pos) :self.x += pos [0]self.y += pos [1]return selfdef __neg__ (self) :if self.couleur == "blanc":else :return Cavalier (self.x, self.y, "noir")return Cavalier (self.x, self.y, "blanc")piece = Cavalier (5,6,"blanc")print piece # affiche position 4,5 couleur blancpiece += (1,1)print piece # affiche position 5,6 couleur blancautre = -pieceprint autre # affiche position 5,6 couleur noirXavier Dupré Programmation et algorithme 81 / 132


L’héritagePrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieChanger l’ancien sans le rendre obsolète.Xavier Dupré Programmation et algorithme 82 / 132


Cavalier et fouPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieclass Cavalier :def __init__ (self, x,y,couleur) :self.x= xself.y= yself.couleur = couleurdef cases_dans_lechiquier (self, x,y) :if 1


Tronc communPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieclass Piece :def __init__ (self, x,y,couleur) :self.x= xself.y= yself.couleur = couleurdef cases_dans_lechiquier (self, x,y) :if 1


Les différencesPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieclass Cavalier (Piece) :def cases_accessibles (self) :pos = [ (1,2), (2,1), (-1,2), (1,-2), (2,-1), (-2,1), (-1,-2), (-2,-1) ]res = [ ]for i,j in pos :if self.cases_dans_lechiquier (self.x+i, self.y+j) :res.append ( (self.x+i, self.y+j) )return resclass Fou (Piece) :def cases_accessibles (self) :res = [ ]for k in range (1,8) :if self.cases_dans_lechiquier (self.x+k, self.y+k) :res.append ( (self.x+k, self.y+k) )if self.cases_dans_lechiquier (self.x+k, self.y-k) :res.append ( (self.x+k, self.y-k) )if self.cases_dans_lechiquier (self.x-k, self.y+k) :res.append ( (self.x-k, self.y+k) )if self.cases_dans_lechiquier (self.x-k, self.y-k) :res.append ( (self.x-k, self.y-k) )return resXavier Dupré Programmation et algorithme 85 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieMéthode en_priseOu placer la méthode en_prise puisque :1. sa logique ne change pas quelque soit la pièce2. elle utilise une méthode cases_accessibles différente pour chaquepiècedef en_prise (self, autre) :if self.couleur == autre.couleur : return Falseprises = self.cases_accessibles ()if (autre.x, autre.y) in prises : return Trueelse : return FalseIl faut l’écrire dans la classe Piece : elle utilisera la méthode de la classefille.Xavier Dupré Programmation et algorithme 86 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieAppeler une méthode de la classe mèreclass Fou (Piece) :def __init__ (self, x,y,couleur) :Piece.__init__ (self, x,y, couleur)if (x + y) % 2 == 0 : self.fou = ’blanc’else : self.fou = ’noir’Xavier Dupré Programmation et algorithme 87 / 132


Double héritagePrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieLa classe Dame doit redéfinir les méthodes spécifiques à Fou et Tour.class Dame (Fou, Tour) :def cases_accessibles (self) :fou = Fou.cases_accessibles (self)cav = Tour.cases_accessibles (self)return fou + cavXavier Dupré Programmation et algorithme 88 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieOù implémenter une méthode ?▶ arc noir : héritage▶ arc rouge : contientune ou plusieurs decette classe (dans uneliste par exemple)Où et commentimplémenter lesfonctionnalités suivantes ?▶ la prise en passant▶ la pièce met-elle en échec le roiadverse ?▶ le pion va à dame▶ roqueXavier Dupré Programmation et algorithme 89 / 132


CopiePrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieLa copie est un des points qui séparent les langages. Ils ne se comportentpas de la même façon.Xavier Dupré Programmation et algorithme 90 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesAffection différente d’une copiePrésentationOpérateursHéritageCopiec = Cavalier (1,1,’blanc’)d = c # copie ou pas copie ?d.couleur = ’noir’print cprint dCe programe affiche :position 1,1 couleur noir type Cavalierposition 1,1 couleur noir type Cavalierd = c n’effectue pas une copie.Xavier Dupré Programmation et algorithme 91 / 132


Copie explicitePrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopiec = Cavalier (1,1,’blanc’)import copyd = copy.copy (c)# copie explicited.couleur = ’noir’print cprint dCe programe affiche :position 1,1 couleur blanc type Cavalierposition 1,1 couleur noir type CavalierLa modification de l’attribut couleur pour l’instance d n’a aucune influencesur l’instance c.Xavier Dupré Programmation et algorithme 92 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesCas des listes et dictionnairesPrésentationOpérateursHéritageCopiel = [ 1,2,3 ]ll = lll [0] = -5print l # affiche [-5, 2, 3]print ll # affiche [-5, 2, 3]l = [ 1,2,3 ]ll = copy.copy (l)ll [0] = -5print l # affiche [1, 2, 3]print ll # affiche [-5, 2, 3]Xavier Dupré Programmation et algorithme 93 / 132


Listes d’objetsPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopiel = [ Cavalier (1,1,"blanc"),Fou (2,2,"noir") ]ll = copy.copy (l)ll [0].x = 8for o in l : print ofor o in ll : print oLe programme affiche :position 8,1 couleur blanc type Cavalierposition 2,2 couleur noir type Fouposition 8,1 couleur blanc type Cavalierposition 2,2 couleur noir type FouLes deux cavaliers sont modifiés : c’estdonc qu’il n’y en a qu’un seul.l = [ Cavalier (1,1,"blanc"),Fou (2,2,"noir") ]ll = copy.deecopy (l) #######ll [0].x = 8for o in l : print ofor o in ll : print oLe programme affiche :position 1,1 couleur blanc type Cavalierposition 2,2 couleur noir type Fouposition 8,1 couleur blanc type Cavalierposition 2,2 couleur noir type FouAvec deepcopy, il y a bien deux cavaliers.Xavier Dupré Programmation et algorithme 94 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieCopie, gestion de la mémoireAffection et copieL’affectation n’est équivalente à une copie que pour les types simples :int, float, str, tuple. L’affectation n’est pas une copie pour lesautres types : cela prend du temps, ce n’est donc pas le comportementpar défaut.Gestion de la mémoireCe comportement est englobé dans ce qu’on appelle la gestion de lamémoire. Cette partie diffère selon les langages, elle est souventimplicite. C’est une source <strong>fr</strong>équente d’erreurs 4 .4 et une source d’inspiration lors des entretiens d’embaucheXavier Dupré Programmation et algorithme 95 / 132


RésuméPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesPrésentationOpérateursHéritageCopieTrois avantages des classes :▶ une plus grand cohérence▶ une façon de lier données et fonctions associées▶ un concept qui s’est imposé▶ les opérateurs permettent d’en faire presque des composantes dulangage▶ héritage▶ réécrire une partie de l’objet sans modifier l’ancien▶ manipuler des objets dont on ne connaît que la surfaceXavier Dupré Programmation et algorithme 96 / 132


Partie IVPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionPrincipes communs à tous les langagesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesExtensions, ModulesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixClasses, Programmation ObjectPrésentationOpérateursHéritageCopiePython, R, VBA, SQL, ...Problèmes simplesLangage SQLCarte de FranceConclusionQuelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et defemellesXavier Dupré Programmation et algorithme 97 / 132


CitationPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionL’homme naît curieux, mais cette curiosité naturelle s’assèche à mesurequ’il grandit. Je considère que mon travail est de faire tout mon possiblepour nourrir la curiosité des gens avec lesquels je travaille, parce qu’àSony nous savons qu’une fabuleuse idée surgira plus facilement dans uneatmosphère de confiance que là où tout est calculé, toute action paralysée,toute responsabilité fixée par un organigramme.Akio MoritaXavier Dupré Programmation et algorithme 98 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionDeux tours d’élections présidentiellesLes résultats des élections présidentielles sont regroupés en deux tables :1. une ligne par département2. une colonne par candidats (y compris les bulletins blancs et lenombre d’inscrits)On souhaite :1. obtenir les résultats agrégés par région pour Royal et Sarkozy2. afficher les résultats sur une carte pour la France métropolitaineXavier Dupré Programmation et algorithme 99 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionPremière tâche : agréger les donnéesLes données se présentent sous la forme d’une feuille Excel : data/tours.xls.Il faut :1. récupérer la correspondance entre départements et région (http://www.google.<strong>fr</strong>/search?hl=<strong>fr</strong>&q=table+region+departement)2. associer le nom de la région à chaque résultat du premier tour3. ajouter les résultats du second tour4. regrouper les résultats par régionXavier Dupré Programmation et algorithme 100 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionPlusieurs outilsExcel n’est pas l’outil le plus pratique. Il est préférable d’utiliser les basesde données.▶ langage SQL http://www.sqlite.org/lang.html▶ un outil gratuit pour manipuler les tables 5(../donnees/SQLiteSpy.exe)▶ Le langage Python est utilisé pour construire les requêtescorrespondant à la création des tables.5 http://www.yunqa.de/delphi/doku.php/products/sqlitespy/indexXavier Dupré Programmation et algorithme 101 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionUtilité du langage SQLIl sert à extraire l’information des bases de données relationnelles. Cesbases peuvent excéder la taille d’une seule machine.On souhaite par exemple mémoriser les clicks des utilisateurs sur un moteurde recherche, c’est-à-dire les informations suivantes :requête1. un identifiant2. la requête elle-même3. l’heure de la recherche4. la zone géographiqueclic1. l’identifiant de la requête2. le lien3. l’heure du clicIl y a un nombre indéfini de clic par requête : il est impossible de stockercette information dans une seule table.Xavier Dupré Programmation et algorithme 102 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesSQL : créer une tableProblèmes simplesLangage SQLCarte de FranceConclusionCréer une tableCREATE TABLE tour2 ( nom_departementinscritsvotantsexprimesSarkozyRoyalTEXT,INT,FLOAT,FLOAT,FLOAT,FLOAT);Insérer une observtionsINSERT INTO tour2 VALUES (’AIN’,372951,319523,305853,185174,120679);INSERT INTO tour2 VALUES (’AISNE’,377467,317396,303008,161670,141338);INSERT INTO tour2 VALUES (’ALLIER’,259503,220677,209868,102426,107442);INSERT INTO tour2 VALUES (’ALPES-DE-HAUTE-PROVENCE’,118928,103788,99044,52684,46360);Xavier Dupré Programmation et algorithme 103 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesSQL : sélection, ordonnerProblèmes simplesLangage SQLCarte de FranceConclusionCas simple :SELECT nom_departement,Sarkozy FROM tour2WHERE Royal > SarkozyORDER BY Sarkozy DESCPAS-DE-CALAIS 410398.0GIRONDE 382366.0LOIRE-ATLANTIQUE 349366.0VAL-DE-MARNE 302513.0HAUTE-GARONNE 299062.0...Réduire à un sous-ensemble de départements issus d’une autre table :SELECT nom_departement,Sarkozy FROM tour2WHERE nom_departement IN ( SELECT dep FROM sousenmble)ORDER BY Sarkozy DESCXavier Dupré Programmation et algorithme 104 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionSQL : grouperSELECT region,sum(Royal1),sum(Sarkozy1),sum(Royal2),sum(Sarkozy2)FROM tour12GROUP BY regionSur chaque groupe, on peut effectuer des opérations telles que :▶ min▶ max▶ sum▶ count▶ avg▶ group_concat (très peu utilisé)Xavier Dupré Programmation et algorithme 105 / 132


SQL : joindrePrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionOn souhaite créer une unique table à partir de deux tables ayant unecolonne en commun :Premier tourdepartement inscrit ...AIN 372899 ...Second tourdepartement inscrit ...AIN 372951 ...En langage SQL :SELECT tour1.departement,tour1.inscrit AS inscrit1, tour2.inscrit AS inscrit2FROM tour1 INNER JOIN tour2ON tour1.departement == tour2.departementXavier Dupré Programmation et algorithme 106 / 132


SQL : extensionsPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionIl est possible de créer une table à partir d’une instruction SELECT :CREATE TABLE depreg ASSELECT departement.numero,numreg,departement.nom,region.nom as regionFROM departementINNER JOIN regionON region.numero == departement.numregSur de grandes tables, joindre deux tables est très lent. Pour l’accélérer, ilfaut créer un index sur les colonnes concernées.CREATE INDEX dep_index ON tour1(departement) ;Les éléments de la colonne seront alors triés pour pouvoir être retrouvérapidement.L’index peut inclure plusieurs colonnes et autoriser des doublons.Xavier Dupré Programmation et algorithme 107 / 132


Sous ExcelPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionQuelles sont les régions gagnées par Royal au second tour ?Xavier Dupré Programmation et algorithme 108 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionTables▶ On dispose des tables suivantes :1. résultat du premier tour par département2. résultat du second tour par département3. correspondance département - région (récupérée sur Internet)4. table des département reconnus par le logiciel R▶ On cherche :1. les résultats du second tour par région▶ Contraintes :1. les noms des départements ne sont pas identiques dans chaque table(accents, ponctuation)2. le logiciel R ne connaît pas les régions, seulement les départementsXavier Dupré Programmation et algorithme 109 / 132


Utilisation de RPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionReprésentation des résultats sous forme géographique.library (’map’)tab = read.table ("pour_r.txt",header = T)# tab$x --> désigne la colonne x dans tabred = 1:114coul = redcoul [1:length(coul)] = rgb (0.5,0.5,0.5)for (i in 1:length(red)) {if (tab$tour2[i] == 1){ coul [tab$adepnum[i]+1] =rgb (1.0,0.0,0.0) ; }else { coul [tab$adepnum[i]+1] =rgb (0.0,0.0,1.0) ; }}map (’<strong>fr</strong>ance’, col=coul, fill=T)Les départements ont des noms différents dans la feuille Excel et sous lelogiciel R. La correspondance est incomplète, d’où les départements gris.Xavier Dupré Programmation et algorithme 110 / 132


ConclusionPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusion1. Automatiser▶ production de rapports périodiques▶ récupération de données2. Mettre en œuvre une idée▶ preuve du coloriage d’une carte avec 4 couleurs▶ appliquer un modèle statistique3. Gérer la complexité▶ nombreux calculs infaisables à la main▶ capacité à traiter de grands volumes de donnéesXavier Dupré Programmation et algorithme 111 / 132


ConclusionPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionPresque tous les enseignements de l’ENSAE proposent un savoir, des méthodesdont la mise en pratique est impossible sans l’informatique.Il y aura toujours un ordinateur entre vous et le résultat que voussouhaitez obtenir, via un logiciel dédié ou un programme informatique.1. La <strong>programmation</strong> s’acquiert par la pratique.2. La connaissance d’algorithmes classiques permet :▶ de mieux choisir les paramètres s’ils en ont,▶ de comprendre les résultats ou les erreurs de ceux-ci(non-convergence, résultats absurdes),▶ de mesurer rapidement la difficulté d’un problème.Il est suggéré après chaque cours théorique d’essayer d’appliquer les méthodesenseignées sur un jeu de données réelles.Xavier Dupré Programmation et algorithme 112 / 132


FinPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesProblèmes simplesLangage SQLCarte de FranceConclusionXavier Dupré Programmation et algorithme 113 / 132


Partie VPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesPrincipes communs à tous les langagesPrésentationTypes de données standardStructures de langageLes élections : report des voixQuelques schémas classiquesExtensions, ModulesLecture, écriture de fichiersExceptionsModulesCas utilesLes élections : report des voixClasses, Programmation ObjectPrésentationOpérateursHéritageCopiePython, R, VBA, SQL, ...Problèmes simplesLangage SQLCarte de FranceConclusionQuelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et defemellesXavier Dupré Programmation et algorithme 114 / 132


Résoudre un sudokuPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femelles../exemple_eleve/xd_sudoku/sudoku.pyComment résoudre un sudoku ?Comment écrire des sudoku defaçon automatique ?Xavier Dupré Programmation et algorithme 115 / 132


Neuf pièces carréesPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femelles../exemple_eleve/xd_puzzle_girafe/girafe_affichage.pyHO.BB.BV.HMHO.BB.BV.HMHB.BM.BV.HOHM.BB.BV.HBBM.BO.HB.HVHV.BM.BO.HMBM.BV.HB.HOHV.HM.BB.BOBM.HO.HV.BBXavier Dupré Programmation et algorithme 116 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesContraintes de voisinageRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesXavier Dupré Programmation et algorithme 117 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesNe pas perdre la têteRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femelles90 = 180 + 90a ′ = a − o0 = 90 + 90a ′ = a − opiècetournée de90 degré180 = 270 + 90a ′ = a − o270 = 360 + 90a ′ = a − oXavier Dupré Programmation et algorithme 118 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesChemin vers la solutionRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesXavier Dupré Programmation et algorithme 119 / 132


SolutionPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesXavier Dupré Programmation et algorithme 120 / 132


Autre puzzlePrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesXavier Dupré Programmation et algorithme 121 / 132


Autre puzzle...Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesXavier Dupré Programmation et algorithme 122 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesDeviner la proportion de mâles et de femelles../exemple_eleve/xd_poisson/poisson.pyComment estimer la proportion de mâles etde femelles chez une espèse particulière depoisson alors qu’on ne dispose commeinformation que de les tailles de 1000poissons sans distinction de sexe ?Xavier Dupré Programmation et algorithme 123 / 132


HypothèsePrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesA prioriOn suppose que les tailles moyennes des mâles et des femelles sontdifférentes et que toutes deux suivent une loi normale.On modélise la taille d’un poissonde sexe non connu comme unmélange de deux lois normales.f (x) =α m√2πσmexp(− (x − µ m) 22σ 2 m)+α f{ }} { ()1 − α√ mexp − (x − µ f ) 22πσf2σf2Xavier Dupré Programmation et algorithme 124 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesMaximum de vraisemblanceRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesLes paramètres α, µ m , σ m , µ f , σ f sont inconnus, ils sont estimés à partird’un échantillon indépendant de tailles (X 1 , ..., X N ). La vraisemblance decette échantillon est :N∏N∑L = f (X i ) ↔ ln L = ln f (X i )i=1i=1La vraisemblance sera d’autantplus élevé que X i est situé sousl’un des deux "chapeaux". Oncherche à maximiser lavaisemblance.Xavier Dupré Programmation et algorithme 125 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesExpression mathématiqueRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femelles(α ∗ , µ ∗ m, σ ∗ m, µ ∗ f , σ ∗ f ) = arg maxα,µ m,σ m,µ f ,σ f[()N∏ α√ exp − (X i − µ m ) 22πσm2σm2i=1+ 1 − α √2πσfexp(− (X i − µ f ) 22σ 2 f)](α ∗ , µ ∗ m, σ ∗ m, µ ∗ f , σ ∗ f ) = arg maxα,µ m,σ m,µ f ,σ f[()N∑ αln √ exp − (X i − µ m ) 22πσm2σm2i=1+ 1 − α √2πσfexp(− (X i − µ f ) 22σ 2 f)]Xavier Dupré Programmation et algorithme 126 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesOptimisation par descente du gradientRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femelles[ ] ∂g (xt )x t+1 = x t − ε t∂x(13)Xavier Dupré Programmation et algorithme 127 / 132


Calcul du gradientPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femelles∂g∂α=∂g∂µ m=∂g∂µ f=∂g∂σ m=∂g∂σ f=N∑i =1N∑i =1()√12πσmexp − (X i −µm)22σm2 − √ 12πσfX i −µmσ 2 mh (X i , α, µ m, σ m, µ f , σ f )()√α2πσmexp − (X i −µm)22σm2h (Xi =1i , α, µ m, σ m, µ f , σ f ))X i −µ fN∑ σ 2 √1−α2πσfexp(− (X i −µ f )22σ 2 ffh (Xi =1i , α, µ m, σ m, µ f , σ f )((X i −µm) 2N∑ σm3 √α2πσmexp − (X i −µm)22σm2(X i −µ f ) 2N∑ σ 3 fi =11−α√2πσf)exp(− (X i −µ f )22σ 2 f)−()√ α2πσ 2 exp − (X i −µm)2m2σm2h (X i , α, µ m, σ m, µ f , σ f )))exp(− (X i −µ f )22σ 2 − √ 1−α2πσ 2 exp(− (X i −µ f )22σ 2 fffh (X i , α, µ m, σ m, µ f , σ f )Xavier Dupré Programmation et algorithme 128 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesOptimisation du second ordreRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesOn note g une fonction à valeur réelle qu’il faut minimiser. Au voisinagede x 0 , un développement limité donne :g (x) = g (x 0 )+ ∂g (x 0)∂x(x − x 0 )+(x − x 0 ) ′ ∂ 2 g (x 0 )∂x 2 (x − x 0 )+o ‖x − x 0 ‖ 2Sur un voisinage de x 0 , la fonction g (x) admet un minimum local si ∂2 g(x 0)∂x 2est définie positive strictement. Le minimum est atteint pour la valeur :x min = x 0 + 1 [ ∂ 2 ] −1 [ ]g (x 0 ) ∂g (x0 )2 ∂x} {{ 2 ∂x}H −1Il existe des méthodes numériques (BFGS entre autres) qui permettentd’approximer H −1 pour accélérer la convergence.Xavier Dupré Programmation et algorithme 129 / 132


Principes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesValider une méthode1. simuler des observations pour un ensemble de paramètres connu2. vérifier que la méthode permet de retrouver ces paramètresIl faut recommencer plusieurs fois :▶ avec le même jeu de paramètres pour étudier la stabilité▶ avec des paramètres différents pour voir les limites de la méthodeparamètre valeur estimé (BFGS) estimé (EM)α 0.550 0.503 0.577µ m 0.400 0.402 0.398σ m 0.020 0.019 0.021µ f 0.350 0.351 0.349σ f 0.015 0.015 0.147Cette méthode d’optimisation (même du second ordre ne permet pas deretrouver le paramètre α avec précision.Xavier Dupré Programmation et algorithme 130 / 132


Algorithme EMPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesOn note :f (x) =(α√ exp − (x − µ m) 22πσm2σ 2 m)} {{ }f m(x)+ 1 − α √2πσf()exp − (x − µ f ) 22σ 2 f} {{ }f f (x)On définit :t mi =t fi =f m (X i )f m (X i ) + f f (X i )f f (X i )f m (X i ) + f f (X i )Xavier Dupré Programmation et algorithme 131 / 132


Algorithme EMPrincipes communs à tous les langagesExtensions, ModulesClasses, Programmation ObjectPython, R, VBA, SQL, ...Quelques exemplesRésoudre un sudokuRésoudre un puzzleDeviner la proportion de mâles et de femellesOn répète ensuite jusqu’à convergence des paramètres : (θ ′ désigne leparamètre à l’itération suivante)α ′ = 1 Nµ ′ m =σ ′ m =µ ′ f =σ ′ f =N∑i=1t mi X i∑t mii=1 t mi√t mi (X i − µ m )∑2i=1 t mit fi X∑ ii=1 t fi√t fi (X i − µ f ) 2∑i=1 t fiXavier Dupré Programmation et algorithme 132 / 132

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!