Histogrammes Matplotlib

MatplotlibBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous apprendrez à créer et à personnaliser des histogrammes à l'aide de Matplotlib, l'une des bibliothèques de visualisation de données les plus populaires en Python. Un histogramme est un outil puissant pour visualiser la distribution d'un ensemble de données numériques. Il regroupe les nombres en intervalles (ou "bins") et affiche la fréquence des points de données tombant dans chaque intervalle.

Vous suivrez les étapes suivantes :

  1. Générer des données d'exemple à l'aide de NumPy.
  2. Créer un histogramme de base.
  3. Personnaliser le nombre d'intervalles (bins).
  4. Modifier la couleur et le style des bords des barres de l'histogramme.
  5. Normaliser l'histogramme pour afficher la densité de probabilité.

À la fin de ce laboratoire, vous serez en mesure de générer des histogrammes informatifs et visuellement attrayants pour vos projets d'analyse de données. Tous les graphiques seront enregistrés sous forme de fichiers image, que vous pourrez visualiser directement dans le LabEx WebIDE.

Générer des données d'échantillon avec numpy.random

Dans cette étape, vous allez générer un ensemble de données d'échantillon que nous pourrons utiliser pour tracer un histogramme. Nous utiliserons la bibliothèque NumPy, qui est un package fondamental pour le calcul scientifique en Python. Elle fournit un objet tableau multidimensionnel haute performance et des outils pour travailler avec ces tableaux.

Nous utiliserons la fonction numpy.random.normal() pour générer des données qui suivent une distribution normale (ou gaussienne). C'est un type courant de distribution de données que l'on retrouve dans de nombreux scénarios du monde réel.

Tout d'abord, ouvrez le fichier main.py depuis l'explorateur de fichiers situé sur le côté gauche du WebIDE. Ajoutez ensuite le code suivant. Ce code importera la bibliothèque numpy et générera 1000 nombres aléatoires avec une moyenne de 0 et un écart-type de 1.

import numpy as np

## Générer 1000 points de données à partir d'une distribution normale
## avec une moyenne (loc) de 0 et un écart-type (scale) de 1.
data = np.random.normal(loc=0, scale=1, size=1000)

print("Données d'échantillon générées avec succès.")

Pour exécuter le script, ouvrez un terminal dans le WebIDE (Terminal -> Nouveau terminal) et exécutez la commande suivante. Votre répertoire de travail est déjà /home/labex/project.

python3 main.py

Vous verrez un message de confirmation dans le terminal.

Données d'échantillon générées avec succès.

La variable data de votre script contient maintenant un tableau de 1000 nombres, prêt à être visualisé dans l'étape suivante.

Tracer l'histogramme avec plt.hist(data)

Dans cette étape, vous allez créer votre premier histogramme. Nous utiliserons le module matplotlib.pyplot, qui fournit une interface simple pour créer des graphiques. Il est conventionnellement importé avec l'alias plt.

La fonction principale pour créer un histogramme est plt.hist(). Dans sa forme la plus simple, elle prend un seul argument : le tableau de données que vous souhaitez tracer.

Étant donné que nous sommes dans un environnement non interactif, nous ne pouvons pas afficher le graphique directement avec plt.show(). Au lieu de cela, nous devons enregistrer le graphique dans un fichier à l'aide de plt.savefig().

Mettez à jour votre fichier main.py avec le code suivant. Il ajoute la logique de traçage de Matplotlib au code de génération de données de l'étape précédente.

import numpy as np
import matplotlib.pyplot as plt

## Générer des données d'échantillon
data = np.random.normal(loc=0, scale=1, size=1000)

## Créer un histogramme
plt.hist(data)

## Enregistrer le graphique dans un fichier
plt.savefig('/home/labex/project/histogram.png')

print("Histogramme de base enregistré dans histogram.png")

Exécutez à nouveau le script depuis le terminal :

python3 main.py

Vous devriez voir la sortie suivante :

Histogramme de base enregistré dans histogram.png

Un nouveau fichier nommé histogram.png apparaîtra dans l'explorateur de fichiers sur la gauche. Double-cliquez dessus pour ouvrir et visualiser votre premier histogramme. Il montrera la distribution de fréquence des données aléatoires que vous avez générées.

Histogram

Définir le nombre de classes avec le paramètre bins

Dans cette étape, vous apprendrez à contrôler la granularité de votre histogramme en définissant le nombre de classes. Une "classe" (ou "bin") est un intervalle qui représente une plage de données. Le nombre de classes peut affecter considérablement la manière dont la distribution est interprétée. Trop peu de classes peuvent masquer des détails importants, tandis que trop de classes peuvent créer un graphique bruyant.

La fonction plt.hist() de Matplotlib possède un paramètre bins qui vous permet de spécifier le nombre de classes. Par défaut, Matplotlib choisit un nombre raisonnable, mais vous voudrez souvent l'ajuster.

Modifions le code pour créer un histogramme avec 30 classes. Nous l'enregistrerons également dans un nouveau fichier, histogram_bins.png, pour le comparer avec le graphique précédent.

Mettez à jour votre fichier main.py comme suit :

