Tutoriel Python : créer un histogramme

Table des matières

Introduction

  1. Qu'est-ce qu'un histogramme ?
  2. Différence entre un histogramme et un diagramme à barres
  3. Quand est-ce que vous devez utiliser un histogramme ?
  4. Créez votre premier histogramme à l'aide de Matplotlib

3.1. Les paramètres de la méthode hist()

3.2. Personnaliser votre histogramme

3.3. Déterminer le nombre des intervalles (bins)

  1. Tracer un histogramme avec pandas

4.1. Créer votre premier histogramme à l'aide de pandas

4.2. Créer un histogramme à partir d'un fichier csv à l'aide de pandas

  1. Exercices
  2. Solution des exercices

Conclusion

Introduction

L'exploration et la communication des données sont l'objectif principal de la visualisation de ces derniers. Quand les données sont visualisées (dans un histogramme ou sous d'autres formes), les motifs deviennent immédiatement évidents. Vous saurez rapidement s'il y a une tendance à la hausse (graphique linéaire) ou l'ampleur relative de quelque chose par rapport à d'autres facteurs (par exemple, en utilisant une interprétation graphique). Au lieu de dire aux gens une longue liste de nombres, il est préférable de simplement leur montrer un visuel pour une meilleure clarté.

Dans ce tutoriel python, nous allons évoquer la façon de visualiser les données à l'aide d'histogrammes en utilisant les deux bibliothèques Pandas et Matplotlib.

1. Qu'est-ce qu'un histogramme ?

Un histogramme se compose de rectangles adjacents érigés sur l'axe des x, divisés en discrets intervalles appelés (bins), et avec une aire proportionnelle à la fréquence des occurrences pour cet intervalle. Ce type de visualisation est couramment utilisé dans les études statistiques sur distribution d'échantillons.

  •   Les caractéristiques d’un histogramme

Généralement, un histogramme aura des barres de largeur égales, bien que ce ne soit pas le cas lorsque les intervalles de classe varient en taille. Le choix de la largeur appropriée des barres pour un histogramme est très important. Comme vous pouvez le voir dans les exemples de notre tutoriel, l'histogramme se compose simplement d'un ensemble de barres verticales. Les valeurs de la variable étudiée sont mesurées sur une échelle arithmétique le long de l'axe horizontal des x. Les barres sont de largeur égale et correspondent aux intervalles de classe égaux, tandis que la hauteur de chaque barre correspond à la fréquence de la classe qu'elle représente. Si vous voulez représenter une population par âge sous forme de graphique, l'histogramme reste convenable. Car cela représentera la fréquence de l'âge des personnes dont vous disposez.

2. Différence entre un histogramme et un diagramme à barres

L'histogramme fait référence à une représentation graphique (ou statistique); qui affiche les données sous forme de barres pour montrer la fréquence des données numériques. Cependant, un diagramme à barres est une représentation graphique des données qui utilise des bandes pour comparer les différents types de données.

1. Quand est-ce que vous devez utiliser un histogramme ?

Lorsque vous ne savez pas comment représenter un grand ensemble de mesures présentées dans une table de données, vous pouvez utiliser un histogramme pour organiser et afficher les données dans un format plus convivial. Un histogramme permet de voir facilement la distribution des données selon une échelle de mesure ainsi que le nombre de variations. Il est utile donc de construire un histogramme lorsque vous souhaitez effectuer les opérations suivantes:

  • Résumer graphiquement de grands ensembles de données.
  • Afficher les résultats du processus avec les limites de spécification. Si vous ajoutez les limites de spécification de processus à votre histogramme, vous pouvez déterminer rapidement si le processus actuel était capable de produire de "bons" produits.
  • Communiquer graphiquement les informations. Les membres de l'équipe peuvent facilement voir les valeurs les plus fréquentes. Lorsque vous utilisez un histogramme pour résumer de grands ensembles de données ou comparer les mesures aux spécifications limites, vous utilisez un outil puissant pour communiquer des informations.
  • Utiliser un outil pour aider à la prise de décision. Comme vous le voyez en bougeant tout au long de ce module, certaines formes et tailles ont des significations qui peuvent vous aider à enquêter sur les problèmes et à prendre des décisions.

3. Créez votre premier histogramme à l'aide de Matplotlib

Matplotlib est la bibliothèque Python qui est actuellement la plus populaire pour produire des graphiques et autres visualisations de données en 2D. Étant donné que l'analyse des données nécessite des outils de visualisation, c'est la bibliothèque qui convient le mieux à cet objectif. Essayons donc de créer un histogramme en l'utilisant :

Pr exemple, considérons une liste de nombres [10,10,20,20,20,30,30,30,40,40]

X

10

20

30

40

Fréquence

2

3

3

2

Syntaxe :

import matplotlib.pyplot as plt
x = [10,10,20,20,20,30,30,30,40,40]
plt.hist(x,4 ,edgecolor = 'white')
plt.show()

 Résultat d’exécution :

Mais comme vous le voyez, les étiquettes X ne sont pas les mêmes que nos valeurs de liste, la largeur de la barre est trop large. Pour les corriger, il suffit d'ajouter le code suivant :

Syntaxe :

plt.hist(x, 4, width = 5, edgecolor = 'white')
plt.xticks([10,20,30,40])
plt.show(

Résultat d’exécution :

3.1. Les paramètres de la méthode hist()

La méthode hist() accepte les paramètres suivants:

Paramètres

Interprétation

x:

Ce paramètre est la séquence de données.

bins:

ce paramètre est un paramètre très important et il contient l'entier, la séquence ou la chaîne pour déterminer la largeur d’intervalles

range:

Ce paramètre est un paramètre facultatif et correspond à la plage inférieure et

supérieure des Intervalles.

densité:

Ce paramètre est un paramètre facultatif et il contient les valeurs booléennes.

poids:

Ce paramètre est un paramètre facultatif et c'est un tableau de poids, de la même forme que x.

bottom:

Ce paramètre est l'emplacement de la ligne de base inférieure de chaque Intervalle.

histtype:

Ce paramètre est un paramètre facultatif et il est utilisé pour dessiner le type

d'histogramme. {"Bar", "barstacked", "step", "stepfilled"}

align:

Ce paramètre est un paramètre facultatif et il contrôle la façon dont l'histogramme est

tracé. {"Gauche", "milieu", "droite"}

rwidth:

Ce paramètre est un paramètre facultatif et il s'agit d'une largeur relative des barres en tant que fraction de la largeur de l’Intervalle

log:

Ce paramètre est un paramètre facultatif et il est utilisé pour définir l'axe de l'histogramme sur une échelle logarithmique

color:

Ce paramètre est un paramètre facultatif et il s'agit d'une spécification de couleur ou

d'une séquence de spécifications de couleur, une par ensemble de données.

label:

ce paramètre est un paramètre facultatif et il s'agit d'une chaîne ou d'une séquence de chaînes correspondant à plusieurs ensembles de données.

normed:

Ce paramètre est un paramètre facultatif et il contient les valeurs booléennes. Il utilise à Laplace l'argument du mot clé de densité.

n:

Ceci renvoie les valeurs des Intervalles d'histogramme.

bins:

Ceci renvoie les bords des Intervalles.

patches:

Ceci renvoie la liste des patches individuels utilisés pour créer l'histogramme.

3.2. Personnaliser votre histogramme

Un simple histogramme peut être très utile pour avoir un premier regard sur les données. Cependant, comparés à d'autres types de graphes importants tels que les graphiques à secteurs, à bandes ou à lignes, ils sont plutôt ennuyeux à visualiser. Plus important encore, ils nécessitent un contexte statistique pour être interprétés correctement. Cependant, avant d'abandonner complètement l'histogramme, essayons de le rendre plus beau, plus riche en informations et plus facile à interpréter!

3.2.1. Ajouter un titre d'histogramme et des noms d'axes

Pour ajouter un titre à votre histogramme, utilisez la syntaxe suivante :

Syntaxe :

Plt.title(‘votre premier Histogramme’)

Pour donner un nom à l’axe y et l’axe x, utilisez la syntaxe suivante :

Syntaxe :

plt.xlabel('Variable x’)
plt.ylabel('Fréquence’)

Résultat d’exécution :

3.2.2. Changer la transparence et la couleur de votre histogramme

Vous pouvez modifier le degré de transparence de l'histogramme en ajoutant l'argument «alpha» avec des valeurs comprises entre 0 et 1. 1 est la valeur par défaut.

Syntaxe :

plt.hist(x,4, width = 5,  alpha=0.5) ,color=’red’

Résultat d’exécution :

3.2.3. Définir vos propres techniques de style dans Matplotlib

Vous pouvez définir vos propres styles de graphes à partir des styles disponibles dans la bibliothèque de matplotlib. Afin de récupérer le nombre de styles disponibles dans matplotlib, utilisez l'instruction suivante :

Syntaxe :

import matplotlib.pyplot as plt
import matplotlib as mlp
print(plt.style.available)

Résultat d’exécution :

Par exemple, nous allons choisir le style « seaborn-ticks» et l'appliquer à notre exemple précédent

Il suffit alors d'ajouter la ligne suivante à votre code :

Syntaxe :

plt.style.use('seaborn-ticks')

Résultat d’exécution :

3.3. Déterminer le nombre des intervalles (bins)

Supposons que vous disposiez des données suivantes sur l'âge de 100 personnes:

Age

1,1,2,3,3,5,7,8,9,10,
10,11,11,13,13,15,16,17,18,18,
18,19,20,21,21,23,24,24,25,25,
25,25,26,26,26,27,27,27,27,27,
29,30,30,31,33,34,34,34,35,36,
36,37,37,38,38,39,40,41,41,42,
43,44,45,45,46,47,48,48,49,50,
51,52,53,54,55,55,56,57,58,60,
61,63,64,65,66,68,70,71,72,74,
75,77,81,83,84,87,89,90,90,91

Vous pouvez dériver les intervalles en utilisant les formules suivantes:

n = nombre d'observations

Intervalles = valeur maximale - valeur minimale

Nombre d'intervalles = ?n

Largeur des intervalles = Intervalle / (nombre d'intervalles)

Ces formules peuvent ensuite être utilisées pour créer le tableau des fréquences suivies de l'histogramme.

Rappelons que notre ensemble de données contenait 100 observations :

n = nombre d'observations = 100

Intervalles = valeur maximale - valeur minimale = 91-1 = 90

Nombre d'intervalles = ?n = ?100 = 10

Largeur des intervalles = intervalles / (nombre d'intervalles) = 90/10 = 9

Sur la base de ces informations, le tableau des fréquences ressemblerait à ceci

Intervalles (bins)

Fréquence

0-9

9

10-19

13

20-29

  19

30-39

15

40-49

13

50-59

10

60-69

7

70-79

6

80-89

5

90–99

3

Notez que le point de départ du premier intervalle est 0, ce qui est très proche de l'observation minimale de 1 dans notre ensemble de données. Si, par exemple, l'observation minimale était de 20 dans un autre ensemble de données, le point de départ du premier intervalle devrait être 20 au lieu de 0.

Pour les intervalles (bins) dans le code Python ci-dessous, vous devrez spécifier les valeurs surlignées en rouge, plutôt qu'un nombre particulier (tel que 10, que nous utilisions auparavant). N'oubliez pas d'inclure la dernière valeur de 99. Voici à quoi ressemblerait le code Python:

Syntaxe :

import matplotlib.pyplot as plt
x = [1, 1,2,3,3,5,7,8,9,10,
18,19,20,21,21,23,24,24,25,25,
10,11,11,13,13,15,16,17,18,18,
25,25,26,26,26,27,27,27,27,27,
29,30,30,31,33,34, 40,41,41,42,
36,37,37,38,38,39, 34,34,34,35,36,
51,52,53,54,55,,47,48,48,49,50,
43,44,45,45,46, 55,56,57,58,60,
61,63,64,65,66,68,70,71,72,74,
75,77,81,83,84,87,89,90,90,91
]
plt.hist(x,bins=[0,10,20,30,40,50,60,70,80,90,99], width = 4, edgecolor = 'white', alpha=0.5, color='red')
plt.xticks([10,20,30,40])
plt.title('Histogramme')
plt.xlabel('Age')
plt.ylabel('Fréquence')
plt.style.use('seaborn-ticks')
plt.show()

Résultat d’exécution :

4. Tracer un histogramme avec pandas

Pandas est une bibliothèque écrite pour le langage de programmation Python qui est utilisé en particulier pour la manipulation et l'analyse des données.

Pandas est similaire à Excel pour Python, avec des tables (qui dans les pandas sont appelées DataFrames), des lignes et des colonnes (qui dans les pandas s'appellent des séries), et de nombreuses fonctionnalités qui en font une excellente bibliothèque pour le traitement, l'inspection et la manipulation des données.

Pandas s'appuie sur Matplotlib, l'une des autres bibliothèques principales qui devraient être présentées dans la boîte à outils de n’importe quel Data Scientist, et comme nous le verrons, il existe de nombreuses fonctions pandas qui en sont naturellement dérivées.

4.1. Créer votre premier histogramme à l'aide de pandas

Considérons les données suivantes sur le changement de degré de température en un mois :

Température

12 ,12 ,14,15,15,17,12,30,

30,22,22,18,18,20,17,17, 36,36

36,22,25,25,22,19,19,31 ,31,31,31,27

Créons un histogramme basé sur ces données

Syntaxe :

import pandas as pd
données = pd.DataFrame({
'Température': [12 ,12 ,14,15,15,17,12,30,
30,22,22,18,18,20,17,17, 36,36,
36,22,25,25,22,19,19,31 ,31,31,31,27]})
hist = données.hist(bins=5,width=4)
plt.xlabel('Température')
plt.ylabel('Jours')

Résultat d’exécution :

4.2. Créer un histogramme à partir d'un fichier csv à l'aide de pandas

Parfois, nous devons tracer des histogrammes afin d’analyser des blocs de données en profondeur. Dans ce cas, la fonction dataframe.hist () aide beaucoup. En utilisant cette fonction, nous pouvons tracer des histogrammes en fonction de colonnes que nous souhaitons.

Imaginons que nous ayons les mêmes données de l'exemple précédent dans un fichier csv qui ressemble à ça :

Créons un histogramme à partir de ce fichier csv :

Pour télécharger le fichier csv :

https://drive.google.com/file/d/1isLpCg7KN18HUuylNS_4MEy3apT0YOnG/view?usp=sharing

Syntaxe:

import pandas as pd
df_température = pd.read_csv('TEMP.csv')
df_température['Température'].plot(kind='hist',bins=5,width=4);
plt.xlabel('Température')
plt.ylabel('Jours')

Résultat d’exécution :

Remarque : Pour ajouter le style seaborn à votre histogramme, vous devez l'importer et l'utiliser en ajoutant la syntaxe suivante à votre code:

Syntaxe:

import seaborn as sns
sns.set(font_scale=1.7)

5. Exercices

Imaginez que nous avons une donnée de 40 notes d'étudiants qui ressemble à ceci :

Notes :[12 ,8,8,13 ,13,15,15,16,14,14,17,19,19,11 ,11,12,11,10,10,10,13,16,16,12,12,10,14,14 ,15,16,8,9,9,7,7,13,11,14,7,8 ]

  • Questions :
  1. Calculez le nombre possible des intervalles (bins)
  2. Tracez un histogramme à l'aide de la bibliothèque matplotlib avec les  caractéristiques suivantes :

Titre: Histogramme des Notes / Etudiants

Nom de l'axe X: notes des étudiants

Nom d’axes-Y: nombre des étudiants

Style: seaborn

Transparence: 0,6

Couleur : rouge

Largeur : 2

  1. En utilisant le fichier csv suivant et Pandas, créez un histogramme avec les mêmes caractéristiques

Lien de fichier csv :

https://drive.google.com/file/d/13kFmMywtF5UnjznrzQUGSf1JU81bIw5n/view?usp=sharing

6. Solution des exercices

  1. Pour déterminer la largeur des intervalles, nous allons utiliser la formule que nous avons vu précédemment

 n = nombre d'observations = 40

Intervalle = valeur maximale - valeur minimale =1 9-7 = 12

Nombre d'intervalles = ?n = ?40 = 6

Largeur des intervalles = Intervalles/ (nombre d'intervalles) = 12/6= 2

2.

Syntaxe :

import matplotlib.pyplot as plt
notes = [12 ,8,8,13 ,13,15,15,16,14,14,17,19,19,11 ,11,12,11,10,10,10,13,16,16,12,12,10,14,14 ,15,16,8,9,9,7,7,13,11,14,7,8
]
plt.hist(notes,bins=[7,10,13,16,19], width = 2, alpha=0.7, color='red')
plt.title('Histogramme des notes/etudiants')
plt.xlabel('Notes des étudiants')
plt.ylabel('Nombre des étudiants')
plt.style.use('seaborn')
plt.show()

Résultat d’exécution :

  1. Pour créer l'histogramme à partir du fichier csv, nous allons utiliser la bibliothèque Pandas :

Syntaxe :

import pandas as pd
import seaborn as sns
df_notes = pd.read_csv('notes.csv')
df_notes['Notes'].plot(kind='hist',bins=[7,10,13,16,19], width = 2, alpha=0.7, color='red');
plt.title('Histogramme des notes/etudiants')
plt.xlabel('Notes des étudiants')
plt.ylabel('Nombre des étudiants')
plt.style.use('seaborn')

Résultat d’exécution :

Conclusion

Les histogrammes sont un outil de visualisation puissant pour inspecter facilement la distribution  de notre ensemble de données. Cependant, il est important de garder à l'esprit le nombre d’Intervalles (bins) et d'essayer d'avoir des Intervalles de même largeur pour faciliter l'interprétation.

Article publié le 24 Novembre 2020par Mouhtat Bilal