Académique Documents
Professionnel Documents
Culture Documents
Python
Tarek SBOUI
Etapes de la programmation
• Écrire un algorithme
• Écrire un programme dans un langage (e.g. Java,
C++, python)
• Compiler le programme
– Traduire le programme dans un langage de bas
niveau (machine)
– [éventuellement optimisation]
– Produire un programme (code) exécutable
• Exécuter le programme
– Charger le programme en mémoire
– Exécuter le programme pour avoir le résultat
1
Termes
• Syntaxe d’un langage
– Comment formuler une instruction correcte
(grammaire)
• Sémantique
– Ce que l’instruction réalise
• Erreur
– de compilation: typiquement reliée à la syntaxe
– d’exécution: sémantique (souvent plus difficile à
détecter et corriger)
Python
• Open-source : son utilisation est gratuite et les fichiers
sources sont disponibles et modifiables;
• Facile à apprendre, à lire et à écrire ;
• Portable (fonctionne sous de plusieurs systèmes
d'exploitation) ;
• Doté d’une communauté active (plusieurs bibliothèques
disponibles);
• Orienté objet ;
• Typage dynamique
2
Python : Compilation et Executuon
locate_python = sys.exec_prefix
print(locate_python)
3
Premiers pas : Calculer avec Python
>>> 5+3
>>> 2 - 9 # les espaces sont optionnels
>>> 7 + 3 * 4 # la hiérarchie des opérations
mathématiques
# est-elle respectée ?
>>> (7+3)*4
>>> 20 / 3
2. Seules les lettres ordinaires sont autorisées. Les lettres accentuées, les cédilles, les
espaces, les caractères spéciaux tels que $, #, @, etc. sont interdits, à l'exception du
caractère _ (souligné).
4
En plus de ces règles, il faut encore ajouter que vous ne pouvez pas utiliser
comme noms de variables les 29 « mots réservés » au langage ci-dessous :
Affectation
Nous savons désormais comment choisir judicieusement un nom de variable.
Voyons à présent comment nous pouvons en définir et affecter une valeur.
>>> msg = "Quoi de neuf ?" # affecter la valeur "Quoi de neuf ?" à msg
5
Afficher la valeur d’une variable
Pour afficher la valeur à l'écran, il existe deux possibilités. :
>>> n
7
>>> msg
"Quoi de neuf ? "
>>> pi
3.14159
Affectations multiples
Sous Python, on peut assigner une valeur à plusieurs variables simultanément.
Exemple :
>>> x = y = 7
>>> x
7
>>> y
7
On peut aussi effectuer des affectations parallèles à l'aide d'un seul opérateur :
>>> a, b = 4, 8.33
>>> a
4
>>> b
8.33
6
Exercice
1. Décrivez le plus clairement possible ce qui se passe à chacune des trois
lignes de l'exemple ci-dessous :
>>> largeur = 20
>>> hauteur = 5 * 9.3
>>> largeur * hauteur
(?)
Opérateurs et expressions
On manipule les valeurs et les variables qui les référencent, en les
combinant avec des opérateurs pour former des expressions.
Exemple :
a, b = 7.3, 12
y = 3*a + b/5
Exercice
Décrivez ce qui se passe à l’exécution des lignes suivantes :
7
Structures de contrôle
Structures de contrôle
Les structures de contrôle sont les groupes d'instructions
qui déterminent l'ordre dans lequel les actions sont
effectuées dans le programme.
8
Séquence d’instructions :
Sauf mention explicite, les instructions d'un programme s'exécutent les unes
après les autres, dans l'ordre où elles ont été écrites à l'intérieur du programme.
Le « chemin » d’exécution est appelé un flux d'instructions, et les constructions
qui le modifient sont appelées des instructions de contrôle de flux.
Python exécute normalement les instructions de la première à la dernière, sauf
lorsqu'il rencontre une instruction conditionnelle comme l'instruction «if». Une
telle instruction va permettre au programme de suivre différents chemins
suivant les circonstances.
début d’exécution
if
circonstance1 circonstance2
fin d’exécution
L'instruction if.
>>> a = 150
>>> if (a > 100):
... "a dépasse la centaine"
...
Indentation obligatoire
En interactif :
Frappez encore une fois <Enter>. Le programme s'exécute, et vous obtenez :
a dépasse la centaine.
Recommencez le même exercice, mais avec a = 20 en guise de première ligne : cette fois Python
n'affiche plus rien du tout.
9
>>> a = 20
>>> if (a > 100):
print ("a dépasse la centaine")
else:
print ("a ne dépasse pas cent")
En interactif :
Frappez <Enter> encore une fois. Le programme s'exécute, et affiche cette fois :
a ne dépasse pas cent.
a=0
if a > 0 :
print (" a est positif ")
elif a < 0 :
print ("a est négatif")
else:
print ("a est nul")
10
Exercice
11
>>> nom = input(" Introduire votre nom : ")
nom :
Opérateurs de comparaison
La condition évaluée après l'instruction «if» peut contenir les opérateurs de
comparaison suivants :
x == y # x est égal à y (deux signes « égale » et non d'un seul)
x != y # x est différent de y
x>y # x est plus grand que y
x<y # x est plus petit que y
x >= y # x est plus grand que, ou égal à y
x <= y # x est plus petit que, ou égal à y
Exemple :
>>> a = 7
>>> if (a % 2 == 0):
print ("a est pair")
print ("parce que le reste de sa division par 2 est
nul")
else:
print ("a est impair")
12
Répétitions en boucle
L'instruction while
L'une des tâches que les machines font le mieux est la répétition sans
erreur de tâches identiques !
>>> a = 0
>>> while (a < 7): # (n'oubliez pas le double point !)
a = a + 1 # (n'oubliez pas l'indentation /alignement!)
a
3. Que se passe-t-il ?
>>> a = 0
>>> while (a < 7): # (n'oubliez pas le double point !)
... a = a + 1 # (n'oubliez pas l'indentation !)
...a
Commentaires
1. Dans notre exemple, si la condition a < 7 est encore vraie, le corps de la boucle est exécuté une
nouvelle fois et le bouclage se poursuit.
2. La variable évaluée dans la condition doit exister au préalable (Il faut qu'on lui ait déjà affecté au
moins une valeur)
3. Si la condition est fausse au départ, le corps de la boucle n'est jamais exécuté
4. Si la condition reste toujours vraie, alors le corps de la boucle est répété indéfiniment.
>>> n = 3
>>> while n < 5:
"hello !"
13
Répétitions en boucle
L'instruction for
entête
for <variable> in range(<nombre de repetitions>):
<instruction1>
< instruction2>
… corps
< instructionn>
x=0
While (x<3):
print('Hello!')
print (x)
x=x+1
14
>>> for i in range(0,10):
print (i)
Exercice
Écrire un programme qui affiche les 3 premiers termes de la table
de multiplication par 7.
15
Les fonctions en
Python
16
Fonctions sans paramètre
>>> def table7():
n=1
while n <11 :
print (n * 7)
n = n+1
Pour utiliser la fonction que nous venons de définir, il suffit de l'appeler par
son nom. Ainsi :
>>> table7()
Provoque l'affichage de :
7 14 21 28 35 42 49 56 63 70
17
Exercice
Écrivez un programme qui contient une fonction carre qui calcule
le carré d’un nombre envoyé comme paramètre.
18
Exercice
Écrivez un programme qui contient une fonction addition qui
calcule la somme de deux nombres envoyés comme paramètre.
19
>>> def cube(n):
return n**3
>>> def volumeSphere(r):
return 4 * 3.1416 * cube(r) / 3
Listes et dictionnaires
20
Listes
Une liste : une collection d'éléments séparés par des virgules, l'ensemble étant
enfermé dans des crochets.
Exemple :
>>> jour = ['lundi', 'mardi', 'mercredi', 100, 20.3]
>>> print (jour)
['lundi', 'mardi', 'mercredi', 100, 20.3]
Exemple :
>>> jour = ['lundi', 'mardi', 'mercredi', 100, 20.3]
>>> print (jour[2])
mercredi
>>> print (jour[4])
20.3
21
Exercice
Analyser le script ci-dessous et commenter son fonctionnement :
>>>jour =
['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi']
>>> a = 0
while a<7:
print (a , jour[a])
a=a+1
Exercice
Définissez une fonction listeMax(liste) qui renvoie
l'élément ayant la valeur la plus élevée dans la liste
transmise en argument.
Exemple d'utilisation :
serie = [5, 8, 2, 1, 9, 3, 6, 7]
listeMax(serie )
renvoie
9
22
Exercice
Définissez une fonction remplirListe(liste, n) qui
reçoit une liste vide et un entier n, et renvoie cette
liste remplie avec n entiers introduits par l’utilisateur.
Exemple d'utilisation :
>>> serie = []
>>> remplirListe(serie, 3)
renvoie
[3, 5, 7]
23
Exercice
Définissez une fonction indiceMax(liste) qui
renvoie l’indice de l'élément ayant la valeur la plus
élevée dans la liste remplie par l’utilisateur.
Exemple d'utilisation :
serie = [5, 8, 2, 1, 9, 3, 6, 7]
indexMax(serie )
renvoie
4
Dictionnaire
• Un dictionnaire permet de stocker des
paires appelées éléments.
{ 'Cle1' : 'valeur1', 'Cle2' : 'valeur2'}
• Chaque paire d'entrées contient : une clé
et une valeur
• La clé doit être unique dans le
dictionnaire.
24
my_dict = {'nom':'Mariem', 'age': 26}
my_dict ['nom'] est 'Mariem' . my_dict
['age'] est 26
• voiture= {
“marque": "Ford",
"modele": "Mustang",
“annee": 1964
}
# supprimer un element
del my_dict ['address']
25
my_dict.items() # renvoyer les elements
my_dict.keys() # renvoyer les cles
my_dict.values() # renvoyer les valeur
Exercise
• Créez trois dictionnaires contenant chacun
deux clés nom, annee. Puis créez un
dictionnaire qui contient les trois autres
dictionnaires.
26
Solution
• child1 = {"nom":"Sarra","annee":2004 }
child2 = {"nom":"Ali","annee":2002 }
child3 = {"nom":"Fatma","annee":2000 }
myfamily = {
"ch1" : child1,
"ch2" : child2,
"ch3" : child3
}
La programmation
Orientée Objet dans
Python
27
La programmation Orientée
Objet (POO) dans Python
• Il y plusieurs types de base en Python (int, float, str,
etc.).
• La notion de classe permet d’entendre la notion de «
type » en créant de nouvelles structures/types de
données (les classes).
• Une classe contient des attributs et des méthodes.
– Exemple, une classe voiture peut être caractérisée par
un attribut couleur, un attribut vitesse, etc. La classe
Voiture pourra également définir une méthode rouler().
28
POO - Définition des attributs
>>> class Point:
"c’est une classe"
>>> p = Point()
>>> p.x = 1
>>> p.y = 2
>>> print("p : x =", p.x, "y =", p.y)
29
POO - Définition des methodes
class Point:
def deplace(self, dx, dy):
self.x = self.x + dx
self.y = self.y + dy
30
POO- La notion de constructeur
>>> class Point:
def __init__(self):
self.x = 0
self.y = 0
>>> a = Point()
>>> print("a : x =", a.x, "y =", a.y)
>>> a.x = 1
>>> a.y = 2
>>> print("a : x =", a.x, "y =", a.y)
class Point:
def __init__(self, abs, ord):
self.x = abs
self.y = ord
a = Point(1, 2)
print("a : x =", a.x, "y =", a.y)
31
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
a = Point(1, 2)
print("a : x =", a.x, "y =", a.y)
POO - exemple
>>> class Point:
def __init__(self, abs, ord):
self.x = abs
self.y = ord
def deplace(self, dx, dy):
self.x = self.x + dx
self.y = self.y + dy
32
>>> a = Point(1, 2)
>>> b = Point(3, 4)
>>> print("a : x =", a.x, "y =", a.y)
>>> print("b : x =", b.x, "y =", b.y)
>>> a.deplace(3, 5)
>>> b.deplace(-1, -2)
>>> print("a : x =", a.x, "y =", a.y)
>>> print("b : x =", b.x, "y =", b.y)
Methode statique
Une méthode statique peut être appelée sans créer d’objet/instance.
class Music:
@staticmethod
def play():
print("*playing music*")
def stop(self):
print("stop playing")
m = Music()
Music.play()
Music.stop() # Erreur. On doit creer un objet
# -------------------------- solution :
m.stop()
33
II- Programmation
SIG - Python
1
Les packages/modules Python
• Packages liés à un SIG
– ArcPy pour ArcGIS
– PyQGIS pour QGIS
• Packages indépendants des SIG (exemples :
Geopandas, pyproj, Rasterio)
Quelques packages/modules
• GDAL : Geospatial Data Abstraction Library (GDAL) / OGR combine deux modules
distinctes qui sont généralement téléchargées ensemble en tant que GDAL.
– GDAL est largement utilisée pour les données raster. Elle permet la lecture et l'écriture de nombreux formats de
fichiers raster.
– La bibliothèque OGR est utilisée pour lire et écrire des données vectorielles ( plusieurs formats tel que le .shp).
• NumPy est un package analytique basé sur des vecteurs (tableaux) et des matrices.
2
Installation des packages
• Python bénéficie d’une communauté active d'intervenants qui développent des
programmes/modules qui peuvent être réutilisés par d’autres développeurs Python.
• pip est l’outil d’installation. À partir de Python 3.4, il est inclus par défaut avec
l’installateur de Python.
• La commande suivante installe la dernière version d’un module et ses dépendances (en
principe) :
• python -m pip install unPackage
Traitement de données
vectorielles
Sections :
1. Le package Geopandas
2. Lire des données vectorielles
3.Sélecter et itérer sur des données vectorielles
4.Créer une nouvelle colonne
5. Créer un shapefile à partir d’un autre
6. Autres traitements sur les données vectorielles :
- regrouper les données vectorielles.
- établir une zone tampon (Buffer).
3
Traitement de données vectorielles
Geopandas
1- le package Geopandas
• Geopandas est un package Python construit au-dessus du package Pandas (package
d'analyse de données non-spatiales).
• Geopandas permet de traiter des données géospatiales stockées par exemple dans un
Shapefile ou dans une base de données PostGIS.
• Geopandas possède plusieurs fonctionnalités de traitement/analyse spatiale telles que
l'analyse de superposition (overlay), le géocodage, l'agrégation spatiale et les jointures
attributaires/spatiales.
# Aficher le type de data on a associer le fichier par un objet qui est data
print (type(data))
Résultat : geopandas.geodataframe.GeoDataFrame
4
Traitement de données vectorielles
• Geopandas peut également charger des données directement à partir d'un URL :
import geopandas
url = "http://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_110m_land.geojson"
df = geopandas.read_file(url)
zipfile = "zip://C:/Users/……/cb_2017_us_state_500k.zip"
states = geopandas.read_file(zipfile)
• S'il y a plusieurs données dans un dossier du fichier ZIP, vous devez également spécifier
le nom du fichier:
zipfilefd = "zip://C:/Users/……../cb_2017_us_state_500k-
2.zip!data/cb_2017_us_state_500k.shp"
statesfd = geopandas.read_file(zipfilefd)
# si plusieurs donnees directement dans le .zip (et pas dans un dossier dans le .zip)
zipfilef =
"zip://C:/Users/……./cb_2017_us_state_500k.zip/cb_2017_us_state_500k.shp"
statesf = geopandas.read_file(zipfilef)
5
comment cree un objet:
objet nom de l objet
nom de la classe() parametre init
• La fonction .plot () de geopandas crée une carte simple à partir des données :
print (data.head())
Résultat :
ID_NO ... geometry
0 183963.0 ... POLYGON ((-115.64375 29.71392, -115.61585 29.6...
1 183963.0 ... POLYGON ((-105.58995 21.89340, -105.56483 21.8...
2 183963.0 ... POLYGON ((-111.15962 19.01536, -111.15948 18.9...
3 183793.0 ... POLYGON ((-80.86500 -0.77894, -80.75930 -0.833...
4 183793.0 ... POLYGON ((-67.33922 -55.67610, -67.33755 -55.6...
6
Traitement de données vectorielles
Afficher le système de coordonnées (CRS)
print(data.crs)
Résultat :
epsg:4326 ….
• Les géométries sont stockées dans une colonne appelée geometry qui est un nom de la
colonne par défaut pour stocker les données géométriques dans geopandas.
# Il est possible de spécifier uniquement des colonnes spécifiques en indiquant le nom de la colonne
entre crochets []
print (data['geometry'].head())
Résultat :
0 POLYGON ((-115.6437454219999 29.71392059300007...
1 POLYGON ((-105.589950704 21.89339825500002, -1...
2 POLYGON ((-111.159618439 19.01535626700007, -1...
3 POLYGON ((-80.86500229899997 -0.77894492099994...
4 POLYGON ((-67.33922225599997 -55.6761029239999...
Name: geometry, dtype: object