Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur...
Transcript of Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur...
Python_pour_les_economistes_Partie_I
October 18 2019
1 Programmation en Python pour lrsquoanalyse de donneacutees
101 Philippe Muller
2019-2020 Magistegravere Eco Cette page sert de support au cours de L3 MMESI Vous pouvezteacuteleacutecharger le notebook correspondant pour modifier et expeacuterimenter avec les exemples de code
Ce cours preacutesente les concepts de la programmation en python notamment avec des struc-tures de donneacutees de haut niveau pour aller vers la programmation scientifique et lrsquoanalyse dedonneacutees
11 Preacuterequis
Pour pouvoir travailler chez vous il est conseilleacute drsquoinstaller sur une machine Python et les biblio-thegraveques scientifiques par exemple tout est dans la distribution anaconda disponible pour linuxmac windows
12 Organisation
bull 24 h de cours TDbull 18 h de TP en 9x2h
Notation examen terminal + projet (fait pendant le 2e semestre) + note de TP
13 Plan
Partie I bases
1 Introduction programmation algorithmique2 Syntaxe de base Python3 Structures listes dictionnaires etc4 Structuration de code modulariteacute
Partie II programmation scientifique
1 Calcul matriciel2 AnalyseVisualisation de donneacutees3 Data miningMachine learning
Partie III programmation avanceacutee
1
1 Classes et Objets2 Structuration drsquoun projet
Partie IV introduction au projet
14 Introduction programmation et ordinateur
Un ordinateur est caracteacuteriseacute par
bull la saisie drsquoinformation avec des peacuteripheacuteriques drsquoentreacutee (clavier souris capteurs )bull le stockage drsquoinformation (meacutemoire vive disque dur etc)bull le traitement drsquoinformation mateacuteriel (processeur) + logiciel (programme)bull la restitution drsquoinformation peacuteripheacuteriques de sortie (eacutecran son etc)
15 Programmation et algorithme
Un algorithme est une suite drsquoactions preacutecises deacutecrivant un modegravele de comportement une meacuteth-ode de reacutesolution utilisant des compeacutetences drsquoun opeacuterateur
Il sera traduit dans un langage de programmation compreacutehensible par un opeacuterateur reacuteel (or-dinateur)
Cela donnera un programme exeacutecutable par cet opeacuterateur Lrsquoopeacuterateur reacuteel exeacutecutera le pro-gramme sur des donneacutees caracteacuterisant le problegraveme particulier agrave reacutesoudre
16 Algorithmique
161 une meacutethodologie de deacuteveloppement drsquoalgorithmes lrsquoeacutetude des algorithmes
bull Formuler clairement le problegravemebull Exprimer les entreacutees et sorties du problegravemebull Deacutegager les grandes actions fonctionnaliteacutesbull Concevoir lrsquoalgorithmebull Traduire dans un langage de programmation
17 Structure drsquoun algorithme
Un algorithme est composeacute drsquoune suite drsquoactions eacuteleacutementaires ou composeacutees
bull Les actions eacuteleacutementaires (aussi appeleacutees instructions) sont des actions propres delrsquoopeacuterateur
ndash Opeacuterations drsquoentreacuteesortiendash Gestion de la meacutemoirendash Opeacuterateursndash Appel agrave drsquoautres fonctionnaliteacutes
bull Les actions composeacutees sont des combinaisons de structures de controcircle et drsquoactions eacuteleacutemen-taires
2
18 Meacutemoire et codage
bull La machine sur laquelle lrsquoexeacutecution doit slsquoeffectuer possegravede une n meacutemoire z
ndash Crsquoest un espace dans lequel des valeurs peuvent ecirctre conserveacutees au moins temporaire-ment
ndash La meacutemoire de la machine est formeacutee drsquoun grand nombre de cellules numeacuteroteacuteesndash Le numeacutero drsquoune case meacutemoire est appeleacute n adresse meacutemoire z
bull Le codage sous-jacent de toute information est sous la forme de nombre binaire (0 ou 1)
ndash permet de coder les nombres entiers dans nrsquoimporte quelle basendash permet ultimement de repreacutesenter toute forme drsquoinformation
19 Langages de programmation
bull permet drsquoexprimer les opeacuterations de base de la machine drsquoune faccedilon compreacutehensible pourlrsquohumain
bull abstraction sur les eacuteleacutements de la machine
bull met en oeuvre concregravetement des algorithmes (niveau conceptuel) sur des machines
bull il existe un grand nombre de langages diffeacuterents qui obeacuteissent agrave des principes communsNous nous concentrons ici sur les langages les plus courants dits impeacuteratifs qui deacutefinissent
ndash la manipulation drsquoinformation dans des variables et avec des expressionsndash lrsquoorganisation de lrsquoalgorithme avec des structures de controcircle
la seacutequence drsquoinstruction le test de condition la reacutepeacutetition drsquoinstructions
bull choix du langage Python
110 Pourquoi Python
bull langage de haut niveau concis tregraves geacuteneacuteral facile agrave apprendrebull nombreuses librairies notamment scientifiquesbull populaire cf le classement IEEE ou bien lrsquoindex TOBIE agrave la fois dans lrsquoindustrie (Google) et
dans le milieu acadeacutemique scientifique notamment le big databull portable (marche sur tout type de machine)bull libre et gratuit avec une bonne communauteacute
Un exemple les projets en 2017 sur le site de compeacutetition en Data Science kagglepertinence de R langage speacutecialiseacute mais archaiquePython est un langage avec un ecosystegraveme completparticuliegraverement adapteacute pour utiliser des outils externes (en C fortran ) agrave lrsquointeacuterieur de
Python et profiter de lrsquoexistant(source httpblogkagglecom)
3
111 Installation
Ce cours a eacuteteacute conccedilu pour ecirctre suivi interactivement en classe ou en ligne en utilisant les outilssuivants (tous contenus dans la distribution de python anaconda
bull python 35 ou +bull jupyter (notebook ou jupyter-lab)
Pour le deacuteveloppement en travaux pratiques et en geacuteneacuteral pour un vrai projet il vaut mieuxutiliser un environnement de programmation comme spyder qui est eacutegalement fourni par la dis-tribution anaconda et qui est un peu lrsquoeacutequivalent python de Rstudio Tous les exemples de codepreacutesenteacutes dans le cours peuvent ecirctre utiliseacutes tels quels ou presque dans lrsquoenvironnement de travailet les TP formeront agrave la prise en main de ces outils
1111 Exemple
Python est un langage interpreacuteteacute En lanccedilant la commande python seule ou en se placcedilant dansla console (partie en bas agrave droite de spyder) on peut eacutevaluer des expressions directement
In [36] 24+13
Out[36] 37
Ou bien deacutefinir des variables
In [38] b = bonjourb
Out[38] bonjour
Et afficher leur contenu
In [3] print(b)
bonjour
In [4] a = 12a3+5
Out[4] 41
Pour le deacuteveloppement en TP on se servira de lrsquoeacutediteur de spyder (partie gauche) La partieen haut agrave droite donne accegraves aux contenus des variables et agrave la documentation du langage
1112 Python pour quoi faire
Lrsquoexpressiviteacute du langage permet facilement de repreacutesenter des donneacutees complexes et les librairiesscientifiques et graphiques de les manipuler avec aisance Voici quelques petits exemples poursrsquoouvrir lrsquoapeacutetit
4
112 Test graphiques
Lrsquoenvironnement graphique pylab permet de visualiser les donneacutees Par exemple (on reviendrasur la syntaxe)
In [39] pylab inline
Populating the interactive namespace from numpy and matplotlib
anaconda3envssnorkellibpython36site-packagesIPythoncoremagicspylabpy160 UserWarning pylab import has clobbered these variables [figure]`matplotlib` prevents importing from pylab and numpy
n`matplotlib` prevents importing from pylab and numpy
In [41] l = range(10)l = [sin(-x) for x in range(10)]figure = pylabplot(range(10)l)
113 Test Analyse de donneacutees (avec pandas)
Pandas est une librairie de manipulation de donneacutees pour lrsquoanalyse statistiques qui couvre large-ment ce qursquoon peut faire en R par exemple (on reviendra sur la syntaxe)
In [7] import pandas as pds
In [8] a=pdsDataFrame(data=france[21860]allemagne[17680]index=[natchompop])
5
In [9] a
Out[9] france allemagnenat 21 17chom 80 60pop 600 800
Pandas donne accegraves agrave un certain nombre de fonctions statistiques et de visualisations stan-dards
In [10] figure = aboxplot()
Creacuteeacuteons un petit fichier de donneacutees en meacutelangeant plusieurs types indexeacutes par des dates Lenotebook nous permet de creacuteer des fichiers directement avec la commande speacuteciale file
In [11] file datacsvDateOpenHighLowCloseVolumeAdj Close2012-06-015691659000548505840014077000581502012-05-015849059676522185777318827900575262012-04-026018364400555005839828759100581482012-03-015481762145516225995526486000596992012-02-014584154761453985424422001000540122012-01-03409404582440900456481294910045453
Overwriting datacsv
On peut lire des donneacutees sous forme tabulaire de base avec pandas
6
In [12] df = pdsread_csv(datacsv)
On peut visualiser sous forme de table
In [13] df
Out[13] Date Open High Low Close Volume Adj Close0 2012-06-01 56916 59000 54850 58400 14077000 581501 2012-05-01 58490 59676 52218 57773 18827900 575262 2012-04-02 60183 64400 55500 58398 28759100 581483 2012-03-01 54817 62145 51622 59955 26486000 596994 2012-02-01 45841 54761 45398 54244 22001000 540125 2012-01-03 40940 45824 40900 45648 12949100 45453
Et faire des visualisations communes agrave plusieurs colonnes
In [14] fig = dfboxplot(column=[HighOpenClose])
In [26] import pandas_datareaderdata as webimport datetime as dt
start = dtdatetime(2014 1 1)end = dtdatetimetoday()prices = webDataReader(AAPL stooq start end)closing_prices = prices[Close]closing_pricesplot()
7
Out[26] ltmatplotlibaxes_subplotsAxesSubplot at 0x118b807f0gt
114 Variables et expressions
Un algorithme manipule des objets abstraits appeleacutes variables qui prendront les valeurs des don-neacutees seulement au moment de lrsquoexeacutecution - Une variable est associeacutee agrave une zone de la meacutemoirede la machine appeleacute n case meacutemoire z ou n mot meacutemoire z - Elle est repeacutereacutee par un nom ouidentificateur - Elle contient une valeur qui peut varier au cours de lrsquoexeacutecution de lrsquoalgorithmedrsquoougrave le nom de variable - La variable a un type (implicite en python)
In [27] a = 54+7v = sqrt(2)+pow(57)
bull Lrsquoexpression est tout drsquoabord eacutevalueacuteebull Puis la valeur obtenue est affecteacutee agrave la variable crsquoest agrave dire placeacutee dans la zone meacutemoire
associeacutee agrave la variablebull Une mecircme variable peut ecirctre agrave la fois utiliseacutee dans lrsquoexpression puis prise pour lrsquoaffectation
In [31] a = 3a = a - 4b = b 6
115 Types de donneacutees de base
bull entiers (integer) 1 -3bull nombre agrave virgule flottante (float) 20 545
8
bull chaines de caractegraveres (str) hello ou rsquohellorsquobull booleacuteen (bool) True False
On dispose drsquoopeacuterateurs classiques sur ces types de donneacuteesUn opeacuterateur transforme une expression ou combine deux expressions pour en faire une autre
bull entiers + - bull virgule + - sqrt()
In [ ]
In [ ]
In [42] type(1)
Out[42] int
In [43] print(1+23-45)print(15 2)
-10171
In [44] type(ah bon)
Out[44] str
In [46] ah + BON
Out[46] ahBON
In [ ] hello[2]
In [47] type(20)
Out[47] float
In [ ] from math import exp203 + exp(2)
In [48] type(True)
Out[48] bool
In [ ] (True and False) or not(True)
In [49] print(10gt3)
True
Attention le test drsquoeacutegaliteacute est distinct de lrsquoaffectation
In [50] 4==3
Out[50] False
In [51] 4=3
Out[51] True
9
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
1 Classes et Objets2 Structuration drsquoun projet
Partie IV introduction au projet
14 Introduction programmation et ordinateur
Un ordinateur est caracteacuteriseacute par
bull la saisie drsquoinformation avec des peacuteripheacuteriques drsquoentreacutee (clavier souris capteurs )bull le stockage drsquoinformation (meacutemoire vive disque dur etc)bull le traitement drsquoinformation mateacuteriel (processeur) + logiciel (programme)bull la restitution drsquoinformation peacuteripheacuteriques de sortie (eacutecran son etc)
15 Programmation et algorithme
Un algorithme est une suite drsquoactions preacutecises deacutecrivant un modegravele de comportement une meacuteth-ode de reacutesolution utilisant des compeacutetences drsquoun opeacuterateur
Il sera traduit dans un langage de programmation compreacutehensible par un opeacuterateur reacuteel (or-dinateur)
Cela donnera un programme exeacutecutable par cet opeacuterateur Lrsquoopeacuterateur reacuteel exeacutecutera le pro-gramme sur des donneacutees caracteacuterisant le problegraveme particulier agrave reacutesoudre
16 Algorithmique
161 une meacutethodologie de deacuteveloppement drsquoalgorithmes lrsquoeacutetude des algorithmes
bull Formuler clairement le problegravemebull Exprimer les entreacutees et sorties du problegravemebull Deacutegager les grandes actions fonctionnaliteacutesbull Concevoir lrsquoalgorithmebull Traduire dans un langage de programmation
17 Structure drsquoun algorithme
Un algorithme est composeacute drsquoune suite drsquoactions eacuteleacutementaires ou composeacutees
bull Les actions eacuteleacutementaires (aussi appeleacutees instructions) sont des actions propres delrsquoopeacuterateur
ndash Opeacuterations drsquoentreacuteesortiendash Gestion de la meacutemoirendash Opeacuterateursndash Appel agrave drsquoautres fonctionnaliteacutes
bull Les actions composeacutees sont des combinaisons de structures de controcircle et drsquoactions eacuteleacutemen-taires
2
18 Meacutemoire et codage
bull La machine sur laquelle lrsquoexeacutecution doit slsquoeffectuer possegravede une n meacutemoire z
ndash Crsquoest un espace dans lequel des valeurs peuvent ecirctre conserveacutees au moins temporaire-ment
ndash La meacutemoire de la machine est formeacutee drsquoun grand nombre de cellules numeacuteroteacuteesndash Le numeacutero drsquoune case meacutemoire est appeleacute n adresse meacutemoire z
bull Le codage sous-jacent de toute information est sous la forme de nombre binaire (0 ou 1)
ndash permet de coder les nombres entiers dans nrsquoimporte quelle basendash permet ultimement de repreacutesenter toute forme drsquoinformation
19 Langages de programmation
bull permet drsquoexprimer les opeacuterations de base de la machine drsquoune faccedilon compreacutehensible pourlrsquohumain
bull abstraction sur les eacuteleacutements de la machine
bull met en oeuvre concregravetement des algorithmes (niveau conceptuel) sur des machines
bull il existe un grand nombre de langages diffeacuterents qui obeacuteissent agrave des principes communsNous nous concentrons ici sur les langages les plus courants dits impeacuteratifs qui deacutefinissent
ndash la manipulation drsquoinformation dans des variables et avec des expressionsndash lrsquoorganisation de lrsquoalgorithme avec des structures de controcircle
la seacutequence drsquoinstruction le test de condition la reacutepeacutetition drsquoinstructions
bull choix du langage Python
110 Pourquoi Python
bull langage de haut niveau concis tregraves geacuteneacuteral facile agrave apprendrebull nombreuses librairies notamment scientifiquesbull populaire cf le classement IEEE ou bien lrsquoindex TOBIE agrave la fois dans lrsquoindustrie (Google) et
dans le milieu acadeacutemique scientifique notamment le big databull portable (marche sur tout type de machine)bull libre et gratuit avec une bonne communauteacute
Un exemple les projets en 2017 sur le site de compeacutetition en Data Science kagglepertinence de R langage speacutecialiseacute mais archaiquePython est un langage avec un ecosystegraveme completparticuliegraverement adapteacute pour utiliser des outils externes (en C fortran ) agrave lrsquointeacuterieur de
Python et profiter de lrsquoexistant(source httpblogkagglecom)
3
111 Installation
Ce cours a eacuteteacute conccedilu pour ecirctre suivi interactivement en classe ou en ligne en utilisant les outilssuivants (tous contenus dans la distribution de python anaconda
bull python 35 ou +bull jupyter (notebook ou jupyter-lab)
Pour le deacuteveloppement en travaux pratiques et en geacuteneacuteral pour un vrai projet il vaut mieuxutiliser un environnement de programmation comme spyder qui est eacutegalement fourni par la dis-tribution anaconda et qui est un peu lrsquoeacutequivalent python de Rstudio Tous les exemples de codepreacutesenteacutes dans le cours peuvent ecirctre utiliseacutes tels quels ou presque dans lrsquoenvironnement de travailet les TP formeront agrave la prise en main de ces outils
1111 Exemple
Python est un langage interpreacuteteacute En lanccedilant la commande python seule ou en se placcedilant dansla console (partie en bas agrave droite de spyder) on peut eacutevaluer des expressions directement
In [36] 24+13
Out[36] 37
Ou bien deacutefinir des variables
In [38] b = bonjourb
Out[38] bonjour
Et afficher leur contenu
In [3] print(b)
bonjour
In [4] a = 12a3+5
Out[4] 41
Pour le deacuteveloppement en TP on se servira de lrsquoeacutediteur de spyder (partie gauche) La partieen haut agrave droite donne accegraves aux contenus des variables et agrave la documentation du langage
1112 Python pour quoi faire
Lrsquoexpressiviteacute du langage permet facilement de repreacutesenter des donneacutees complexes et les librairiesscientifiques et graphiques de les manipuler avec aisance Voici quelques petits exemples poursrsquoouvrir lrsquoapeacutetit
4
112 Test graphiques
Lrsquoenvironnement graphique pylab permet de visualiser les donneacutees Par exemple (on reviendrasur la syntaxe)
In [39] pylab inline
Populating the interactive namespace from numpy and matplotlib
anaconda3envssnorkellibpython36site-packagesIPythoncoremagicspylabpy160 UserWarning pylab import has clobbered these variables [figure]`matplotlib` prevents importing from pylab and numpy
n`matplotlib` prevents importing from pylab and numpy
In [41] l = range(10)l = [sin(-x) for x in range(10)]figure = pylabplot(range(10)l)
113 Test Analyse de donneacutees (avec pandas)
Pandas est une librairie de manipulation de donneacutees pour lrsquoanalyse statistiques qui couvre large-ment ce qursquoon peut faire en R par exemple (on reviendra sur la syntaxe)
In [7] import pandas as pds
In [8] a=pdsDataFrame(data=france[21860]allemagne[17680]index=[natchompop])
5
In [9] a
Out[9] france allemagnenat 21 17chom 80 60pop 600 800
Pandas donne accegraves agrave un certain nombre de fonctions statistiques et de visualisations stan-dards
In [10] figure = aboxplot()
Creacuteeacuteons un petit fichier de donneacutees en meacutelangeant plusieurs types indexeacutes par des dates Lenotebook nous permet de creacuteer des fichiers directement avec la commande speacuteciale file
In [11] file datacsvDateOpenHighLowCloseVolumeAdj Close2012-06-015691659000548505840014077000581502012-05-015849059676522185777318827900575262012-04-026018364400555005839828759100581482012-03-015481762145516225995526486000596992012-02-014584154761453985424422001000540122012-01-03409404582440900456481294910045453
Overwriting datacsv
On peut lire des donneacutees sous forme tabulaire de base avec pandas
6
In [12] df = pdsread_csv(datacsv)
On peut visualiser sous forme de table
In [13] df
Out[13] Date Open High Low Close Volume Adj Close0 2012-06-01 56916 59000 54850 58400 14077000 581501 2012-05-01 58490 59676 52218 57773 18827900 575262 2012-04-02 60183 64400 55500 58398 28759100 581483 2012-03-01 54817 62145 51622 59955 26486000 596994 2012-02-01 45841 54761 45398 54244 22001000 540125 2012-01-03 40940 45824 40900 45648 12949100 45453
Et faire des visualisations communes agrave plusieurs colonnes
In [14] fig = dfboxplot(column=[HighOpenClose])
In [26] import pandas_datareaderdata as webimport datetime as dt
start = dtdatetime(2014 1 1)end = dtdatetimetoday()prices = webDataReader(AAPL stooq start end)closing_prices = prices[Close]closing_pricesplot()
7
Out[26] ltmatplotlibaxes_subplotsAxesSubplot at 0x118b807f0gt
114 Variables et expressions
Un algorithme manipule des objets abstraits appeleacutes variables qui prendront les valeurs des don-neacutees seulement au moment de lrsquoexeacutecution - Une variable est associeacutee agrave une zone de la meacutemoirede la machine appeleacute n case meacutemoire z ou n mot meacutemoire z - Elle est repeacutereacutee par un nom ouidentificateur - Elle contient une valeur qui peut varier au cours de lrsquoexeacutecution de lrsquoalgorithmedrsquoougrave le nom de variable - La variable a un type (implicite en python)
In [27] a = 54+7v = sqrt(2)+pow(57)
bull Lrsquoexpression est tout drsquoabord eacutevalueacuteebull Puis la valeur obtenue est affecteacutee agrave la variable crsquoest agrave dire placeacutee dans la zone meacutemoire
associeacutee agrave la variablebull Une mecircme variable peut ecirctre agrave la fois utiliseacutee dans lrsquoexpression puis prise pour lrsquoaffectation
In [31] a = 3a = a - 4b = b 6
115 Types de donneacutees de base
bull entiers (integer) 1 -3bull nombre agrave virgule flottante (float) 20 545
8
bull chaines de caractegraveres (str) hello ou rsquohellorsquobull booleacuteen (bool) True False
On dispose drsquoopeacuterateurs classiques sur ces types de donneacuteesUn opeacuterateur transforme une expression ou combine deux expressions pour en faire une autre
bull entiers + - bull virgule + - sqrt()
In [ ]
In [ ]
In [42] type(1)
Out[42] int
In [43] print(1+23-45)print(15 2)
-10171
In [44] type(ah bon)
Out[44] str
In [46] ah + BON
Out[46] ahBON
In [ ] hello[2]
In [47] type(20)
Out[47] float
In [ ] from math import exp203 + exp(2)
In [48] type(True)
Out[48] bool
In [ ] (True and False) or not(True)
In [49] print(10gt3)
True
Attention le test drsquoeacutegaliteacute est distinct de lrsquoaffectation
In [50] 4==3
Out[50] False
In [51] 4=3
Out[51] True
9
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
18 Meacutemoire et codage
bull La machine sur laquelle lrsquoexeacutecution doit slsquoeffectuer possegravede une n meacutemoire z
ndash Crsquoest un espace dans lequel des valeurs peuvent ecirctre conserveacutees au moins temporaire-ment
ndash La meacutemoire de la machine est formeacutee drsquoun grand nombre de cellules numeacuteroteacuteesndash Le numeacutero drsquoune case meacutemoire est appeleacute n adresse meacutemoire z
bull Le codage sous-jacent de toute information est sous la forme de nombre binaire (0 ou 1)
ndash permet de coder les nombres entiers dans nrsquoimporte quelle basendash permet ultimement de repreacutesenter toute forme drsquoinformation
19 Langages de programmation
bull permet drsquoexprimer les opeacuterations de base de la machine drsquoune faccedilon compreacutehensible pourlrsquohumain
bull abstraction sur les eacuteleacutements de la machine
bull met en oeuvre concregravetement des algorithmes (niveau conceptuel) sur des machines
bull il existe un grand nombre de langages diffeacuterents qui obeacuteissent agrave des principes communsNous nous concentrons ici sur les langages les plus courants dits impeacuteratifs qui deacutefinissent
ndash la manipulation drsquoinformation dans des variables et avec des expressionsndash lrsquoorganisation de lrsquoalgorithme avec des structures de controcircle
la seacutequence drsquoinstruction le test de condition la reacutepeacutetition drsquoinstructions
bull choix du langage Python
110 Pourquoi Python
bull langage de haut niveau concis tregraves geacuteneacuteral facile agrave apprendrebull nombreuses librairies notamment scientifiquesbull populaire cf le classement IEEE ou bien lrsquoindex TOBIE agrave la fois dans lrsquoindustrie (Google) et
dans le milieu acadeacutemique scientifique notamment le big databull portable (marche sur tout type de machine)bull libre et gratuit avec une bonne communauteacute
Un exemple les projets en 2017 sur le site de compeacutetition en Data Science kagglepertinence de R langage speacutecialiseacute mais archaiquePython est un langage avec un ecosystegraveme completparticuliegraverement adapteacute pour utiliser des outils externes (en C fortran ) agrave lrsquointeacuterieur de
Python et profiter de lrsquoexistant(source httpblogkagglecom)
3
111 Installation
Ce cours a eacuteteacute conccedilu pour ecirctre suivi interactivement en classe ou en ligne en utilisant les outilssuivants (tous contenus dans la distribution de python anaconda
bull python 35 ou +bull jupyter (notebook ou jupyter-lab)
Pour le deacuteveloppement en travaux pratiques et en geacuteneacuteral pour un vrai projet il vaut mieuxutiliser un environnement de programmation comme spyder qui est eacutegalement fourni par la dis-tribution anaconda et qui est un peu lrsquoeacutequivalent python de Rstudio Tous les exemples de codepreacutesenteacutes dans le cours peuvent ecirctre utiliseacutes tels quels ou presque dans lrsquoenvironnement de travailet les TP formeront agrave la prise en main de ces outils
1111 Exemple
Python est un langage interpreacuteteacute En lanccedilant la commande python seule ou en se placcedilant dansla console (partie en bas agrave droite de spyder) on peut eacutevaluer des expressions directement
In [36] 24+13
Out[36] 37
Ou bien deacutefinir des variables
In [38] b = bonjourb
Out[38] bonjour
Et afficher leur contenu
In [3] print(b)
bonjour
In [4] a = 12a3+5
Out[4] 41
Pour le deacuteveloppement en TP on se servira de lrsquoeacutediteur de spyder (partie gauche) La partieen haut agrave droite donne accegraves aux contenus des variables et agrave la documentation du langage
1112 Python pour quoi faire
Lrsquoexpressiviteacute du langage permet facilement de repreacutesenter des donneacutees complexes et les librairiesscientifiques et graphiques de les manipuler avec aisance Voici quelques petits exemples poursrsquoouvrir lrsquoapeacutetit
4
112 Test graphiques
Lrsquoenvironnement graphique pylab permet de visualiser les donneacutees Par exemple (on reviendrasur la syntaxe)
In [39] pylab inline
Populating the interactive namespace from numpy and matplotlib
anaconda3envssnorkellibpython36site-packagesIPythoncoremagicspylabpy160 UserWarning pylab import has clobbered these variables [figure]`matplotlib` prevents importing from pylab and numpy
n`matplotlib` prevents importing from pylab and numpy
In [41] l = range(10)l = [sin(-x) for x in range(10)]figure = pylabplot(range(10)l)
113 Test Analyse de donneacutees (avec pandas)
Pandas est une librairie de manipulation de donneacutees pour lrsquoanalyse statistiques qui couvre large-ment ce qursquoon peut faire en R par exemple (on reviendra sur la syntaxe)
In [7] import pandas as pds
In [8] a=pdsDataFrame(data=france[21860]allemagne[17680]index=[natchompop])
5
In [9] a
Out[9] france allemagnenat 21 17chom 80 60pop 600 800
Pandas donne accegraves agrave un certain nombre de fonctions statistiques et de visualisations stan-dards
In [10] figure = aboxplot()
Creacuteeacuteons un petit fichier de donneacutees en meacutelangeant plusieurs types indexeacutes par des dates Lenotebook nous permet de creacuteer des fichiers directement avec la commande speacuteciale file
In [11] file datacsvDateOpenHighLowCloseVolumeAdj Close2012-06-015691659000548505840014077000581502012-05-015849059676522185777318827900575262012-04-026018364400555005839828759100581482012-03-015481762145516225995526486000596992012-02-014584154761453985424422001000540122012-01-03409404582440900456481294910045453
Overwriting datacsv
On peut lire des donneacutees sous forme tabulaire de base avec pandas
6
In [12] df = pdsread_csv(datacsv)
On peut visualiser sous forme de table
In [13] df
Out[13] Date Open High Low Close Volume Adj Close0 2012-06-01 56916 59000 54850 58400 14077000 581501 2012-05-01 58490 59676 52218 57773 18827900 575262 2012-04-02 60183 64400 55500 58398 28759100 581483 2012-03-01 54817 62145 51622 59955 26486000 596994 2012-02-01 45841 54761 45398 54244 22001000 540125 2012-01-03 40940 45824 40900 45648 12949100 45453
Et faire des visualisations communes agrave plusieurs colonnes
In [14] fig = dfboxplot(column=[HighOpenClose])
In [26] import pandas_datareaderdata as webimport datetime as dt
start = dtdatetime(2014 1 1)end = dtdatetimetoday()prices = webDataReader(AAPL stooq start end)closing_prices = prices[Close]closing_pricesplot()
7
Out[26] ltmatplotlibaxes_subplotsAxesSubplot at 0x118b807f0gt
114 Variables et expressions
Un algorithme manipule des objets abstraits appeleacutes variables qui prendront les valeurs des don-neacutees seulement au moment de lrsquoexeacutecution - Une variable est associeacutee agrave une zone de la meacutemoirede la machine appeleacute n case meacutemoire z ou n mot meacutemoire z - Elle est repeacutereacutee par un nom ouidentificateur - Elle contient une valeur qui peut varier au cours de lrsquoexeacutecution de lrsquoalgorithmedrsquoougrave le nom de variable - La variable a un type (implicite en python)
In [27] a = 54+7v = sqrt(2)+pow(57)
bull Lrsquoexpression est tout drsquoabord eacutevalueacuteebull Puis la valeur obtenue est affecteacutee agrave la variable crsquoest agrave dire placeacutee dans la zone meacutemoire
associeacutee agrave la variablebull Une mecircme variable peut ecirctre agrave la fois utiliseacutee dans lrsquoexpression puis prise pour lrsquoaffectation
In [31] a = 3a = a - 4b = b 6
115 Types de donneacutees de base
bull entiers (integer) 1 -3bull nombre agrave virgule flottante (float) 20 545
8
bull chaines de caractegraveres (str) hello ou rsquohellorsquobull booleacuteen (bool) True False
On dispose drsquoopeacuterateurs classiques sur ces types de donneacuteesUn opeacuterateur transforme une expression ou combine deux expressions pour en faire une autre
bull entiers + - bull virgule + - sqrt()
In [ ]
In [ ]
In [42] type(1)
Out[42] int
In [43] print(1+23-45)print(15 2)
-10171
In [44] type(ah bon)
Out[44] str
In [46] ah + BON
Out[46] ahBON
In [ ] hello[2]
In [47] type(20)
Out[47] float
In [ ] from math import exp203 + exp(2)
In [48] type(True)
Out[48] bool
In [ ] (True and False) or not(True)
In [49] print(10gt3)
True
Attention le test drsquoeacutegaliteacute est distinct de lrsquoaffectation
In [50] 4==3
Out[50] False
In [51] 4=3
Out[51] True
9
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
111 Installation
Ce cours a eacuteteacute conccedilu pour ecirctre suivi interactivement en classe ou en ligne en utilisant les outilssuivants (tous contenus dans la distribution de python anaconda
bull python 35 ou +bull jupyter (notebook ou jupyter-lab)
Pour le deacuteveloppement en travaux pratiques et en geacuteneacuteral pour un vrai projet il vaut mieuxutiliser un environnement de programmation comme spyder qui est eacutegalement fourni par la dis-tribution anaconda et qui est un peu lrsquoeacutequivalent python de Rstudio Tous les exemples de codepreacutesenteacutes dans le cours peuvent ecirctre utiliseacutes tels quels ou presque dans lrsquoenvironnement de travailet les TP formeront agrave la prise en main de ces outils
1111 Exemple
Python est un langage interpreacuteteacute En lanccedilant la commande python seule ou en se placcedilant dansla console (partie en bas agrave droite de spyder) on peut eacutevaluer des expressions directement
In [36] 24+13
Out[36] 37
Ou bien deacutefinir des variables
In [38] b = bonjourb
Out[38] bonjour
Et afficher leur contenu
In [3] print(b)
bonjour
In [4] a = 12a3+5
Out[4] 41
Pour le deacuteveloppement en TP on se servira de lrsquoeacutediteur de spyder (partie gauche) La partieen haut agrave droite donne accegraves aux contenus des variables et agrave la documentation du langage
1112 Python pour quoi faire
Lrsquoexpressiviteacute du langage permet facilement de repreacutesenter des donneacutees complexes et les librairiesscientifiques et graphiques de les manipuler avec aisance Voici quelques petits exemples poursrsquoouvrir lrsquoapeacutetit
4
112 Test graphiques
Lrsquoenvironnement graphique pylab permet de visualiser les donneacutees Par exemple (on reviendrasur la syntaxe)
In [39] pylab inline
Populating the interactive namespace from numpy and matplotlib
anaconda3envssnorkellibpython36site-packagesIPythoncoremagicspylabpy160 UserWarning pylab import has clobbered these variables [figure]`matplotlib` prevents importing from pylab and numpy
n`matplotlib` prevents importing from pylab and numpy
In [41] l = range(10)l = [sin(-x) for x in range(10)]figure = pylabplot(range(10)l)
113 Test Analyse de donneacutees (avec pandas)
Pandas est une librairie de manipulation de donneacutees pour lrsquoanalyse statistiques qui couvre large-ment ce qursquoon peut faire en R par exemple (on reviendra sur la syntaxe)
In [7] import pandas as pds
In [8] a=pdsDataFrame(data=france[21860]allemagne[17680]index=[natchompop])
5
In [9] a
Out[9] france allemagnenat 21 17chom 80 60pop 600 800
Pandas donne accegraves agrave un certain nombre de fonctions statistiques et de visualisations stan-dards
In [10] figure = aboxplot()
Creacuteeacuteons un petit fichier de donneacutees en meacutelangeant plusieurs types indexeacutes par des dates Lenotebook nous permet de creacuteer des fichiers directement avec la commande speacuteciale file
In [11] file datacsvDateOpenHighLowCloseVolumeAdj Close2012-06-015691659000548505840014077000581502012-05-015849059676522185777318827900575262012-04-026018364400555005839828759100581482012-03-015481762145516225995526486000596992012-02-014584154761453985424422001000540122012-01-03409404582440900456481294910045453
Overwriting datacsv
On peut lire des donneacutees sous forme tabulaire de base avec pandas
6
In [12] df = pdsread_csv(datacsv)
On peut visualiser sous forme de table
In [13] df
Out[13] Date Open High Low Close Volume Adj Close0 2012-06-01 56916 59000 54850 58400 14077000 581501 2012-05-01 58490 59676 52218 57773 18827900 575262 2012-04-02 60183 64400 55500 58398 28759100 581483 2012-03-01 54817 62145 51622 59955 26486000 596994 2012-02-01 45841 54761 45398 54244 22001000 540125 2012-01-03 40940 45824 40900 45648 12949100 45453
Et faire des visualisations communes agrave plusieurs colonnes
In [14] fig = dfboxplot(column=[HighOpenClose])
In [26] import pandas_datareaderdata as webimport datetime as dt
start = dtdatetime(2014 1 1)end = dtdatetimetoday()prices = webDataReader(AAPL stooq start end)closing_prices = prices[Close]closing_pricesplot()
7
Out[26] ltmatplotlibaxes_subplotsAxesSubplot at 0x118b807f0gt
114 Variables et expressions
Un algorithme manipule des objets abstraits appeleacutes variables qui prendront les valeurs des don-neacutees seulement au moment de lrsquoexeacutecution - Une variable est associeacutee agrave une zone de la meacutemoirede la machine appeleacute n case meacutemoire z ou n mot meacutemoire z - Elle est repeacutereacutee par un nom ouidentificateur - Elle contient une valeur qui peut varier au cours de lrsquoexeacutecution de lrsquoalgorithmedrsquoougrave le nom de variable - La variable a un type (implicite en python)
In [27] a = 54+7v = sqrt(2)+pow(57)
bull Lrsquoexpression est tout drsquoabord eacutevalueacuteebull Puis la valeur obtenue est affecteacutee agrave la variable crsquoest agrave dire placeacutee dans la zone meacutemoire
associeacutee agrave la variablebull Une mecircme variable peut ecirctre agrave la fois utiliseacutee dans lrsquoexpression puis prise pour lrsquoaffectation
In [31] a = 3a = a - 4b = b 6
115 Types de donneacutees de base
bull entiers (integer) 1 -3bull nombre agrave virgule flottante (float) 20 545
8
bull chaines de caractegraveres (str) hello ou rsquohellorsquobull booleacuteen (bool) True False
On dispose drsquoopeacuterateurs classiques sur ces types de donneacuteesUn opeacuterateur transforme une expression ou combine deux expressions pour en faire une autre
bull entiers + - bull virgule + - sqrt()
In [ ]
In [ ]
In [42] type(1)
Out[42] int
In [43] print(1+23-45)print(15 2)
-10171
In [44] type(ah bon)
Out[44] str
In [46] ah + BON
Out[46] ahBON
In [ ] hello[2]
In [47] type(20)
Out[47] float
In [ ] from math import exp203 + exp(2)
In [48] type(True)
Out[48] bool
In [ ] (True and False) or not(True)
In [49] print(10gt3)
True
Attention le test drsquoeacutegaliteacute est distinct de lrsquoaffectation
In [50] 4==3
Out[50] False
In [51] 4=3
Out[51] True
9
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
112 Test graphiques
Lrsquoenvironnement graphique pylab permet de visualiser les donneacutees Par exemple (on reviendrasur la syntaxe)
In [39] pylab inline
Populating the interactive namespace from numpy and matplotlib
anaconda3envssnorkellibpython36site-packagesIPythoncoremagicspylabpy160 UserWarning pylab import has clobbered these variables [figure]`matplotlib` prevents importing from pylab and numpy
n`matplotlib` prevents importing from pylab and numpy
In [41] l = range(10)l = [sin(-x) for x in range(10)]figure = pylabplot(range(10)l)
113 Test Analyse de donneacutees (avec pandas)
Pandas est une librairie de manipulation de donneacutees pour lrsquoanalyse statistiques qui couvre large-ment ce qursquoon peut faire en R par exemple (on reviendra sur la syntaxe)
In [7] import pandas as pds
In [8] a=pdsDataFrame(data=france[21860]allemagne[17680]index=[natchompop])
5
In [9] a
Out[9] france allemagnenat 21 17chom 80 60pop 600 800
Pandas donne accegraves agrave un certain nombre de fonctions statistiques et de visualisations stan-dards
In [10] figure = aboxplot()
Creacuteeacuteons un petit fichier de donneacutees en meacutelangeant plusieurs types indexeacutes par des dates Lenotebook nous permet de creacuteer des fichiers directement avec la commande speacuteciale file
In [11] file datacsvDateOpenHighLowCloseVolumeAdj Close2012-06-015691659000548505840014077000581502012-05-015849059676522185777318827900575262012-04-026018364400555005839828759100581482012-03-015481762145516225995526486000596992012-02-014584154761453985424422001000540122012-01-03409404582440900456481294910045453
Overwriting datacsv
On peut lire des donneacutees sous forme tabulaire de base avec pandas
6
In [12] df = pdsread_csv(datacsv)
On peut visualiser sous forme de table
In [13] df
Out[13] Date Open High Low Close Volume Adj Close0 2012-06-01 56916 59000 54850 58400 14077000 581501 2012-05-01 58490 59676 52218 57773 18827900 575262 2012-04-02 60183 64400 55500 58398 28759100 581483 2012-03-01 54817 62145 51622 59955 26486000 596994 2012-02-01 45841 54761 45398 54244 22001000 540125 2012-01-03 40940 45824 40900 45648 12949100 45453
Et faire des visualisations communes agrave plusieurs colonnes
In [14] fig = dfboxplot(column=[HighOpenClose])
In [26] import pandas_datareaderdata as webimport datetime as dt
start = dtdatetime(2014 1 1)end = dtdatetimetoday()prices = webDataReader(AAPL stooq start end)closing_prices = prices[Close]closing_pricesplot()
7
Out[26] ltmatplotlibaxes_subplotsAxesSubplot at 0x118b807f0gt
114 Variables et expressions
Un algorithme manipule des objets abstraits appeleacutes variables qui prendront les valeurs des don-neacutees seulement au moment de lrsquoexeacutecution - Une variable est associeacutee agrave une zone de la meacutemoirede la machine appeleacute n case meacutemoire z ou n mot meacutemoire z - Elle est repeacutereacutee par un nom ouidentificateur - Elle contient une valeur qui peut varier au cours de lrsquoexeacutecution de lrsquoalgorithmedrsquoougrave le nom de variable - La variable a un type (implicite en python)
In [27] a = 54+7v = sqrt(2)+pow(57)
bull Lrsquoexpression est tout drsquoabord eacutevalueacuteebull Puis la valeur obtenue est affecteacutee agrave la variable crsquoest agrave dire placeacutee dans la zone meacutemoire
associeacutee agrave la variablebull Une mecircme variable peut ecirctre agrave la fois utiliseacutee dans lrsquoexpression puis prise pour lrsquoaffectation
In [31] a = 3a = a - 4b = b 6
115 Types de donneacutees de base
bull entiers (integer) 1 -3bull nombre agrave virgule flottante (float) 20 545
8
bull chaines de caractegraveres (str) hello ou rsquohellorsquobull booleacuteen (bool) True False
On dispose drsquoopeacuterateurs classiques sur ces types de donneacuteesUn opeacuterateur transforme une expression ou combine deux expressions pour en faire une autre
bull entiers + - bull virgule + - sqrt()
In [ ]
In [ ]
In [42] type(1)
Out[42] int
In [43] print(1+23-45)print(15 2)
-10171
In [44] type(ah bon)
Out[44] str
In [46] ah + BON
Out[46] ahBON
In [ ] hello[2]
In [47] type(20)
Out[47] float
In [ ] from math import exp203 + exp(2)
In [48] type(True)
Out[48] bool
In [ ] (True and False) or not(True)
In [49] print(10gt3)
True
Attention le test drsquoeacutegaliteacute est distinct de lrsquoaffectation
In [50] 4==3
Out[50] False
In [51] 4=3
Out[51] True
9
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
In [9] a
Out[9] france allemagnenat 21 17chom 80 60pop 600 800
Pandas donne accegraves agrave un certain nombre de fonctions statistiques et de visualisations stan-dards
In [10] figure = aboxplot()
Creacuteeacuteons un petit fichier de donneacutees en meacutelangeant plusieurs types indexeacutes par des dates Lenotebook nous permet de creacuteer des fichiers directement avec la commande speacuteciale file
In [11] file datacsvDateOpenHighLowCloseVolumeAdj Close2012-06-015691659000548505840014077000581502012-05-015849059676522185777318827900575262012-04-026018364400555005839828759100581482012-03-015481762145516225995526486000596992012-02-014584154761453985424422001000540122012-01-03409404582440900456481294910045453
Overwriting datacsv
On peut lire des donneacutees sous forme tabulaire de base avec pandas
6
In [12] df = pdsread_csv(datacsv)
On peut visualiser sous forme de table
In [13] df
Out[13] Date Open High Low Close Volume Adj Close0 2012-06-01 56916 59000 54850 58400 14077000 581501 2012-05-01 58490 59676 52218 57773 18827900 575262 2012-04-02 60183 64400 55500 58398 28759100 581483 2012-03-01 54817 62145 51622 59955 26486000 596994 2012-02-01 45841 54761 45398 54244 22001000 540125 2012-01-03 40940 45824 40900 45648 12949100 45453
Et faire des visualisations communes agrave plusieurs colonnes
In [14] fig = dfboxplot(column=[HighOpenClose])
In [26] import pandas_datareaderdata as webimport datetime as dt
start = dtdatetime(2014 1 1)end = dtdatetimetoday()prices = webDataReader(AAPL stooq start end)closing_prices = prices[Close]closing_pricesplot()
7
Out[26] ltmatplotlibaxes_subplotsAxesSubplot at 0x118b807f0gt
114 Variables et expressions
Un algorithme manipule des objets abstraits appeleacutes variables qui prendront les valeurs des don-neacutees seulement au moment de lrsquoexeacutecution - Une variable est associeacutee agrave une zone de la meacutemoirede la machine appeleacute n case meacutemoire z ou n mot meacutemoire z - Elle est repeacutereacutee par un nom ouidentificateur - Elle contient une valeur qui peut varier au cours de lrsquoexeacutecution de lrsquoalgorithmedrsquoougrave le nom de variable - La variable a un type (implicite en python)
In [27] a = 54+7v = sqrt(2)+pow(57)
bull Lrsquoexpression est tout drsquoabord eacutevalueacuteebull Puis la valeur obtenue est affecteacutee agrave la variable crsquoest agrave dire placeacutee dans la zone meacutemoire
associeacutee agrave la variablebull Une mecircme variable peut ecirctre agrave la fois utiliseacutee dans lrsquoexpression puis prise pour lrsquoaffectation
In [31] a = 3a = a - 4b = b 6
115 Types de donneacutees de base
bull entiers (integer) 1 -3bull nombre agrave virgule flottante (float) 20 545
8
bull chaines de caractegraveres (str) hello ou rsquohellorsquobull booleacuteen (bool) True False
On dispose drsquoopeacuterateurs classiques sur ces types de donneacuteesUn opeacuterateur transforme une expression ou combine deux expressions pour en faire une autre
bull entiers + - bull virgule + - sqrt()
In [ ]
In [ ]
In [42] type(1)
Out[42] int
In [43] print(1+23-45)print(15 2)
-10171
In [44] type(ah bon)
Out[44] str
In [46] ah + BON
Out[46] ahBON
In [ ] hello[2]
In [47] type(20)
Out[47] float
In [ ] from math import exp203 + exp(2)
In [48] type(True)
Out[48] bool
In [ ] (True and False) or not(True)
In [49] print(10gt3)
True
Attention le test drsquoeacutegaliteacute est distinct de lrsquoaffectation
In [50] 4==3
Out[50] False
In [51] 4=3
Out[51] True
9
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
In [12] df = pdsread_csv(datacsv)
On peut visualiser sous forme de table
In [13] df
Out[13] Date Open High Low Close Volume Adj Close0 2012-06-01 56916 59000 54850 58400 14077000 581501 2012-05-01 58490 59676 52218 57773 18827900 575262 2012-04-02 60183 64400 55500 58398 28759100 581483 2012-03-01 54817 62145 51622 59955 26486000 596994 2012-02-01 45841 54761 45398 54244 22001000 540125 2012-01-03 40940 45824 40900 45648 12949100 45453
Et faire des visualisations communes agrave plusieurs colonnes
In [14] fig = dfboxplot(column=[HighOpenClose])
In [26] import pandas_datareaderdata as webimport datetime as dt
start = dtdatetime(2014 1 1)end = dtdatetimetoday()prices = webDataReader(AAPL stooq start end)closing_prices = prices[Close]closing_pricesplot()
7
Out[26] ltmatplotlibaxes_subplotsAxesSubplot at 0x118b807f0gt
114 Variables et expressions
Un algorithme manipule des objets abstraits appeleacutes variables qui prendront les valeurs des don-neacutees seulement au moment de lrsquoexeacutecution - Une variable est associeacutee agrave une zone de la meacutemoirede la machine appeleacute n case meacutemoire z ou n mot meacutemoire z - Elle est repeacutereacutee par un nom ouidentificateur - Elle contient une valeur qui peut varier au cours de lrsquoexeacutecution de lrsquoalgorithmedrsquoougrave le nom de variable - La variable a un type (implicite en python)
In [27] a = 54+7v = sqrt(2)+pow(57)
bull Lrsquoexpression est tout drsquoabord eacutevalueacuteebull Puis la valeur obtenue est affecteacutee agrave la variable crsquoest agrave dire placeacutee dans la zone meacutemoire
associeacutee agrave la variablebull Une mecircme variable peut ecirctre agrave la fois utiliseacutee dans lrsquoexpression puis prise pour lrsquoaffectation
In [31] a = 3a = a - 4b = b 6
115 Types de donneacutees de base
bull entiers (integer) 1 -3bull nombre agrave virgule flottante (float) 20 545
8
bull chaines de caractegraveres (str) hello ou rsquohellorsquobull booleacuteen (bool) True False
On dispose drsquoopeacuterateurs classiques sur ces types de donneacuteesUn opeacuterateur transforme une expression ou combine deux expressions pour en faire une autre
bull entiers + - bull virgule + - sqrt()
In [ ]
In [ ]
In [42] type(1)
Out[42] int
In [43] print(1+23-45)print(15 2)
-10171
In [44] type(ah bon)
Out[44] str
In [46] ah + BON
Out[46] ahBON
In [ ] hello[2]
In [47] type(20)
Out[47] float
In [ ] from math import exp203 + exp(2)
In [48] type(True)
Out[48] bool
In [ ] (True and False) or not(True)
In [49] print(10gt3)
True
Attention le test drsquoeacutegaliteacute est distinct de lrsquoaffectation
In [50] 4==3
Out[50] False
In [51] 4=3
Out[51] True
9
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
Out[26] ltmatplotlibaxes_subplotsAxesSubplot at 0x118b807f0gt
114 Variables et expressions
Un algorithme manipule des objets abstraits appeleacutes variables qui prendront les valeurs des don-neacutees seulement au moment de lrsquoexeacutecution - Une variable est associeacutee agrave une zone de la meacutemoirede la machine appeleacute n case meacutemoire z ou n mot meacutemoire z - Elle est repeacutereacutee par un nom ouidentificateur - Elle contient une valeur qui peut varier au cours de lrsquoexeacutecution de lrsquoalgorithmedrsquoougrave le nom de variable - La variable a un type (implicite en python)
In [27] a = 54+7v = sqrt(2)+pow(57)
bull Lrsquoexpression est tout drsquoabord eacutevalueacuteebull Puis la valeur obtenue est affecteacutee agrave la variable crsquoest agrave dire placeacutee dans la zone meacutemoire
associeacutee agrave la variablebull Une mecircme variable peut ecirctre agrave la fois utiliseacutee dans lrsquoexpression puis prise pour lrsquoaffectation
In [31] a = 3a = a - 4b = b 6
115 Types de donneacutees de base
bull entiers (integer) 1 -3bull nombre agrave virgule flottante (float) 20 545
8
bull chaines de caractegraveres (str) hello ou rsquohellorsquobull booleacuteen (bool) True False
On dispose drsquoopeacuterateurs classiques sur ces types de donneacuteesUn opeacuterateur transforme une expression ou combine deux expressions pour en faire une autre
bull entiers + - bull virgule + - sqrt()
In [ ]
In [ ]
In [42] type(1)
Out[42] int
In [43] print(1+23-45)print(15 2)
-10171
In [44] type(ah bon)
Out[44] str
In [46] ah + BON
Out[46] ahBON
In [ ] hello[2]
In [47] type(20)
Out[47] float
In [ ] from math import exp203 + exp(2)
In [48] type(True)
Out[48] bool
In [ ] (True and False) or not(True)
In [49] print(10gt3)
True
Attention le test drsquoeacutegaliteacute est distinct de lrsquoaffectation
In [50] 4==3
Out[50] False
In [51] 4=3
Out[51] True
9
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
bull chaines de caractegraveres (str) hello ou rsquohellorsquobull booleacuteen (bool) True False
On dispose drsquoopeacuterateurs classiques sur ces types de donneacuteesUn opeacuterateur transforme une expression ou combine deux expressions pour en faire une autre
bull entiers + - bull virgule + - sqrt()
In [ ]
In [ ]
In [42] type(1)
Out[42] int
In [43] print(1+23-45)print(15 2)
-10171
In [44] type(ah bon)
Out[44] str
In [46] ah + BON
Out[46] ahBON
In [ ] hello[2]
In [47] type(20)
Out[47] float
In [ ] from math import exp203 + exp(2)
In [48] type(True)
Out[48] bool
In [ ] (True and False) or not(True)
In [49] print(10gt3)
True
Attention le test drsquoeacutegaliteacute est distinct de lrsquoaffectation
In [50] 4==3
Out[50] False
In [51] 4=3
Out[51] True
9
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
116 Syntaxe de base structures de controcircle
1161 Preacuteliminaires commenter les programmes
Le commentaire est transparent pour lrsquoalgorithme il nrsquoest utile que pour lrsquoutilisateur il doit fa-ciliter la lisibiliteacute et la compreacutehension du programme pour lrsquoalgorithme il est eacutequivalent agrave unespace
Syntaxe python
In [52] ceci est un commentaire
In [55] Affectationsb = 2a = -12 + b
Tests tabulations obligatoiresif agtb
print(a)else optionnel
print(b)
Conditions complexes(10lta) or (alt3) and (not(blt2))
2
Out[55] True
In [56] Boucles 1) reacutepeacutetition tant quune condition est veacuterifieacuteea = 5while agt0
a = a - 1print(aend= )
4 3 2 1 0
In [34] 2) reacutepeacutetition sur une seacutequence de valeursfor i in range(10)
print(iend= )
0 1 2 3 4 5 6 7 8 9
In [1] Fonctionsdef max(ab)
if agtbreturn a
10
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
elsereturn b
def rien(x)pass
k = 7print(max(5k-24k+13))print(rien(1))
41None
1162 Un cas speacutecial les fonctions reacutecursives
On peut deacutefinir des fonctions reacutecursives crsquoest-agrave-dire qui srsquoappellent elle-mecircme
In [2] il nya pas un problegraveme def somme_entiers(n)
return n + somme_entiers(n-1)
In [3] def somme_entiers(n)if ngt0
return n + somme_entiers(n-1)else
return 0
In [5] somme_entiers(6)
Out[5] 21
On peut avoir des fonctions mutuellement reacutecursives
In [6] def pair(n)pass
def impair(n)pass
Concevoir une solution reacutecursive
1 Identifier les paramegravetres neacutecessaires2 choisir trouver un cas drsquoarrecirct
bull cas trivialbull facile agrave calculerbull il peut y en avoir plusieurs (if)
3 cas reacutecursif
11
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
bull deacutecomposer le problegraveme en parties plus petites du mecircme problegraveme ndash nombres plus petitsndash ou moins de donneacutees (liste plus petite)ndash ou moins de choix agrave faire
bull trouver comment combiner lales solutions des problegravemes plus petits pour reacutesoudre leplus grand
117 Exercices
Feuille TD 1
118 Types structureacutes natifs
En plus des types de base python peut manipuler directement les types de donneacutees structureacutessuivants
- tuples- listes- tables associatives (appeleacutees dictionnaires)
Dans tous les cas on accegravede aux eacuteleacutements avec un index signaleacute entre [ ]Dans le cas des listes et tuples crsquoest un entier donnant la position (commence agrave 0)Dans le cas des tables lrsquoindex fait partie de la deacutefinition de la table
In [ ] tuple on peut meacutelanger les typest=(134hello)print(t[2])
In [ ] listes on peut meacutelanger les types mais cela na pas trop de sensl = [1236-3]print(l[4])
In [6] Les tuples sont utiliseacutes notamment pour avoir des fonctions avec plusieurs reacutesultats
def div_avec_test(xy)if y==0
return (False0)else
return (Truexy)
print(div_avec_test(20))
(False 0)
Les listes font presque la mecircme chose mais sont dynamiques et peuvent avoir un nombrevariable drsquoeacuteleacutements
Les tuples sont invariables (immutables)On peut seacutelectionner des tranches de listes attention agrave la signification des bornes [ab[
12
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
In [9] l = [10 201 45 56 78 89 14]print(l[24]+l[45])print(l[24]+[l[4]])
print([l[4]])
[45 56 78][45 56 78][78]
In [10] l[-3]
Out[10] 78
In [11] l[4]
Out[11] [10 201 45 56]
On peut aussi sauter des valeurs avec lrsquoopeacuterateur
In [12] print(l[2])print(l[-1])print(l[-2])
[10 45 78 14][14 89 78 56 45 201 10][14 78 45 10]
119 Fonctions opeacuterateurs et meacutethodes
Les types de donneacutees en python sont en fait des objets (on y reviendra) et de nombreuses opeacutera-tions que lrsquoon peut faire dessus sont deacutefinies comme des proprieacuteteacutes de ces objets et appeleacuteesmeacutethodes
La syntaxe pour ces opeacuterations suit le format suivant
objetmethode(paramegravetres)
Exemple
In [13] deacutefinissons une listel = [312-64] append est le nom de la meacutethode qui ajoute un eacuteleacutement agrave une listelappend(20)print(l)
[3 12 -6 4 20]
13
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
Aide dans le notebook vous pouvez connaitre les meacutethodes disponibles drsquoun objet a en tapant
a
Puis en utilisant la tabulation Une fois la meacutethode choisie une autre tabulation vous donneune aide minimale sur la fonction
Dans lrsquoenvironnement spyder vous avez une fonction similaire dans lrsquoeacutediteur qui proposeune meacutethode directement
1191 Meacutethodes et opeacuterateurs de listes
bull append ajoute un eacuteleacutement en fin de listebull extend ajoute une liste agrave la fin drsquoune liste (cf aussi opeacuterateur +)bull sort trie par ordre croissant si les valeurs sont comparablesbull + (opeacuterateur) concategravene 2 listes pour faire une 3e liste
cf la documentation python pour les listes
1192 Meacutethodes et opeacuterateurs de chaines
bull + (opeacuterateur) pour concateacutener 2 chainesbull join pour concateacutener une liste de chaine avec un seacuteparateurbull split pour diviser une chaine selon un seacuteparateur
cf la documentation python pour les chaines
In [14] ch = helloprint(ch + ch)ch = Jaime les PATATESl = chsplit()print(l)print(-join(l))
hellohello[Jaime les PATATES]Jaime-les-PATATES
In [15] print(chreplace(lesla))print(ch)print(chlower())
Jaime la PATATESJaime les PATATESjaime les patates
In [16] l = [12]lextend([34])print(l)
14
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
lbis = l+[45]print(l)print(lbis)
l2 = [15] + lprint(l2)
[1 2 3 4][1 2 3 4][1 2 3 4 4 5][15 1 2 3 4]
1193 Tables associatives dictionnaires
NB lagrave encore pas trop de contraintes mais attention agrave ce que ccedila veut dire
In [9] on associe des valeurs agrave des clefsd = a b35 x27 2312 (12)56 zuziu[123]
print(d[a])
d[34] = 78
print(d)
a b 35 x 27 23 12 (1 2) 56 zuziu [1 2 3] 34 78
In [15] d = agrave preacuteposition qui aardvarkcochon aeacuterodynamique
In [16] print(d[aardvark])
cochon aeacuterodynamique
In [18] d[vocabulaire] = ensemble de mots
1194 Meacutethodes et opeacuterateurs de dictionnaires
bull keys liste des clefs ou valeurs de lrsquoindex de la tablebull values liste des valeursbull items listes des couples (clefvaleur)bull get reacutecupegravere une valeur avec la clef ou une valeur par deacutefaut
cf la documentation python pour les dictPour tous
bull len fonction donnant le nombre drsquoeacuteleacutements
15
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
bull in opeacuterateur (infixe) teste lrsquoappartenance (dans le cas drsquoun dictionnaire teste la preacutesencedrsquoune clef)
Pour les dictionnaires
bull del d[clef] supprime une entreacutee
In [2] d = a23 b35 x27print (d)print (dkeys()= dkeys())
a 23 b 35 x 27dkeys()= dict_keys([a b x])
In [8] d[a] = 23print(d[a])
print (dvalues())print (ditems())print (len(d))print (d[b])print (dget(b0))print (dget(h0))del d[a]print (d)print (dget(y0))
print (h in d)
dict_values([35 27 23])dict_items([(b 35) (x 27) (a 23)])335350b 35 x 270False
In [ ]
In [18] d = Alfred065656565Toto09898918989
d[Alphonse] = 066666666
print(d)
Alfred 065656565 Toto 09898918989 Alphonse 066666666
16
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
120 Iteacuteration sur les objets structureacutes
les types comme list tuple dict collectionnent des donneacutees sur lesquelles on peut iteacuterer directe-ment avec for
for x in l
Pour les listes et les tuples on itegravere sur les valeurs Pour les dictionnaires on itegravere sur les clefs
In [20] for x in [2-6317]print(x)
for x in (123)print(x)
print()print(=10)print(d)for x in d
print(x d[x])
2-6317123
==========a 23 b 35 x 27a 23b 35x 27
Iteration de listes abreacutegeacutees
In [20] print([x2 for x in range(10)])
[0 1 4 9 16 25 36 49 64 81]
On peut imbriquer autant que lrsquoon veut
In [21] print([2x for x in [y2 for y in range(10)]])
17
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
[0 2 8 18 32 50 72 98 128 162]
Il y a un raccourci eacutequivalent pour iteacuterer sur un dictionnaire
In [22] print(xx2 for x in range(10))
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81
Pour les listes on a parfois besoin de savoir agrave quel indice on est dans la progression
In [2] premiegravere solution on itegravere sur les indicesl = [34452-810]
for i in range(len(l))print(l[i])
34452-810
In [5] 2e solution ``for x in enumerate([1025-4012])
print(x[0]-gtx[1])
0 -gt 101 -gt 252 -gt -43 -gt 04 -gt 12
121 Affectation avec les types structureacutes
Pour les tuples et les listes on peut faire des affectations multiples du moment que les deux mem-bres de lrsquoaffectation sont compatibles et peuvent ecirctre logiquement relieacutes (mecircme nombre drsquoeacuteleacutement)
In [24] ab = 12print(ab)
ba = abprint(ab)
1 22 1
18
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
In [25] [abc] = [123]print(b)
2
Cela vaut aussi pour les iteacuterations
In [2] l = [(12)(34)]for (xy) in l
print(x+y)
37
In [3] for (ix) in enumerate([452312])print(ix)
0 451 232 12
In [4] [x+y for (xy) in l]
Out[4] [3 7]
1211 Matrices et listes de listes
Une faccedilon simple de repreacutesenter une matrice est drsquoutiliser une liste contenant des listes chaqueliste imbriqueacutee est comme une ligne avec une valeur par colonne
Par exemple une matrice 3x2
In [3] mat = [[31][2-4][155]
]
In [4] print(mat)
[[3 1] [2 -4] [15 5]]
Et on fait appel agrave chaque eacuteleacutement avec deux indices
In [5] print(mat[2][0])
15
19
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
In [6] mat[0][1] = 12print(mat)
[[3 12] [2 -4] [15 5]]
In [11] pour iteacuterer sur tous les eacuteleacutements ligne par ligne colonne par colonne (ou linverse)
for i in range(len(mat))for j in range(len(mat[i]))
print(mat[i][j])
3122-4155
In [12] ou bien (mais force par ligne puis par colonne)for ligne in mat
for element in ligneprint(element)
3122-4155
1212 Entreacutees sorties
Lrsquoaffichage de base se fait avec la fonction print quel que soit le type
In [29] print(3)print(a)print([12])print(a2)
3a[1 2]a 2
In [34] On peut enchainer les impressions avec une tabulation
20
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
In [35] print(ab)
1 2
In [36] print(aend= )print(b)
1 2
1213 Lecture eacutecriture de fichiers
Pour geacuterer les fichiers on doit geacuterer lrsquoouverture drsquoun canal
In [37] f = open(monfichiertxtw) eacutecriture w writefwrite(1 2 3 5n)fwrite(4 5 6 4n)fwrite(3 2 1 3n)fclose()
In [38] f = open(monfichiertxt) lecture (par deacutefaut)txt = fread()fclose()f=open(monfichiertxt) lecturelignes = freadlines()fclose()print(txt)print(lignes)
1 2 3 54 5 6 43 2 1 3
[1 2 3 5n 4 5 6 4n 3 2 1 3n]
In [39] final = []for l in lignes
data = [int(x) for x in lstrip()split()]finalappend(data)
print(final)
[[1 2 3 5] [4 5 6 4] [3 2 1 3]]
In [40] blablanstrip()
Out[40] blabla
21
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
In [41] abbsbs strip()
Out[41] abbsbs
Une faccedilon abreacutegeacutee permet drsquoutiliser directement print en deacutesignant le canal de sortie
In [42] f=open(monfichiertxtw) eacutecritureprint(blablafile=f)print(blafile=f)fclose()
f = open(monfichiertxt)for ligne in f
print(ligne)
blabla
bla
122 Deacutefinition avanceacutee de fonctions
le format vu jusqursquoici pour les fonctions est en fait un scheacutema de base avec des arguments fixesgtgt def nom_fonction(argument1arg2argn)
On peut aussi mettre des arguments optionnels de la faccedilon suivante gtgt defnom_fonction(arg1argn option1 = defaut1 option2 = defaut2 )
In [45] def message(texte signature politesse = cordialementps= )print(texte)print(politesse+)print(signature)print(ps)
message(bye byeFranccedilois Hollande)
bye byecordialementFranccedilois Hollande
In [46] message(blablaFranccedilois Hollandepolitesse=Sincegraverement)
blablaSincegraverementFranccedilois Hollande
22
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
Il est parfois utile de deacutefinir un objet fonction jetable (pas assigneacute agrave une variable) comme suit
In [48] lambda ab a+b
Out[48] ltfunction __main__ltlambdagt(a b)gt
123 Passage des paramegravetres
il y a deux faccedilons de passer des paramegravetres agrave une fonction par valeur ou par reacutefeacuterencedans le premier cas le paramegravetre transmis est une valeur (eacuteventuellement contenue dans une
variable) dans le deuxiegraveme cas le paramegravetre est une variable transmise agrave la fonction qui peutdonc la modifier
En python les fonctions passent des noms vers les valeurs des arguments pour les types debase (entiers flottants booleacuteens) cela implique qursquoon ne peut modifier les valeurs des variablespasseacutees en argument
Exemple
In [49] def test1(a)a = 3return 0
a = 1test1(a)print(a)
1
Les autres types notamment les types complexes fonctionnent de mecircme mais comme unevariable sur une structure (une liste par exemple) est en fait un pointeur vers la structure on peutmodifier les eacuteleacutements de la structure
In [50] from copy import copy ya aussi deepcopy ne vous en servez pas import copy
def test1(liste)liste[0] = 0return liste
def test2(liste)copie = copycopy(liste)copie[0] = 0return copie
l = [1234]print(l)print(test2(l))
23
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
print(l)print(test1(l))
copie = l
[1 2 3 4][0 2 3 4][1 2 3 4][0 2 3 4]
In [51] diffeacuterence avec un pur passage par reacutefeacuterencel = [12]
def bla(x)x = [0]
print(l)bla(l)print(l)
[1 2][1 2]
2 Ensembles
Il reste un type utile agrave voir les ensembles qui se comportent comme un ensemble au sens matheacute-matique une collection de donneacutees uniques sans ordre
In [52] s2 = set([1])s1 = set([13453])print(s1)s1 = set(hello)print(len(s1))print (s1)print (s1union(s2)) modifie s1print (s1intersection(s2)) modifie s1
1 3 4 54l h e ol 1 h e oset()
24
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-
In [53] print (s1 | s2) nouvel ensembleprint (s1 amp s2) nouvel ensembles2add(3)print (s2)print (3 in s2)print( s2issubset(s1) s2 lt= s1)s2remove(3)print (s2)
for x in s1print (xend= )
l 1 h e oset()1 3TrueFalse False1l h e o
25
- Programmation en Python pour lanalyse de donneacutees
-
- Philippe Muller
- Preacuterequis
- Organisation
- Plan
- Introduction programmation et ordinateur
- Programmation et algorithme
- Algorithmique
-
- une meacutethodologie de deacuteveloppement dalgorithmes leacutetude des algorithmes
-
- Structure dun algorithme
- Meacutemoire et codage
- Langages de programmation
- Pourquoi Python
- Installation
-
- Exemple
- Python pour quoi faire
-
- Test graphiques
- Test Analyse de donneacutees (avec pandas)
- Variables et expressions
- Types de donneacutees de base
- Syntaxe de base structures de controcircle
-
- Preacuteliminaires commenter les programmes
- Un cas speacutecial les fonctions reacutecursives
-
- Exercices
- Types structureacutes natifs
- Fonctions opeacuterateurs et meacutethodes
-
- Meacutethodes et opeacuterateurs de listes
- Meacutethodes et opeacuterateurs de chaines
- Tables associatives dictionnaires
- Meacutethodes et opeacuterateurs de dictionnaires
-
- Iteacuteration sur les objets structureacutes
- Affectation avec les types structureacutes
-
- Matrices et listes de listes
- Entreacutees sorties
- Lecture eacutecriture de fichiers
-
- Deacutefinition avanceacutee de fonctions
- Passage des paramegravetres
-
- Ensembles
-