python - Département des Sciences de la Terre

publicité
Programmation sous Python
L3 Sciences de la Terre
Julia Pfeffer, Marine Lasbleis
Monitrices et ATER à l’Ecole Nationale Supérieure de Lyon
Automne 2012
Contact: [email protected]
Pourquoi Python?

Clarté du langage et élégance de la syntaxe → facilité de
compréhension et de relecture des programmes

C'est un langage orienté objet, actuellement le paradigme
de programmation le plus répandu

C'est un langage interprété → mise en œuvre est très
simple.

L'interpréteur, le logiciel qui permet à vos programmes de
s'exécuter, est un logiciel libre, gratuit, et multiplateforme!

Langage moderne et développement très rapide

Il est assez plaisant car de « haut niveau ».
Pour résumer …
Ressources utiles
Official Python website (www.python. org)
 Official SciPy website (www.scipy.org)
 Official Matplotlib website (www.matplotlib.org)
 Online lectures for scientific computing
(www.scipy-lectures.github.com)
 Online lectures for figures publication
(www.loria.fr/~rougier/teaching/matplotlib)

Let’s get started …

Installation sur votre ordinateur
◦ Sous Linux, l’interpréteur python est très
souvent installé par défaut … pour vérifier
python –V
◦ Sous Windows, l’installation devrait être très
facile via le site officiel de Python 
Premières instructions avec Python

Accéder à l’interpréteur: python vs ipython
Premières instructions avec Python

Ce que vous avez appris sous bash marche
toujours!
◦ Se repérer dans l’arborescence: ls et pwd
◦ Complétion automatique:
◦ Historique:
◦ Quelle est la dernière commande que vous avez
tapée commençant par l?

Quelques nouveautés
◦ Les commentaires sont précédés de #
◦ Aide: help () ou ?
◦ Que fait la fonction pow?
Premières instruction avec Python

C’est bon? Essayez les commandes:
◦ 2+3
◦ 5.95 * 6.55957
◦ print « Hello! »
Les opérateurs Python

Python peut être utilisé comme une calculatrice ;

Pour effectuer une addition, on l'écrit naturellement,
en utilisant l'opérateur + ;

Les nombres décimaux sont notés à l'anglaise, en
utilisant le point plutôt que notre virgule ;