import numpy as np
import matplotlib.pyplot as plt

## Générer des données d'échantillon
data = np.random.normal(loc=0, scale=1, size=1000)

## Créer un histogramme avec 30 classes
plt.hist(data, bins=30)

## Enregistrer le graphique dans un nouveau fichier
plt.savefig('/home/labex/project/histogram_bins.png')

print("Histogramme avec 30 classes enregistré dans histogram_bins.png")

Exécutez le script depuis le terminal :

python3 main.py

La sortie sera :

Histogramme avec 30 classes enregistré dans histogram_bins.png

Trouvez maintenant histogram_bins.png dans l'explorateur de fichiers et ouvrez-le. Comparez-le avec le premier histogramme. Vous devriez remarquer que les barres sont plus étroites, offrant une vue plus détaillée de la distribution des données.

Histogramme avec 30 classes

Personnaliser la couleur et le edgecolor de l'histogramme

Dans cette étape, vous personnaliserez l'apparence visuelle de l'histogramme. Un graphique bien stylisé est plus facile à lire et plus professionnel. La fonction plt.hist() offre plusieurs paramètres pour le style, notamment color pour le remplissage des barres et edgecolor pour les bordures des barres.

Changeons la couleur des barres en bleu clair et ajoutons des bordures noires pour que chaque classe se détache plus clairement.

Modifiez votre fichier main.py pour inclure ces nouveaux paramètres. Nous enregistrerons ce graphique personnalisé sous le nom histogram_color.png.

import numpy as np
import matplotlib.pyplot as plt

## Générer des données d'échantillon
data = np.random.normal(loc=0, scale=1, size=1000)

## Créer un histogramme avec 30 classes, couleur personnalisée et edgecolor
plt.hist(data, bins=30, color='skyblue', edgecolor='black')

## Enregistrer le graphique dans un nouveau fichier
plt.savefig('/home/labex/project/histogram_color.png')

print("Histogramme stylisé enregistré dans histogram_color.png")

Exécutez le script dans le terminal :

python3 main.py

Vous verrez ce message :

Histogramme stylisé enregistré dans histogram_color.png

Ouvrez le fichier nouvellement créé histogram_color.png. Vous verrez un histogramme beaucoup plus soigné avec des barres bleu clair et des contours noirs distincts.

Histogramme stylisé

Normaliser l'histogramme avec density=True

Dans cette étape, vous apprendrez à créer un histogramme normalisé. Par défaut, l'axe y d'un histogramme représente le nombre de points de données dans chaque classe. Cependant, il est parfois plus utile de visualiser la distribution comme une densité de probabilité. Dans un histogramme normalisé, la hauteur de chaque barre est ajustée de manière à ce que la surface totale de toutes les barres soit égale à 1.

Ceci est réalisé en définissant le paramètre density à True dans la fonction plt.hist(). Il est également conseillé d'ajouter des étiquettes et un titre à votre graphique pour qu'il soit explicite.

Mettons à jour le script pour créer un histogramme normalisé et ajouter des étiquettes descriptives.

import numpy as np
import matplotlib.pyplot as plt

## Générer des données d'échantillon
data = np.random.normal(loc=0, scale=1, size=1000)

## Créer un histogramme normalisé
plt.hist(data, bins=30, color='skyblue', edgecolor='black', density=True)

## Ajouter un titre et des étiquettes
plt.title('Histogramme normalisé des données d\'échantillon')
plt.xlabel('Valeur')
plt.ylabel('Densité de probabilité')

## Enregistrer le graphique dans un nouveau fichier
plt.savefig('/home/labex/project/histogram_normalized.png')

print("Histogramme normalisé enregistré dans histogram_normalized.png")

Exécutez la version finale de votre script :

python3 main.py

La sortie sera :

Histogramme normalisé enregistré dans histogram_normalized.png

Ouvrez histogram_normalized.png. Remarquez que les valeurs de l'axe y sont maintenant beaucoup plus petites. Elles représentent la densité de probabilité, et non les comptes bruts. La forme générale de la distribution reste la même, mais l'échelle est maintenant standardisée, ce qui est utile pour comparer des distributions de jeux de données de tailles différentes.

Histogramme normalisé

Résumé

Félicitations pour avoir terminé ce laboratoire ! Vous avez acquis les compétences essentielles pour créer et personnaliser des histogrammes avec Matplotlib en Python.

Dans ce laboratoire, vous avez :

  • Généré des données d'échantillon à l'aide de numpy.random.normal().
  • Tracé un histogramme de base avec plt.hist().
  • Contrôlé le nombre de classes à l'aide du paramètre bins.
  • Stylisé votre histogramme avec les paramètres color et edgecolor.
  • Créé un histogramme de densité de probabilité normalisé en utilisant density=True.
  • Ajouté un titre et des étiquettes à votre graphique pour un meilleur contexte.

Les histogrammes sont un outil fondamental dans l'exploration et l'analyse des données. Les techniques que vous avez apprises ici vous permettront de visualiser efficacement la distribution de vos propres ensembles de données. N'hésitez pas à continuer à expérimenter avec d'autres paramètres et types de graphiques dans Matplotlib.