Skip to content

🐍 Pense-bête Python

Aide pour les lycéens

Courbes et points

# matplotlib est la bibliothèque qui permet de tracer les graphiques
import matplotlib.pyplot as plt

plt.clf()

X = [0, 0.021, 0.039, 0.063]  # Valeur des x
Y = [0, 0.54, 1.08, 1.62]  # Valeur des y

plt.plot(X, Y, '-x', color='blue')  # On relie les points
plt.plot(X, Y, 'x', color='red')  # On ne relie pas les points

X2 = [0.045]
Y2 = [0.85]

plt.plot(X2, Y2, 'o', color='green', markersize=20) # Ajoute un gros point vert

plt.xlabel("Légende des abscisses")
plt.ylabel("Légende des ordonnées")
plt.title("Titre du graphique")

plt.grid()  # Si on veut afficher une grille
plt.show()  # Afficher l'image

Changer les axes

plt.xlim(-0.01, 0.07)  # Limites pour l'axe des abscisses (x)
plt.ylim(-0.1, 2)      # Limites pour l'axe des ordonnées (y)

Changer les graduations

# Graduation majeure de [0 à 1[ de 0.1 en 0.1
plt.xticks(np.arange(0, 1, 0.1))
# Affiche les sous-graduations
plt.minorticks_on()

Tracer une régression linéaire (conductimétrie)

Copier ce bout de code en haut du script :

import numpy as np
def trace_regression_lineaire(plt, X, Y, nb_points_depart, nb_points_fin, intervalle, couleur):
    # Sélectionner les sous-listes des X et Y entre nb_points_depart et nb_points_fin
    X_sub = X[nb_points_depart:nb_points_fin+1]
    Y_sub = Y[nb_points_depart:nb_points_fin+1]

    # Effectuer la régression linéaire
    fit = np.polyfit(X_sub, Y_sub, 1)  # Polyfit de degré 1 pour la régression linéaire
    pente, intercept = fit

    # Créer les valeurs de X pour tracer la ligne dans l'intervalle fourni
    X_ligne = np.linspace(intervalle[0], intervalle[1], 100)
    Y_ligne = pente * X_ligne + intercept

    # Tracer la ligne de régression avec la couleur choisie en pointillé
    plt.plot(X_ligne, Y_ligne, linestyle='--', color=couleur, label=f"Régression linéaire (indices {nb_points_depart}-{nb_points_fin})")
Que l’on utilisera ensuite ainsi :
trace_regression_lineaire(plt, X, Y, 1, 2, [0.02, 0.1], 'green')

Tracer une droite

Verticale

import matplotlib.pyplot as plt
plt.clf()
plt.figure()

# Tracer une ligne verticale à x=5
plt.axvline(x=5, color='green', linestyle='--', label="Ligne verticale (x=5)")

plt.grid(True)
plt.legend()
plt.show()

Horizontale

# Tracer une ligne horizontale à y=10
plt.axhline(y=10, color='purple', linestyle='-', label="Ligne horizontale (y=10)")

Ajouter du texte

# Importation de la bibliothèque matplotlib
import matplotlib.pyplot as plt

plt.clf()
plt.figure()

# Ajouter du texte à des endroits spécifiques
plt.text(6, 12, "Texte1", fontsize=12, color='blue')  # Texte au point (6, 12)
plt.text(2, 8, "Texte2", fontsize=12, color='red')   # Texte au point (2, 8)
plt.text(8, 4, "Texte3", fontsize=12, color='orange')  # Texte au point (8, 4)

# Ajouter un titre et des légendes aux axes
plt.title("Exemple de ligne verticale, horizontale et de texte")
plt.xlabel("Axe des X")
plt.ylabel("Axe des Y")

plt.xlim(0,10)
plt.ylim(0,15)

plt.grid(True)
plt.legend()
plt.show()

Régression linéaire

import matplotlib.pyplot as plt
import numpy as np # Bibliothèque scientifique

plt.clf()
X = np.array([0, 0.021, 0.039, 0.063])
Y = np.array([0, 0.84, 1.45, 2.4])

plt.plot(X, Y, 'x', color='blue')  # On trace

plt.xlabel("Légende des abscisses")
plt.ylabel("Légende des ordonnées")
plt.title("Titre du graphique")

plt.grid()

# Demande à NumPy de trouver les coefficients a et b pour y = a x + b
fit = np.polyfit(X, Y, 1)

coefficient_directeur = fit[0]  # a dans y = ax + b
print("coefficient directeur :", coefficient_directeur)

ordonnee_origine = fit[1]  # b dans y = ax + b
print("ordonnée à l'origine:", ordonnee_origine)

print("Équation : y = " + str(coefficient_directeur) + ' x + ' + str(ordonnee_origine))
modelisation = coefficient_directeur * X + ordonnee_origine
plt.plot(X, modelisation, color='red')

plt.show()

Modélisation par une parabole

