Outils pour utilisateurs

Outils du site


python:une_bibliotheque_pour_modeliser_des_points_experimentaux

Une bibliothèque pour modéliser des points expérimentaux


Présentation


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 :

  • Afficher la courbe modélisée sur le graphique ainsi que son équation.
  • Sélectionner avec le “lasso”, les points expérimentaux à utiliser pour la modélisation.
  • Afficher/masquer un réticule en appuyant sur la touche “r” du clavier.
  • Afficher/masquer la légende en appuyant sur la touche “m” du clavier.
  • Copier-coller le graphique avec les touches Ctrl+C et Ctrl V.



Installation de la bibliothèque

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 :

  • Menu Outils –> Gérer les paquets…
  • Saisir dans le champ de recherche : “modelisation” puis cliquez sur le bouton “Rechercher sur Pypi”.
  • Sélectionnez “modelisation”, puis cliquez sur le bouton “Installer”.


Cette bibliothèque utilise d'autres bibliothèques : Numpy, Matplotlib, Scypi et Addcopyfighandler.
Elles doivent être installées sur votre configuration.


Un exemple minimaliste

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 :

  • lineaire
  • affine
  • parabole
  • exp_croissante (exponentielle croissante)
  • exp_decroissante (exponentielle décroissante)
  • double_affine (deux droites affines lors d'un titrage en conductimétrie par exemple)

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” du clavier.

Utilisation d'un modèle

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.

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 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
'''
 
# ------- 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
 
 
# --- Importation des mesures à partir d'un fichier CSV ---
'''
    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 (array) d'une ligne (x et y)
'''        
#x, y = np.loadtxt("affine.csv", delimiter=',', skiprows=2, unpack=True)
 
 
#---------- Caractéristiques du graphique -------
plt.plot(x, y, color='red', marker='+', linestyle = 'none', markersize=15, markeredgewidth=2)        
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
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("affine",x ,y) # modèles disponibles : "lineaire", "affine", "parabole", "exp_croissante", "exp_decroissante", "double_affine"
 
 
#----------- Afficher le graphique ------------
 
plt.tight_layout() # ajuste automatiquement de l’espace autour du graphique
#plt.get_current_fig_manager().window.state('zoomed') # Affiche le graphique en plein écran (Attention problème avec les écrans réglés à plus de 100%)
plt.show() # Affiche le graphique



Quelques remarques

Les commentaires en Python

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)

Importer les mesures à partir d'un fichier CSV

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.




Statistiques du site

  • Cette page a été consultée par 1 visiteurs aujourd'hui.
  • Cette page a été consultée par 36 visiteurs depuis le 26/01/2024.
python/une_bibliotheque_pour_modeliser_des_points_experimentaux.txt · Dernière modification : 17/04/2024 17:49 de Stéphane LAURENT

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki