Lors d'une séance de travaux pratiques au lycée, il est souvent nécessaire de réaliser la modélisation de points expérimentaux. Cependant, faire de la modélisation en Python peut s’avérer délicat avec des élèves peu familiarisés avec ce langage.
Je vous propose une bibliothèque, que j'ai appelée “modelisation”. Elle permet de faire de la modélisation très simplement en ajoutant seulement deux lignes de code dans votre programme Python.
Avec cette bibliothèque, vous pourrez :
Cette bibliothèque est disponible sur Pypi.
Pour l'installer, avec le terminal de Windows (ou PowerShell), saisir :
pip install modelisation
Pour l'installer à partir de l'IDE (environnement de développement intégré) Thonny :
Cette bibliothèque utilise d'autres bibliothèques : Numpy, Matplotlib, Scypi et Addcopyfighandler.
Elles doivent être installées sur votre configuration.
Dans votre programme Python, il faut importer la bibliothèque “modelisation” :
import modelisation
Le code à utiliser pour modéliser les points de listes ou de tableaux (x et y) est le suivant :
modelisation.modele("lineaire",x ,y) # pour un modèle "linéaire"
D'autres modèles sont disponibles :
Le code complet est donc le suivant :
import matplotlib.pyplot as plt import modelisation x = [1, 2, 3, 4] # saisir les valeurs expérimentales de la grandeur en abscisse y = [1.2e-5, 2.1e-5, 3.0e-5, 4.3e-5] # saisir les valeurs de la grandeur en ordonnée plt.plot(x,y, color='red', marker='+', linestyle='none') # Afficher les points modelisation.modele("lineaire",x ,y) # Afficher la modélisation plt.show()
Ce programme affichera :
Une fois le graphique affiché, il est possible de sélectionner au “lasso” les points à utiliser pour la modélisation. Il faut déplacer la souris avec le bouton gauche enfoncé et entourer les points à conserver.
Pour supprimer la modélisation, il suffit d'appuyer sur la touche “Suppr” ou “Delete” selon le clavier.
Depuis la version 1.0, il est possible de personnaliser la modélisation. Des paramètres facultatifs peuvent être ajoutés.
Exemple :
modelisation.modele("affine", x, y, color = "red", linestyle = 'solid', linewidth = 2.5)
Depuis la version 1.0, il est possible de récupérer les paramètres de la modélisation dans le programme Python.
a = modelisation.modele("lineaire", x, y)
a, b = modelisation.modele("affine", x, y)
a, b, c = modelisation.modele("parabole", x, y)
a, b = modelisation.modele("exp_croissante", x, y)
a, b = modelisation.modele("exp_decroissante", x, y)
Il n'est pas possible de récupérer les données de modélisation pour le modèle 'double_affine'.
La fonction 'lasso', ne met pas à jour les données de modélisation dans le programme Python
L'exemple précédent du programme python peut être amélioré en ajoutant un titre, des légendes, un quadrillage etc…
Pour répondre au mieux au besoin de chacun, je vous propose un programme Python, largement commenté, qui vous servira de modèle de départ.
Il suffit alors de commenter/décommenter ou éventuellement d'effacer certaines parties du programme.
Je vous mets à disposition ce modèle : Graphique.zip, version du 05/07/2024.
Exemple : si l'élève doit saisir ses mesures dans une liste alors il est possible de supprimer les lignes correspondantes aux tableaux et au fichier CSV.
#-------Importation des bibliothèques ----------- import matplotlib.pyplot as plt # importation d'un sous module (pyplot) de la bibliothèque matplotlib sous le nom plt import numpy as np # Importation du module numpy afin de lire le contenu du fichier csv et d'utiliser des tableaux import modelisation # pour faire de la modélisation # ------- Saisir les mesures expérimentales dans des listes ------- x = [0, 1e-3, 2e-3, 3e-3, 4e-3, 5e-3, 6e-3, 7e-3] # saisir les valeurs de la grandeur en abscisse y = [0, 0.221, 0.440, 0.665, 1.250, 1.105, 1.327, 1.550] # saisir les valeurs de la grandeur en ordonnée # ------ Saisir les mesures expérimentales dans un tableau numpy ------ ''' x = np.array([0, 1e-3, 2e-3, 3e-3, 4e-3, 5e-3, 6e-3, 7e-3]) # saisir les valeurs de la grandeur en abscisse y = np.array([0, 0.221, 0.440, 0.665, 1.250, 1.105, 1.327, 1.550]) # saisir les valeurs de la grandeur en abscisse ''' # --- Importation des mesures à partir d'un fichier CSV --- ''' x, y = np.loadtxt("mesures.csv", delimiter =',', skiprows = 2, unpack = True) ''' # Dans cet exemple, les données sont séparées par des "," . On commence à lire à partir de la troisième ligne (skiprows=2) # Les données se retrouveront dans deux tableaux Numpy (x et y) # Si on préfère utiliser des listes plutôt que des tableaux Numpy, il suffit de les convertir : # x = x.tolist() # y = y.tolist() #---------- Caractéristiques du graphique ------- plt.plot(x, y, color='red', marker='+', linestyle = 'none', markersize = 15, markeredgewidth = 2) # Affiche des points aux coordonnées x, y : linestyle = 'none' --> ne pas relier les points par une ligne : markersize --> taille d'un point : markeredgewidth = 2 --> épaisseur du trait plt.xlabel("Grandeur en abscisse (unité)", fontsize = 12, fontweight = 'bold', labelpad = 15) # Nommer l'axe des abscisses plt.ylabel("Grandeur en ordonnée (unité)", fontsize = 12, fontweight = 'bold', labelpad = 15) # Nommer l'axe des ordonnées plt.title("Titre du graphique", color = "black", fontsize = 20, fontweight = 'bold', pad = 20) # fontsize = 20 --> taille caractères : fontweight = 'bold' --> en gras #---------- Paramètres facultatifs du graphique ---------- plt.grid() # Afficher un quadrillage plt.xlim(0) # fixe la plus petite graduation sur x plt.ylim(0) # fixe la plus petite graduation sur y #plt.axis([Xmin, Xmax, Ymin, Ymax]) # limites du graphique #plt.gca().yaxis.set_ticks_position('right') # placer l'axe des ordonnés à droite #plt.axis('equal') # pour avoir un repère orthonormé #--------------- Modélisation ------------------ modelisation.modele("lineaire",x ,y) # modèles disponibles : "lineaire", "affine", "parabole", "exp_croissante", "exp_decroissante", "double_affine" #----------- Afficher le graphique ------------ plt.show()
En Python, les lignes de code commençant par “#“ sont des commentaires.
Pour mettre en commentaire un paragraphe de plusieurs lignes, il suffit de placer trois apostrophes (''') en début et trois autres en fin de paragraphe. (Voir un exemple dans le programme précédent)
Attention, si les mesures sont importées à partir d'un fichier CSV, sachez qu'il existe différents formats CSV.
Dans l'exemple ci-dessus, les données du fichier CSV sont séparées par une virgule. Parfois elles peuvent être séparées par un point-virgule, dans ce cas vous devez modifier la variable 'delimiter'.
x, y = np.loadtxt("affine.csv", delimiter=';', skiprows=2, unpack=True)
Parfois les premières lignes d'un fichier CSV contiennent des informations autres que des mesures (nom des variables, unités…).
Il faut alors faire attention de ne pas importer ces lignes.
C'est la but de l'instruction “skiprows = 2” dans le code précédent pour ne pas lire les deux premières lignes.
Astuce : Pour connaitre le format CSV utilisé, ouvrir votre fichier CSV dans le bloc-notes de Windows.