import numpy as np
import matplotlib.pyplot as plt

dt = 0.03333333333333333
y= np.array([42.719, 42.719, 42.719, 43.263, 43.263, 43.535, 43.535, 43.824, 44.096, 44.367999999999995, 44.367999999999995, 44.64, 44.929, 45.745000000000005, 45.473, 46.306, 46.306, 46.577999999999996, 46.577999999999996, 47.68299999999999, 47.955, 47.955, 48.227, 48.788, 49.06, 49.332, 50.437, 50.437, 50.437, 51.27, 52.086, 52.64699999999999, 53.190999999999995, 53.752, 53.752, 54.023999999999994, 55.401, 55.961999999999996, 56.778000000000006, 57.339, 57.339, 57.883, 58.715999999999994, 59.821, 60.36500000000001, 61.19799999999999, 60.926, 62.303, 62.575, 63.952, 65.057, 65.329, 65.329, 66.706, 67.539, 68.37199999999999, 69.188, 70.565, 70.854, 71.398, 72.77499999999999, 73.88, 74.713, 76.09, 76.09, 76.92299999999999, 78.011, 79.405, 80.221, 81.887, 81.887, 82.99199999999999, 83.808, 85.47399999999999])

# Création du tableau de temps
t = np.arange(len(y)) * dt

# Ajustement par une parabole
coeffs = np.polyfit(t, y, 2)
a = coeffs[2]
b = coeffs[1]
c = coeffs[0]

print("Les coefficients de la parabole sont y(t) = a + b t + c t^2 :")
print("a = ", a)
print("b = ", b)
print("c = ", c)

# Génération des valeurs ajustées
t_fit = np.linspace(t[0], t[-1], 500)
y_fit = np.polyval(coeffs, t_fit)

# Tracé des points de données et de la courbe ajustée
plt.figure(figsize=(8, 6))
plt.plot(t, y, 'o', label='Données')
plt.plot(t_fit, y_fit, '-', label='Ajustement quadratique')
plt.xlabel('Temps t')
plt.ylabel('Valeur y')
plt.title('Ajustement parabolique des données')
plt.legend()
plt.grid(True)
plt.show()

Histogramme

import numpy as np
import matplotlib.pyplot as plt
plt.clf()
pH1 = [1,2,3,4,5,2,3,1,2] # À compléter avec les mesures du papier pH
pH2 = [2,3,1,4,2,1,2,1,3] # À compléter avec les mesures du pH-mètre
plt.hist(pH1, 10, label='Mesures série 1') # 10 groupes de mesures
plt.hist(pH2, 10, label='Mesures série 2')

plt.xlabel("Mesures")
plt.ylabel("Nombre de mesures")
plt.title("Histogramme de la série de mesures")
plt.legend()
plt.show()

Dérivée (par exemple pour un dosage)

Deux axes

Ici, c’est plus délicat car il y a deux axes, un à droite et un à gauche. Cela correspond pour Matplotlib à deux subplots.

# Importation de la bibliothèque matplotlib pour tracer les graphiques
import matplotlib.pyplot as plt
import numpy as np

plt.clf()

# Liste des volumes de NaOH en mL
volumes = [
    0, 0.75, 2.16, 3.42, 4.52, 5.48, 6.29, 6.98, 7.55, 8.02, 8.41, 8.72, 8.97,
    9.18, 9.34, 9.48, 9.58, 9.67, 9.74, 9.79, 9.83, 9.91, 9.93, 9.96, 9.98,
    9.99, 10.00, 10.01, 10.02, 10.04, 10.07, 10.12, 10.15, 10.27, 10.34, 10.43,
    10.54, 10.69, 10.87, 11.11, 11.41, 11.79, 12.29, 12.94, 13.8, 14.95
]

# Liste des valeurs de pH correspondantes
pH = [
    1.3, 1.35, 1.45, 1.55, 1.65, 1.76, 1.85, 1.95, 2.05, 2.15, 2.26, 2.36, 2.45,
    2.55, 2.66, 2.75, 2.85, 2.95, 3.05, 3.15, 3.25, 3.5, 3.6, 3.85, 4.1,
    4.35, 7.6, 8.6, 9.85, 10.1, 10.35, 10.6, 10.7, 10.95, 11.05, 11.15, 11.25,
    11.35, 11.45, 11.55, 11.65, 11.75, 11.85, 11.95, 12.05, 12.15
]

# Calcul de la dérivée (différence entre valeurs adjacentes)
dpH = np.diff(pH)
dV = np.diff(volumes)

# Calcul de la dérivée du pH par rapport au volume (dpH/dV)
derivative = dpH / dV

# Créer la figure et l'axe principal
fig, ax1 = plt.subplots()

# Tracer la courbe de pH en fonction du volume de NaOH ajouté sur l'axe principal (gauche)
ax1.plot(volumes, pH, 'o-', color='blue', label="pH en fonction du volume de NaOH ajouté")
ax1.set_xlabel("Volume ajouté (mL)")
ax1.set_ylabel("Valeur du pH", color='blue')
ax1.tick_params(axis='y', labelcolor='blue')

