25
Python_pour_les_economistes_Partie_I October 18, 2019 1 Programmation en Python pour l’analyse de données 1.0.1 Philippe Muller 2019-2020 Magistère Eco Cette page sert de support au cours de L3 MMESI. Vous pouvez télécharger le "notebook" correspondant pour modifier et expérimenter avec les exemples de code. Ce cours présente les concepts de la programmation en python, notamment avec des struc- tures de données de haut niveau, pour aller vers la programmation "scientifique" et l’analyse de données. 1.1 Prérequis Pour pouvoir travailler chez vous, il est conseillé d’installer sur une machine Python et les biblio- thèques scientifiques: par exemple tout est dans la distribution anaconda, disponible pour linux, mac, windows 1.2 Organisation • 24 h de cours / TD • 18 h de TP en 9x2h Notation: examen terminal + projet (fait pendant le 2e semestre) + note de TP 1.3 Plan Partie I : bases 1. Introduction: programmation / algorithmique 2. Syntaxe de base Python 3. Structures: listes, dictionnaires, etc 4. Structuration de code, modularité Partie II : programmation scientifique 1. Calcul matriciel 2. Analyse/Visualisation de données 3. Data mining/Machine learning Partie III: programmation avancée 1

Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 2: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 3: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 4: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 5: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 6: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 7: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 8: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 9: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 10: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 11: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 12: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 13: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 14: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 15: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 16: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 17: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 18: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

[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
Page 19: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 20: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 21: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 22: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 23: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 24: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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
Page 25: Python pour les economistes Partie I - IRIT€¦ · 1.8 Mémoire et codage • La machine sur laquelle l’exécution doit s‘effectuer possède une n´ mémoire z.˙ – C’est

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