Informatique - TD 6 Histogramme
Bcpst2 - Lycée F1
Le but de ce TD est de se rappeler la différence entre un histogramme et un diagramme
et d’être capable de réaliser indifféremment l’un ou l’autre avec Python.
Rappel :
Lorsque l’on dispose d’une série de données réparties en intervalles (appelés des classes),
un histogramme est un graphique sous forme de rectangles permettant d’observer gra-
phiquement la répartition du nombre d’observations de la manière suivante :
les données sont d’abord réparties en intervalles (appelés classes) (visibles gé-
néralement sur l’axe des abscisses)
les rectangles (ayant pour base la longueur de la classe) d’aire proportionnelle au
nombre d’individus de la classe.
Une des différences avec un dia-
gramme est que les rectangles peuvent
ne pas être tous de la même largeur.
Par exemple, supposons que l’on soit
parti d’une population de 17 indivi-
dus répartis de la manière ci-contre :
On a demandé sur le graphique pré-
cédent que l’aire totale soit égale à 1
(i.e. 100%). Ci-dessous, le nombre
d’occurences de chaque classe, ob-
tenue grâce à la fonction bar .
On constate qu’entre 2et 8(exclu), il y a 10 individus, donc environ 60%, soit une
proportion de 0,6. En calculant l’aire du premier rectangle à gauche, on trouve bien
environ
10
|{z}
largeur de la classe : 8-(-2)
×0,06
| {z }
"hauteur" de l’histogramme
= 0,6 = 60%
Il faut donc être attentif au fait suivant : Dans un histogramme, un rectangle peut être
de hauteur plus petite qu’un autre mais comporter quand même plus d’individus. Seule
l’aire compte. (Comparer par exemple la classe [2,8[ avec la classe [11,12[.)
Exercice 1: Premier exemple élémentaire : un "histogramme" qui n’en est pas vrai-
ment un
Imaginons qu’une expérience ait mené aux réalisations suivantes :
1 2 1 2 1 3 4 7
Il existe une commande dans py-
thon qui permet de réaliser au-
tomatiquement le graphique ci-
contre :
1. Est-ce un histogramme (au sens de la définition du début de la feuille) ?
La même fonction peut également donner lieu au graphique suivant :
2. Est-ce un histogramme ? Un diagramme ?
Les deux graphiques ci-dessus ont été obtenus grâce à la commande hist du module
plot de la manière suivante : (essayez)
1import matpl otlib . pyplot as plt
2
3plt . clf () # Ré in it ili sa ti on d ’ un é ve ntue l g ra ph iqu e
précéd ent
4L =[1 ,2 ,1 ,2 ,1 ,3 ,4 ,7]
5plt . hist ( L)
3. On constate que Python a déterminé automatiquement la largeur des classes.
En fait, si rien n’est stipulé, il dessine par défaut 10 classes de même largeur,
(avec pour borne gauche la plus petite des réalisations et pour borne droite
1 TD 6: Histogramme
la plus grande.) Si on veut un nombre de classes différent, il faut lui spécifier
par l’option bins. Essayez le programme suivant et observez le résultat.
1plt . clf ()
2plt . hist (L , bins =7)
Si on veut modifier les bornes gauches et droite, on peut également stipu-
ler exactement les extrémités des classes en entrant une liste à la place d’un
nombre dans l’option bins. Cela permet également de choisir exactement le
nombre de classes souhaitées. Essayez le programme suivant :
1plt . clf ()
2plt . hist (L , bins = range (1 ,9) )
ou
1plt . clf ()
2bins = range (1 ,9)
3plt . hist (L , bins )
On constate que les classes sont découpées de la manière suivante :
[1,2[ [2,3[,[3,4[,[4,5[,[5,6[,[6,7[ [7,8]
Remarquez que le dernier intervalle est fermé des deux côtés et que le dessin
se termine à 8et non à 7comme avant.
4. Pour l’instant, les largeurs de classes dans lesquelles il y a effectivement
des réalisations sont toutes identiques. On a donc bien un histogramme.
En revanche, si on différencie les différentes largeur, par exemple par
bins=[1,3,6,8] ou bins=[1,3,6,7] , on obtient "les mêmes hauteurs" (car
il n’y a pas d’individus de valeur 8dans L) ce qui n’est pas cohérent avec
la définition de l’histogramme. En effet, si la base double de longueur, pour
avoir une aire constante, il faudrait que la hauteur diminue de moitié !
Conclusion : la fonction de Python qui s’appelle hist dessine en
réalité des diagrammes améliorés (si on ne lui spécifie pas d’option
supplémentaire.) (Vous avez donc maintenant à disposition deux fonctions
permettant de dessiner des diagrammes.)
Pour finir, si on spécifie simplement à la commande hist le nombre de classes
en lesquelles il doit découper son graphique, afin d’éviter d’avoir des surprises,
on peut quand même lui imposer l’intervalle global sur lequel il doit analyser
les réalisations avec l’option range. Ainsi,
1plt . clf ()
2plt . hist (L , bins =10 , ra nge =[0 ,8])
va permettre d’avoir un graphique pour lequel on a découpé l’intervalle [0,8]
en 10 classes de largeur identiques. Cela reviendrait donc à faire :
1plt . clf ()
2plt . hist (L , bins = np . li nspa ce (0 ,8 ,11)
Exercice 2: Un histogramme, un vrai cette fois-ci. . .
Reprenons la liste Lde l’exercice précédent.
1. Afin de forcer Python à faire un histogramme avec notre définition, nous al-
lons lui donner l’option normed=True . Il dessinera donc un graphique tel que
l’aire des rectangles soit cette fois-ci proportionnelle aux effectifs des classes
et, cerise sur le gâteau, l’aire totale sera égale à 1. Ainsi, l’aire du rectangle cor-
respondra exactement à la proportion d’individus présents dans cette classe.
(à tester dans la question 2 ci-dessous.)
1plt . clf ()
2 TD 6: Histogramme
2plt . hist (L , normed = True )
Observez le résultat. Attention aux fausses interprétations. La hauteur ne
correspond à la proportion que si la largeur des barres est exacte-
ment de 1.(à méditer.)
Remarque : on peut récupérer la hauteur exacte du rectangle avec une
petite astuce : en tapant
1Val eu rs Hi st o = plt . his t (L , normed = True )
puis en demandant ValeursHisto dans le shell, on observe que ceci est une
liste contenant deux tableaux. Le premier est la valeur des différentes hauteurs
et le deuxième celui des bornes des classes.
2. Tentez de récupérez une de ces valeurs. Par exemple, récupérez la valeur de
la proportion de la classe [1,3[ dans une variable nommée h1.
3. Retrouvez maintenant à partir du graphique "normalisé" obtenu grâce au
programme ci-dessus le nombre d’individus présents dans la première classe
du graphique, sachant qu’il y a au total 8 individus (cf L).
Avec cette option, on peut donc maintenant oublier de vérifier si la
largeur des barres est oui on non identique, on obtient bien un véritable
histogramme.
Exercice 3: Un éventuel problème esthétique de lecture sur le graphique
Reprenons encore la liste Ldonnée lors des exercices précédents dans le but de
faire un graphique se rapportant plus à un diagramme d’effectif ou de proportion
des modalités qu’à un histogramme.
Les données de Lvont de 1 à 7. On observe sur les histogrammes obtenus précé-
demment que si on ne spécifie pas les classes exactes dans bins, les abscisses vont
de "min(L)" à "max(L)". Lorsque les valeurs sont entières et qu’on s’intéresse à
l’effectif de chaque modalité (i.e. 1,2,3,4,7), la classe [6,7] n’est pas pertinente
puisqu’on n’arrive pas vraiment à savoir grâce au graphique seul si l’effectif est lié
au 6 ou au 7.
Utiliser les options données au cours du TD pour réaliser en une ligne maximum
le graphique ci-dessous avec la fonction hist (deux lignes sont autorisées si la
première ligne consiste à effacer le graphique précédent.)
où :
- l’axe des abscisses détaille toutes les modalités possibles de 1à7.
- Les barres sont centrées sur les modalités
- Les hauteurs des barres correspondent aux propotions de leur modalité respec-
tive.
3 TD 6: Histogramme
1 / 3 100%