# Créer un deuxième axe y partageant le même axe x
ax2 = ax1.twinx()

# Tracer la courbe de la dérivée du pH par rapport au volume sur le second axe (droite)
ax2.plot(volumes[:-1], derivative, 'o-', color='red', label="Dérivée du pH par rapport au volume")
ax2.set_ylabel("Dérivée du pH (dpH/dV)", color='red')
ax2.tick_params(axis='y', labelcolor='red')

# Ajouter une grille à l'axe principal
ax1.grid(True)

# Afficher le graphique
plt.title("Courbe de titrage : pH et sa dérivée en fonction du volume ajouté")
plt.show()

Changer l’échelle

Verticale

ax2.set_ylim(0,20)

Horizontale

ax1.set_xlim(0,20)

Changer les graduations des axes

# Graduation majeure de [0 à 20[ de 1 en 1
ax1.set_xticks(np.arange(0, 20, 1))
# Sous-graduation de [0 à 20[ de 0.5 en 0.5
ax1.set_xticks(np.arange(0, 20, 0.5), minor=True)

Fonctions utiles

import random
import numpy as np

# -------------------------
#   Générer des listes
# -------------------------

# Générer une liste de 50 valeurs aléatoires entre -100 et 100
valeurs_aleatoires = [random.randint(-100, 100) for _ in range(50)]
# Générer une liste de 50 valeurs entre 0, 49
valeurs = np.arange(50)

# -------------------------
#      Dérivée
# -------------------------

# Calcul de la dérivée de la liste des valeurs aléatoires
derivative_aleatoires = np.diff(valeurs_aleatoires)
derivative_valeurs = np.diff(valeurs)
derivative = derivative_aleatoires / derivative_valeurs

# -------------------------
#   Fonctions utiles
# -------------------------

# Trouver l'indice du maximum dans valeurs_aleatoires
indice_max = np.argmax(valeurs_aleatoires)
# Trouver la valeur correspondante dans la liste valeurs
valeur_correspondante = valeurs[indice_max]

# Calculer la moyenne et l'écart-type
moyenne = np.mean(valeurs_aleatoires)
ecart_type = np.std(valeurs_aleatoires)
print("Moyenne : ", moyenne)
print("Écart-type : ", ecart_type)

Trouver la valeur maximale d’une liste

# Trouver l'indice du maximum dans valeurs_aleatoires
indice_max = np.argmax(valeurs_aleatoires)
# Trouver la valeur correspondante dans la liste valeurs
valeur_correspondante = valeurs[indice_max]

Importer / exporter des fichiers CSV

Séparateurs décimaux et délimiteurs

  • Dans un fichier CSV, les données sont séparées par des délimiteurs.
  • Si nous travaillons avec des données numériques, il faut aussi tenir compte du séparateur décimal, qui peut être une virgule.

⏬ Importer des données

import pandas as pd
import numpy as np

# Spécifier le chemin vers ton fichier CSV
fichier_csv = "ton_fichier.csv"

# Charger le fichier CSV avec les options spécifiques
df = pd.read_csv(
    fichier_csv,        # Le fichier CSV à charger
    skiprows=5,         # Omet les 5 premières lignes
    delimiter=';',      # Définit le délimiteur comme un point-virgule (;)
    decimal=',',        # Définit la virgule comme séparateur décimal
    header=2            # Utilise la 3e ligne (index 2) pour les noms des colonnes
)

# Récupérer une colonne spécifique dans une liste NumPy
# Ici, on suppose que la colonne qui nous intéresse s'appelle 'ColonneCible'
colonne_numpy = df['ColonneCible'].to_numpy()

# Afficher la colonne sous forme de tableau NumPy
print(colonne_numpy)

⏫ Exporter les données

import pandas as pd
import numpy as np

# Exemple de trois listes NumPy
liste1 = np.array([1.2, 2.4, 3.6])
liste2 = np.array([10, 20, 30])
liste3 = np.array(['A', 'B', 'C'])

# Créer un DataFrame à partir des listes NumPy
df = pd.DataFrame({
    'Liste1': liste1,
    'Liste2': liste2,
    'Liste3': liste3
})

# Spécifier le chemin où tu veux sauvegarder le fichier CSV
fichier_csv_export = "mes_listes_exportees.csv"

# Exporter le DataFrame vers un fichier CSV
df.to_csv(
    fichier_csv_export,  # Le fichier CSV de destination
    sep=';',             # Utilise un point-virgule comme délimiteur
    decimal=',',         # Utilise la virgule comme séparateur décimal
    index=False,         # Omet l'index lors de l'exportation
    header=True          # Inclut les noms des colonnes dans l'export
)

print("Listes NumPy exportées avec succès dans le fichier CSV !")