Presentation Python
Presentation Python
aérospatial de Polytechnique
KOJTYCH Python 3 :
calcul scientifique
et manipulation de données
Solène Kojtych
Hiver 2020
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
I Mon expérience :
KOJTYCH
logiciel de CAO et maillage Salomé possédait une
interface Python
2016 maîtrise puis doctorat à Polytechnique : Python est le
langage pour le calcul scientifique au laboratoire
1 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Retours d’expérience
disponibles »
KOJTYCH
I « communauté active sur internet et ressources facilement
2 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
I facile à prendre en main de par sa syntaxe simple
I hybride : orienté objet mais utilisable facilement en procédural,
gestion de la mémoire automatique
I gratuit et open-source : le code de chaque fonction peut être
consulté (et compris !)
I interprété : ne nécessite pas de compilation pour être exécuté
I utilisations principales : langage de script (automatisation),
calcul scientifique, prototypage d’applications
1. https ://insights.stackoverflow.com/survey/2019
3 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Un bref aperçu...
KOJTYCH
graphique
analyse de données
KOJTYCH
• présentation avec matériel supplémentaire en annexe
• codes python enrichis pour le notebook jupyter
I structure
• petits blocs relatifs à une problématique
• atelier interactif : vous pourrez compléter/exécuter les codes en
même temps que moi
1 Installation
2 Éléments de syntaxe
KOJTYCH
3 Python pour le calcul scientifique
5 Conclusion
6 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Sommaire
1 Installation
2 Éléments de syntaxe
KOJTYCH
3 Python pour le calcul scientifique
5 Conclusion
7 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Où trouver de l’aide ? 1
I forum d’entraide
KOJTYCH
« Si je me pose une question, il est "extrêmement"
(doux euphémisme) probable qu’un autre être humain
se la soit déjà posée, donc je visite sagement
https://stackoverflow.com/ »
• je peux même oser poser une nouvelle question !
I révision (ou découverte) des concepts algorithmiques
http://www.france-ioi.org/
3
KOJTYCH
(Command Line) (ou taper python dans le terminal Anaconda)
• Mac : Applications>Python>IDLE
tester l’interpréteur : entrer 5+13 puis entrée
8 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
• Spyder : interface semblable à Matlab, PyCharm : plus adapté aux
gros projets de développements, gère les versions, etc...
9 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
notebook Jupyter
10 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Tout cet atelier est basé sur Python 3 qui n’est pas
vraiment rétro-compatible avec Python 2
1. https://www.anaconda.com/distribution/
11 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
4
KOJTYCH
• ouvrir code > notebook_jupyter > notebook_atelier.ipynb
• Fichier > Faire une copie (backup !)
utiliser le notebook
• exécution du code en cliquant sur la section (bord bleu) puis Run
• double-clic pour modifier une section (bord vert)
• si vous éditez par mégarde une cellule de texte en Markdown :
shift + enter pour quitter l’édition
• Aide > Raccourcis clavier
• sauvegarder régulièrement : Fichier > Créer une nouvelle
sauvegarde
• complétion automatique avec la touche : tab
12 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Sommaire
1 Installation
2 Éléments de syntaxe
KOJTYCH
3 Python pour le calcul scientifique
5 Conclusion
13 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
# Déclaration de variables x et y entiers positifs
# Affichage de la somme
# Affichage de la somme
13 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Déclaration de variables
KOJTYCH
print("x = {}, X = {}".format(x, X))
Opérations de base
KOJTYCH
# Division entiere
# Modulo
# Conversions de type
type_variable = type(chaine) # renvoie le type de la variable
chaine = "9.6"
nombre = float(chaine) # de chaine vers reel/entier
# nombre = int(entier)
chaine = str(entier) # de reel/entier vers chaine
16 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Tableaux
KOJTYCH
# listes et indices (commence à0)
liste = [5, 6, 8, ’a’] # peuvent contenir des éléments de types différents
print(liste[0], liste[3]) # renvoie le premier et dernier élément
liste[-1] = 2
l’avant-dernier...)
# remplace le dernier élément (-2 serait
17 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
x = 12
# tests logiques
condition1 = (x > 10) # condition est un booléen valant True ici
not(condition1) # négation d’une condition, équivaut àx<=10
x <= 10 # inégalité large
x == 10
x != 10
# conditions
condition2 =
condition1 &
KOJTYCH
# égalité
# non égalité
de plusieurs propositions
(x < 15)
condition2 # (x>10) ET (x<15), se note aussi "and"
condition1 | condition2 # (x>10) OU (x<15), se note aussi "or"
18 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Structures conditionnelles
x = 5
# Condition
if(x > 7):
print("x > 7")
elif(x < 7):
print("x < 7")
else:
print("x = 7")
19 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Fonctions
# création de fonction
def f(u): # def est le mot réservé pour déclarer des fonctions
’’’cette fonction renvoie 5+ max(u,0).
(ceci est un commentaire sur plusieurs lignes) !’’’
KOJTYCH
v = 5 + max(u, 0)
return v
# appel de la fonction
x = -5
y = f(x)
# return est le mot réservé pour renvoyer le résultat
print(y)
I les variables créées dans une fonction ont une portée locale
20 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
21 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
def f():
KOJTYCH
# je veux modifier la variable globale "a"
global a # j’indique que "a" se réfère au niveau global
a = 20
print(a)
# print(locals()) # on n’a pas de variable globale
# print(globals()) # on a bien a variable globale
f()
print(a)
22 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Dictionnaires
KOJTYCH
# ou directement avec des couples clés - valeurs
23 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Ensembles
KOJTYCH
ensemble_C = set("Monty Python’s Flying Circus") # lettres uniques
for element in ensemble_A:
print(element) # on peut boucler aussi bien sur les ensembles
# Opérateurs ensemblistes
ensemble_A.union(ensemble_B) # A union B
ensemble_A.intersection(ensemble_B) # A inter B
ensemble_A.difference(ensemble_B) # A sans B
24 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
25 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
# Options d’importation
import math # importe tous les objets comme math.objet
print(math.pi)
import math as mt # en général on utilise un alias
print(pi) KOJTYCH
from math import pi # importe l’objet dans l’espace de nom courant
# plus besoin de l’antécédent math
# peut interférer avec des fonctions du même nom déjà définies
from math import * # tous les noms de fonctions importés , assez lourd
26 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
I le code est « plus fait pour être lu que pour être écrit »
→ recommandations PEP8 1
• principes : import des modules en début de script, espace autour
des opérandes, maximum 79 caractères par lignes...
• un bon IDE permet de prendre en compte le PEP8 efficacement !
I commenter !
1. https://www.python.org/dev/peps/pep-0008/
27 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Récapitulatif de la partie I
KOJTYCH
• conditions (if) et boucles (for, while)
• structure de données : tableaux(listes), dictionnaires, ensembles
I à retenir
• commande help(objet)
• module math pour les opérations mathématiques
28 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Sommaire
1 Installation
2 Éléments de syntaxe
KOJTYCH
3 Python pour le calcul scientifique
5 Conclusion
29 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
# Déclaration d’un vecteur sin(2pi*temps)
# Représentation graphique
# Affichage de la dérivée
29 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
# Déclaration d’un vecteur sin(2pi*temps)
sinusoide = np.sin(2*mt.pi*temps)
# Représentation graphique
plt.figure()
plt.plot(temps, sinusoide)
30 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
import cmath # module pour les opérations sur des nombres complexes
import math as mt # module pour opérations mathématiques
# Nombres complexes (type complex)
# en coordonnées cartésiennes
z1 = 4+3j # j est la notation du nombre imaginaire
z2 = complex(4, 3) # z1=z2
KOJTYCH
print(" {} a pour partie reelle {} et pour partie imaginaire {}".format
(z1, z1.real, z1.imag))
# une commande peut aller sous plusieurs lignes ainsi si a (), {} ou []
print(z2.real)
# en coordonnées polaires
module, phase = cmath.polar(z1) # phase en radian
# Fonctions du module math => dir(mt)
racine = mt.sqrt(2) # racine(2)
mt.factorial(5) # 5!
mt.cos(mt.pi/2) # cos(pi/2)
31 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Vecteurs et matrices - 1
c
a
b
KOJTYCH
import numpy as np # module de calcul matriciel et vectorisation
# Création de vecteurs
= np.zeros([2])
= np.array([2,3,4])
= np.ones([3])
# vecteur nul de 2 termes
# vecteur de 1 à3 termes
d = np.arange(1,10,1.5) # vecteur de 1 à10 par pas de 2.5
e = np.linspace(1,10,25) # vecteur de 25 valeurs réparties de 1 à10
# Indexage commence à0 (identique aux listes)
print("Le premier élément de {} est {}".format(a,a[0]))
32 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Vecteurs et matrices - 2
I création de matrices
# Création de matrices
g = np.ones([2, 3]) # matrice 2 par 3
k = np.diag(a) # matrice avec vecteur a sur la diagonale
f = np.array([[2, 3, 4],
[7, 1, 6]]) # matrice 2 lignes par 3 colonnes
h = np.array([[[111, 112], # matrice de dimension 3
[121, 122]], # h a trois indices : i,j,k
KOJTYCH
[[211, 212],
[221, 222]]])
# ASTUCE DE LECTURE :
# les colonnes correspondent àla variation du dernier indice,
# les lignes correspondent àla variation de l’avant-dernier indice,
# les blancs séparent les autres indices
Id = np.eye(3) # matrice identité de taille 4x4
l = np.zeros((3, 4, 5))
# Indexage de matrices
f[0, 2] # élément indice i=0,j=2
f[0] # première ligne, peut s’écrire f[0,:]
# conseil : plus lisible de faire apparaitre les deux indices pour matrices
f[:, 1] # deuxième colonne
h[0, 0, 1] # élément aux indice i=0,j=0,k=1
h[1, 0, 1] # quel élément est renvoyé ici ?
f[0:2, 1] # sous matrice : ligne 0 à2 non incluse, colonne 1
33 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Vecteurs et matrices - 3
KOJTYCH
taille = a.shape # vecteur sont des colonnes par défaut
taille = f.shape # taille dans chaque dimension
# Opération sur vecteurs de même taille
a - b # addition terme àterme
a * b # multiplication terme àterme
a/b # division terme àterme
a**b # puissance terme àterme...
np.dot(a, b) # produit scalaire
np.cross(a, b) # produit vectoriel
34 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Vecteurs et matrices - 4
f + g
f*g
f/g
f**g
KOJTYCH
# Opérations sur matrices de même taille
# addition terme àterme
# multiplication terme àterme
# division terme àterme
# puissance terme àterme
np.dot(g, a) # produit matriciel de g par a (vecteur)
np.dot(f, g.transpose()) # produit matriciel de f par g transposée
35 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
I privilégier les opérations sur les vecteurs plutôt que les boucles
pour diminuer les temps de calcul
# Fonctions dédiées pour vecteurs
np.cos(a) # applique cos àchaque terme du vecteur a
KOJTYCH
valeur_min = np.min(a)
indice_min = np.argmin(a)
# valeur min le long d’un axe (0 par défaut)
36 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
37 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
# calcul de l’inverse
inverse_M = np.linalg.inv(M)
KOJTYCH
np.allclose(np.dot(M, inverse_M), Id) # on compare le produit matriciel de M
# et son inverse àla matrice identité
# stockage éventuel de la factorisation de M pour réutilisation avec diff b
# M = P L U (P : permutation, L :triangulaire inf, U : triangulaire sup)
matrice_LU, indices_pivot = scipy.linalg.lu_factor(M)
b = np.array([1, 2, 3])
x = scipy.linalg.lu_solve((matrice_LU, indices_pivot), b)
np.allclose(np.dot(M, x), b)
38 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Graphiques - 1
I graphique 2D
import matplotlib.pyplot as plt # module graphique
import math as mt
import numpy as np
# Données
t = np.arange(0, 3, 0.001) # vecteur temps
f0 = 2 # frequence Hz
KOJTYCH
signal1 = np.cos(2*mt.pi*f0*t) # sinusoide de frequence f0
signal2 = 2*np.cos(2*mt.pi*0.5*f0*t+0.5*mt.pi)
# Courbes
plt.figure()
plt.plot(t, signal1, label="$\cos(2\pi*{}*t)$".format(f0))
plt.plot(t, signal2, ’r--’, label="$\cos(\pi*{}*t +0.25\pi)$".format(f0))
# la legende peut être écrite en latex
# Mise en forme
plt.legend() # ajoute la légende
plt.xlabel("temps (s)")
plt.ylabel("signal normalisé")
plt.title("Sublime graphe avec pyplot")
plt.show() # affiche le graphe
plt.savefig(’ma_sublime_figure.png’) # sauvegarde
#plt.close() # pour fermer toutes les figures : plt.close(’all’)
39 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Graphiques - 2
I sortie obtenue
KOJTYCH
Graphiques - 3
I sous-graphiques
# Sous graphes : chacun a son système d’axes
fig = plt.figure()
ax1 = fig.add_subplot(121) # 1 ligne - 2 colonnes - axe du graphe 1
ax1.plot(t, signal1, label="$\cos({} x)$".format(f0))
ax2 = fig.add_subplot(122) # 1 ligne - 2 colonnes - axe du graphe 1
signal3 = np.exp(2*t)
ax2.plot(t, signal3, color=’r’, linestyle=’--’, label="$\cos({} x)$"
KOJTYCH
.format(f0))
ax2.set_yscale(’log’) # echelle logarithmique
plt.show()
I sortie obtenue
deux sous-graphiques 41 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Graphiques - 4
# Figure
KOJTYCH
pos_groupes = np.arange(1, 6) # positions des différents groupes sur axe des x
largeur_barres = 0.35
42 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Graphiques - 5
I sortie
KOJTYCH
histogramme
43 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Graphiques - 6
I graphique 3D
from mpl_toolkits.mplot3d import axes3d # module pour graphes 3D
from matplotlib import cm # color map
# Données
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y) # maillage en fonction de x y
KOJTYCH
Z = np.sin(X)*np.sin(Y) # fonction analytique
# Représentation 3D
figure3D = plt.figure()
ax = figure3D.add_subplot(111, projection=’3d’)
# Filaire
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10, color=’#F68712’)
# ou Surface
# ax.plot_surface(X, Y, Z, rstride=5, cstride=8, alpha=0.3, cmap=cm.viridis,
# linewidth=0, antialiased=False)
# help(ax.plot_surface) pour les arguments
# Courbes de niveau
ax.set_xlim(-4, 4)
ax.set_zlim(-1.5, 1)
#contourZ = ax.contourf(X, Y, Z, zdir=’z’, offset=-1.5, cmap=cm.viridis)
#contourX = ax.contourf(X, Y, Z, zdir=’x’, offset=-4, cmap=cm.viridis)
plt.show()
44 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Graphiques - 7
I sorties
KOJTYCH
avec la fonction plot_wireframe avec les fonctions plot_surface et
contourf
45 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Graphiques - 8
I animation
import matplotlib.animation as animation
# Fonction de rotation par rapport àun angle
def rotate(angle):
ax.view_init(azim=angle, elev=15)
KOJTYCH
# Création de l’animation
rot_animation = animation.FuncAnimation(figure3D, rotate,
frames=np.arange(0, 362, 5),
interval=200)
#interval : vitesse du gif, frames : discrétisation des rotations
# Sauvegarde
rot_animation.save(’rotation.mpg’, dpi=80, writer=’imagemagick’)
# quelques extensions possibles: mp4, mpg, gif
# Affichage dans le notebook jupyter (prend un certain temps)
from IPython.display import HTML
HTML(rot_animation.to_html5_video())
46 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
I interpolation polynomiale
from scipy.interpolate import interp1d
import numpy as np
import matplotlib.pyplot as plt
# Points de données
KOJTYCH
temps = np.linspace(0, 45, num=10, endpoint=True) # en secondes
vitesse = np.array([55, 60, 58, 54, 55, 60, 54, 57, 52, 49]) # en km/h
vitesse = vitesse * (1000/3600) # conversion en m/s
# Interpolation
f1 = interp1d(temps, vitesse) # c’est une fonction
f2 = interp1d(temps, vitesse, kind=’quadratic’) # ’cubic’ possible
temps2 = np.arange(0, 45, 0.5) # vecteur temps plus discrétisé
plt.plot(temps, vitesse, ’ro’, label=’donnees’)
plt.plot(temps2, f1(temps2), ’b’, label=’interp. lineaire’)
plt.plot(temps2, f2(temps2), ’g’, label=’interp. quadra’)
# r: rouge, o : décorateur de courbe points
plt.legend()
plt.show()
47 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
I régression linéaire
import scipy.stats
# Données
plt.figure()
plt.plot(temps, vitesse, ’ro’, label=’donnees’)
# Régression
KOJTYCH
pente, ordonnee_origine = np.polyfit(temps, vitesse, 1)
# 1= degré du fit polynomial
plt.plot(temps2, pente*temps2+ordonnee_origine, ’m’,
label=’regression linéaire’)
plt.legend()
plt.show()
# Indicateurs statistiques de la régression
pente, ordonnée_origine, coeff_R, p_value, ecart_type =
scipy.stats.linregress(
temps, vitesse)
49 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
print(" La distance parcourue est environ {:.2f} m".format(integrale_simpson))
I dérivation
from scipy.misc import derivative
import matplotlib.pyplot as plt
# Exemple : estimer l’accélération
# En un instant
derivative(f2, 2.0, dx=1e-6)
# dérivée de f2 au temps t=2.0sec par différences finies centrées de pas dx
# Dérivée du vecteur complet
pas = temps2[1] # pas de temps entre deux valeurs de vitesse_lissee
acceleration = np.gradient(vitesse_lissee, pas)
plt.plot(temps2, acceleration)
plt.show()
50 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
return a*y
y0 = 5
KOJTYCH
# Définition de l’équation comme une fonction renvoyant y’
def equation(y, temps):
# condition initiale
solution_y = odeint(equation, y0, temps) # calcul de la solution
plt.figure()
plt.plot(temps, solution_y)
plt.show()
I sortie
51 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
def pendule(y, t, b, c): # la fonction doit renvoyer y’
theta, omega = y # y0=theta, y1=theta’=omega
dydt = [omega, # y0’ = omega
-b*omega - c*np.sin(theta)] # y1’ = theta’’=-b*theta’(t) +
c*sin(theta(t))
return dydt
# Calcul de la solution
y0 = [np.pi - 0.1, 0.0] # conditions initiales déplacement, vitesse
solution_y = odeint(pendule, y0, temps, args=(b, c)) # contient depl, vitesse
plt.figure()
plt.plot(temps, solution_y[:, 0], label=’theta (rad)’) # affichage déplacement
plt.xlabel("temps (s)")
plt.ylabel("déplacement (s) ")
plt.legend()
plt.show()
52 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
Récapitulatif de la partie II
I outils
• calcul matriciel
• graphiques, outils d’interpolation et de lissage
• résolution de systèmes d’équations linéaires
• intégration et différentiation numériques
•
KOJTYCH
résolution d’équations différentielles
I modules à retenir
• numpy : matrices et vecteurs
• scipy : calcul scientifique
• matplotlib.pyplot : graphiques
54 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Sommaire
1 Installation
2 Éléments de syntaxe
KOJTYCH
3 Python pour le calcul scientifique
5 Conclusion
55 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
# Création d’un fichier .csv
# Fermeture du fichier
# Analyse de données
55 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
fichier = open(’temp.csv’, ’w’) # ouverture en écriture "w"
56 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
# %[flags][width][.precision]type
# type : f = flottant, e = notation scientifique
I création de dossier
58 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
os.chdir(chemin_nouveau_dossier) # changement de dossier
59 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
fichier.closed KOJTYCH
fichier.write("C’est la ligne %d\r\n" % (i+1)) # ecriture dans le fichier
fichier.close() # fermeture du fichier
# vérification
# NB : instruction with recommandée pour éviter de laisser des fichiers
# ouverts en cas d’erreurs
# Lecture
with open(nom_fichier) as fichier: # ouverture en lecture par défaut (’r’)
contenu_fichier = fichier.readlines() # stockage de toutes les lignes
# parcout toutes les lignes et s’arrete àla fin
fichier.seek(0) # retourne au début du fichier
for ligne in fichier:
print(ligne) # affichage des lignes une àune
60 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
# Modification : remplacement d’une chaîne de caractères
with open(nom_fichier, "r") as fichier: # lecture du contenu
contenu_fichier = fichier.readlines()
with open(nom_fichier, "w") as fichier: # réécriture avec modification
for ligne in contenu_fichier:
fichier.write(re.sub(r’Simpson’, ’blagues’, ligne))
# Suppression de fichier
if os.path.exists(nom_fichier): # vérifie existence
os.remove(nom_fichier)
61 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
# Import d’un fichier csv : poids et IMC d’étudiants
donnees = pd.read_csv("fichier_test.csv", sep=’,’, skipinitialspace=True) #
dataframe
# enleve les espaces inutiles
donnees # Affichage global
donnees.head() # Affichage partiel // donnees.tail()
list(donnees) # en-tetes des colonnes
donnees[["Sex", "BMI (Sep)", "BMI (Apr)"]] # certaines colonnes
donnees.iloc[:, 0:2] # toutes les lignes, colonnes 0 et 1
62 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
I analyse et sauvegarde
# Analyse des données
#donnees.hist() # histogramme
print(donnees.describe()) # indicateurs statistiques (pour colonnes
numériques)
categorie
KOJTYCH
donnees["Sex"] = donnees["Sex"].astype(’category’) # déclaration variable
print(donnees.describe(include=[’category’]))
# IMC par catégorie
donnees.groupby(’Sex’)[’BMI (Sep)’].mean().to_frame() # moyenne
donnees.groupby(’Sex’)[’BMI (Sep)’].hist() # répartition
63 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
# NB : commande "dir" sur windows
# Programmes externes
# statut = os.system("jupyter notebook &") # lance un programme externe
# statut stocke les erreurs potentielles, 0 = pas d’erreur
# caractere & pour exécuter en arriere plan
# Lancement d’un autre script python (utile pour gérer les simulations)
with open("hello.py", "w") as fichier:
fichier.write(’print("hello world")’)
64 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
KOJTYCH
# Import d’un fichier csv : poids et IMC d’étudiants
donnees = pd.read_csv("fichier_test.csv", sep=’,’, skipinitialspace=True) #
dataframe
# enleve les espaces inutiles
donnees # Affichage global
donnees.head() # Affichage partiel // donnees.tail()
list(donnees) # en-tetes des colonnes
donnees[["Sex", "BMI (Sep)", "BMI (Apr)"]] # certaines colonnes
donnees.iloc[:, 0:2] # toutes les lignes, colonnes 0 et 1
65 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
I outils
• entrées et sorties à l’écran
• manipulation de dossiers et fichiers
• analyse de données numériques
•
KOJTYCH
lancement de programmes externes
I modules à retenir
• os : exploitation des commandes du système d’exploitation
• pandas : analyse de données numériques
• sys : informations sur le script courant
66 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Sommaire
1 Installation
2 Éléments de syntaxe
KOJTYCH
3 Python pour le calcul scientifique
5 Conclusion
67 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Récapitulatif de l’atelier
I points abordés
• syntaxe de base : variables, boucles, structures de données
• réalisation de graphiques
• outils de calcul scientifique
• gestion de données et lancement de programmes
I modules à retenir
•
•
•
•
KOJTYCH
math : opérations mathématiques
numpy : matrices et vecteurs
scipy : calcul scientifique
matplotlib.pyplot : graphiques
• os : exploitation des commandes du système d’exploitation
• pandas : analyse de données numériques
• sys : informations sur le script courant
I commandes à retenir
help() # commande d’aide
dir() # liste des attributs et méthodes d’un objet
67 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
5
KOJTYCH
utiliser les bons outils (IDE, auto-complétion, raccourcis clavier...)
respecter une syntaxe propre et homogène (PEP8, nommage
explicite...)
6 optimiser son code (vectoriser !)
7 gérer ses versions (avec Git par exemple)
8 aller chercher l’information ! (forum, questions...)
68 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Ressources supplémentaires
KOJTYCH
I tutoriel Python très complet sur OpenClassroom :
https://openclassrooms.com/fr/courses/
235344-apprenez-a-programmer-en-python
69 / 71
Installation Éléments de syntaxe Calcul scientifique Gestion de données Conclusion
Envie de pratiquer ?
I matériel de l’atelier :
https://gitlab.meca.polymtl.ca/iicap/ateliers/python
KOJTYCH
I ou lien direct vers le notebook Jupyter en ligne (sans
installation, sans sauvegarde, un peu de patience pour le chargement)
Calcul symbolique
expr1.subs(u, 1)
KOJTYCH
# Evaluation d’une expression avec l’opérateur de substitution
# remplacement d’une variable
expr2.subs([(u, 3), (v, 2)]) # evaluation en u = 3, v = 2
# Dérivation symbolique
sp.diff(expr1, u) # derivation ordre1 par rapport àune variable
sp.diff(expr1, u, u) # dérivée d’ordre 2
sp.diff(expr1, u, v) # dérivée croisée
# Intégration symbolique
sp.integrate(expr1, u) # sans bornes sur u seulement
sp.integrate(expr1, u, v) # sans bornes sur u et v
sp.integrate(expr1, (u, 0, 1), (v, 3, 8)) # avec bornes : 0 <u<1, 3<v<8
sp.integrate(u**2, (u, 0, 1)) # vérification
ma_liste = [1, 2, 3, 4, 5]
KOJTYCH
print(rd.sample(ma_liste, 2)) # extrait au hasard 2 éléments de la population
# Echantillonnage selon une loi de probabilite
print(np.random.uniform(0, 1)) # echantillon sur loi uniforme entre 0 et 1
moyenne = 2
ecart_type = 0.5
print(np.random.normal(moyenne, ecart_type, size=5))
# 15 échantillons d’une loi normale
# Matrice ou vecteur aléatoire
vecteur = np.random.rand(3, 2) # taille 3 X 2
vecteur
73 / 71
Annexes
def f(x):
KOJTYCH
# minimiser f(x)= exp**((x-0.7)**2) sans contraintes
return np.exp((x - 0.7)**2)
74 / 71
Annexes
# Graphique de la fonction
KOJTYCH
figure3D = plt.figure()
ax = figure3D.add_subplot(111, projection=’3d’)
X, Y = np.meshgrid(np.linspace(-2, 2, 100), np.linspace(-1, 3, 100))
Z = rosen([X, Y])
ax.plot_surface(X, Y, Z, cmap=cm.viridis, linewidth=0, alpha=0.7)
plt.show()
KOJTYCH
# Les contraintes doivent être définies sous la forme contrainte(x)>=0
def contrainte(x):
return 0.5-x[0]
resultats = optimize.minimize(rosen,
x0,
constraints={"fun": contrainte,
"type": "ineq"},
method=’SLSQP’, # choix de la methode
options={’disp’: True})
76 / 71
Annexes
KOJTYCH
# Modèle de gaussienne
def modele_gaussienne(x, amp, mu, sigma):
return amp * np.exp(-(x-mu)**2 / sigma)
# paramètres : amp = amplitude, mu = moyenne, sigma = ecart type
78 / 71
Annexes
KOJTYCH
# Maîtriser les changements de formes (1 "axis" = 1 dimension = 1 série
d’indices)
vecteur = np.reshape(matrice_a, (1 ,9)) # change forme de la matrice en 1 par
12
vecteur_transpose = vecteur.transpose()
vecteur_axes_permute = np.swapaxes(vecteur, 0, 1) # permute les indices i et j
matrice_b = np.zeros((3, 4, 5))
matriceb_modifiee = np.moveaxis(matrice_b, 1, 2)
# change numérotation des indices (axis) 1 va en 2
matriceb_modifiee.shape
# Utiliser les fonctions dédiées pour manipuler les vecteurs et matrices
np.sum(matrice_a, axis=0) # dans la direction 0 (= somme selon colonnes)
np.einsum(’ii’, matrice_a) # sum a[ii]
79 / 71
Annexes
print(A) KOJTYCH
[0, 0, 0, 5],
[0, 4, 0, 5]])
# conversion en matrice sparse (méthode CSR)
S = csr_matrix(A)
print(S)
# opération sur la matrice creuse
b = np.random.rand(4)
x1 = spsolve(S, b) # resolution avec matrice creuse
# reconstruction en matrice dense
B = S.todense()
x2 = np.linalg.solve(A, b)
80 / 71
Annexes
KOJTYCH
# Tutoriel explicatif : voir le lien ci-dessous
81 / 71
Annexes
KOJTYCH
self.nom = nom # initialisation des attributs passes en paramètres
self.prenom = prenom
def affiche(self):
print("Nom : ", self.nom, ", Prénom : ", self.prenom)
82 / 71
Annexes
I héritage
# Classe "étudiant" qui hérite de la classe individu
class etudiant(individu):
KOJTYCH
def __init__(self, nom, prenom, matricule):
individu.__init__(self, nom, prenom) #appel au constructeur de
"individu"
self.matricule = matricule
# Redéfinition des méthodes possible
def affiche(self):
print("Nom : ", self.nom, ", Matricule: ", self.matricule)
83 / 71