La multiplication est effectuée par l'opérateur *
(l'étoile, ou astérisque) ;

On peut insérer ou non à loisir des espaces entre les
valeurs et l'opérateur.

Les chaînes de caractères, sont délimitées par le
caractère guillemet " (ou double-quote)
Les opérateurs Python
Commande
Nom
Exemple
Résultat
+
Addition
4+5
9
-
Soustraction
8-5
3
*
Multiplication
4*5
20
/
Division
19/3
6
%
Reste
19%3
1
**
Exposant
2**4
16
L’ordre de ses opérations est le même sous Python qu’en maths:
1. Parenthèses ()
2. Exposants **
3. Multiplication *, division /, et reste %
4. Addition + et soustraction -
Ecrire un script


Les programmes sont de simples documents texte!
Ils se terminent par .py

Exemple:
◦ Ouvrez IDLE > file > New Window
#A simple program.
print "Mary had a little lamb,"
print "it's fleece was white as snow;"
print "and everywhere that Mary went",
print "her lamb was sure to go”
◦ Save as Mary.py
◦ Run > Run module ou F5
Les variables
Exemple de code – Les variables
#variables demonstrated
print "This program is a demo of variables"
v = 1
print "The value of v is now", v
v = v + 1
print "v now equals itself plus one, making it worth", v
v = 51
print "v can store any numerical value, to be used
elsewhere."
print "for example, in a sentence. v is now worth", v
print "v times 5 equals", v*5
print "but v still only remains", v
print "to make v five times bigger, you would have to
type v = v * 5", v = v * 5
print "there you go, now v equals", v, "and not", v / 5
Les variables

Une variable possède un type, qui précise la
nature de l'information qu'elle peut contenir.

Testez:
>>> x = 1
>>> print type(x)

type() est une fonction. Le rôle de cette fonction
est de donner le type du paramètre entre
parenthèses.

Testez:
>>> x = 3.14
>>> print type(x)
Les chaînes de caractère

Les variables peuvent aussi contenir des chaînes de
caractères placées entre « »

La chaîne est considérée comme un tableau. L'utilisation
des crochets [ ] nous permet d'indiquer l’élément à
sélectionner. Le nombre donné entre les crochets est
appelé l'indice de l'élément voulu.

Par convention, les indices commencent à 0.

Il est possible de donner des indices négatifs, la
numérotation commence alors par la fin.

Les chaînes de caractères s’assemblent avec des virgules ,
ou avec le signe +
Les chaînes de caractère
Exercice
Soit s la chaîne «Bonjour monde!»
- Faites un script qui permet d'insérer la chaîne «tous le»
dans s entre «bonjour» et «monde»
- Afficher s
- Corriger le «tous» en «tout» et réafficher la chaîne
Les chaînes de caractère
Exercice
Soit s la chaîne «Bonjour monde!»
- Faites un script qui permet d'insérer la chaîne «tous le»
dans s entre «bonjour» et «monde»
- Afficher s
- Corriger le «tous» en «tout» et réafficher la chaîne
s="Bonjour monde!"
s1=s[0:7]; s2=" tous le "; s3=s[8:14]
S=s1+s2+s3
print S
S=S[0:11]+"t"+S[12:22]
print S
Les boucles

Les instructions contenues par exemple dans une
boucle constituent un bloc d'instructions

En python un bloc est défini par une indentation
similaire pour une suite d'instructions.
# cheerleading program
word = raw_input("Who do you go for? ")
Fin de la
boucle
for letter in word:
call = "Gimme a " + letter + "!"
print call
print letter + "!"
print "What does that spell?"
print word + "!"
Les fonctions

Les fonctions sont des mini-programmes qui évitent de
répéter une séquence d'instructions.
function_name(parameters)
>> Testez les fonctions range () et len ()

Vous pouvez définir votre propre fonction à l’aide du
mot clef def:
>>def function_name(parameter_1,parameter_2):
{this is the code in the function}
{more code}
{more code}
return {value to return to the ma put ":" at the in
program}
{this code isn't in the function because it isn't indented}
#remember to end the line that starts with ‘def’ with ‘:’
Les fonctions

L'idée consiste à définir des fonctions qui font ce pour quoi
elles ont été créées, mais pas plus. Notre fonction calcule une
chaîne de caractères mais ce n'est pas son rôle de l'afficher.

Il nous faut donc un moyen pour « récupérer » ce que la fonction
aura produit. On dit alors que la fonction va renvoyer un
résultat, ce résultat étant la valeur de retour de la fonction.
def somme(var1, var2) :
resultat = var1 + var2
return resultat
ma_variable = somme (2,3)
print ma_variable


« resultat » est une variable
locale
Dans le programme principal, la
valeur de retour de la fonction
est stockée dans «ma_variable»
Listes et multiplets (« tupples »)

Les listes sont ce qu’elles semblent être des listes de
valeurs. Chacune est numérotée en partant de 0.
>> cats = ['Tom', 'Snappy', 'Kitty', 'Jessie', 'Chester']
>> print cats[2]

Vous pouvez ajouter ou enlever des valeurs à la liste.
>> cats.append('Catherine')
>> del cats[1]

Les multiplets sont comme des listes mais vous ne
pouvez pas modifier leur valeur.
>> months=('January','February','March','April','May','June',\
'July','August','September','October','November',' December')
Programmer en sciences

Installer les packages suivants
◦ Numpy et Scipy: calcul scientifique
◦ Matplotlib: publication de figures

Les importer au début de chaque script!
>> import numpy as np
>> import scipy as sp
>> import matplotlib as plt

Il est possible de les importer avec cette syntaxe, au
risque de générer des instabilités dans le programme!
>> from numpy import *
>> from scipy import *
>> from matplotlib import *
Le tableau: l’outil de base du calcul
scientifique

Manipulation fréquente d’ensembles ordonnés
discrets :
◦ temps discrétisé d’une expérience/simulation
◦ signal enregistré par un appareil de mesure
◦ pixels d’une image, ...

Le module Numpy permet de:
◦ créer d’un coup ces ensembles de données
◦ réaliser des opérations en “batch” sur les tableaux de
données (pas de boucle sur les éléments).
Tableau de données = numpy.ndarray
La création de tableaux Numpy

Un exemple pour commencer:
>>> import numpy as np
>>> a = np.array([0, 1, 2])
>>> b = np.array([[0., 1.], [2., 3.]])
Essayez de taper a et print a …
 Quelle différence?

La création de tableaux Numpy

Dans la pratique on rentre rarement les
éléments un par un …
◦ Valeurs espacées régulièrement: arange(début, fin, saut)
>>> import numpy as np
>>> a = np.arange(10)
>>> b = np.arange(1., 9., 2)
◦ On peut obtenir le même résultat en spécifiant le nombre
de points: linspace (début, fin, nb de valeurs)
>>> c = np.linspace(0, 1, 6)
>>> d = np.linspace(0, 1, 5, endpoint=False)
La création de tableaux numpy

Quelques fonctions utiles pour créer des
tableaux:
◦
◦
◦
◦

ones ()
zeros ()
eye ()
dtype ()
Essayez!
Indexage

On peut accéder aux éléments des tableaux
Numpy (indexer) d’une manière similaire que pour
les autres séquences Python (list, tuple)
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a[0], a[2], a[-1]
(0, 2, 9)

Attention ! L’indexage commence à partir de 0,
comme pour les autres séquences Python (et
comme en C/C++). En Fortran ou Matlab,
l’indexage commence à 1.
Tableaux multidimensionnels
• Pour les tableaux multidimensionnels, l’indice d’un
élément est donné par un n-uplet d’entiers
>>> a = np.diag(np.arange(5))
>>>a
array([[0, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 2, 0, 0],
[0, 0, 0, 3, 0],
[0, 0, 0, 0, 4]])
>>> a[1,1]
>>> a[2,1] = 10 # deuxième ligne, première colonne
>>> a
>>> a[1] # première ligne
Slicing

Comme l’indexage, similaire au slicing des autres
séquences Python:
>>> a = np.arange(10)
>>> a[2:9:3] # [début:fin:pas]

Attention, le dernier indice n’est pas inclus
>>> a[:4]

On n’est pas obligé de spécifier à la fois le début
(indice 0 par défaut), la fin (dernier indice par défaut)
et le pas (1 par défaut):
>>> a[1:3]# pas = 1
>>> a[::2]# début = 0, fin = 10
>>> a[3:] # fin=10, pas=1
En résumé …
Opérations sur les tableaux
x.max()
max(x)
x.min()
min(x)
x.std()
std(x)
x.mean()
mean(x)
x1=x.copy()
x1=copy(x)
x-=x.mean()
x-=mean(x)
#equivalent with x=x-x.mean()
#equivalent with x=x-mean(x)
First and last 10 entries of an array
x = np.random.random(100)
x[:10]
x[-100:]
x[2:5]
La représentation graphique des
données avec matplotlib

Maintenant que nous avons nos premiers
tableaux de données, nous allons les
visualiser 

Matplotlib est un package de plot 2-D, on
importe ces fonctions de la manière suivante
>>> import pylab as py
Tracé de courbes 1-D
>>> a = np.arange(20)
>>> py.plot(a, a**2)
>>> py.plot(a, a**2, 'o') # figurés ronds
>>> py.show
>>> py.clf() # clear figure
>>> py.loglog(a, a**2)
>>> py.xlabel('x') # un peu petit
>>> py.xlabel('x', fontsize=26) # plus gros
>>> py.ylabel('y')
>>> py.grid()
>>> py.axvline(2)
>>> py.show ()
Tracé de courbes 1-D
Tableaux 2D
>>> # Tableaux 30x30 de nombres aleatoires entre 0 et 1
>>> image = np.random.rand(30,30)
>>> py.imshow(image)
>>> py.gray()
>>> py.hot()
>>> py.imshow(image, cmap=cm.gray)
>>> py.axis('off') # on enlève les ticks et les labels
Téléchargement