Parce qu'un dessin vaut mieux qu'un long discours, la réalisation de graphiques est une activité très importante en science des données pour voir des caractéristiques des données.
Ce TP a donc pour objectif de réaliser des graphiques simples permettant de visualiser différentes caractéristiques d'un jeu de données.
On utilisera le paquetage matplotlib. Souvent, on le renomme plt
au chargement : import matplotlib.pyplot as plt
.
Remarque : il y a deux manières de réaliser des graphiques avec matplotlib. Dans un premier temps, nous allons présenter la méthode la plus simple qui permet de réaliser des graphiques simples. Nous verrons ensuite une autre méthode, à peine plus compliquée, qui permet de réaliser des graphiques bien plus riches et complexes.
La documentation est en-ligne :
Ce TP est la suite du TP sur les tableaux de données. Celui-ci doit avoir été réalisé avant de commencer ce TP.
Il faut donc charger le jeu de données dans un tableau de données avant de commencer.
L'un des premiers types de graphiques que l'on réalise consiste à visualiser la répartition des valeurs des attributs.
Commençons par
olives.plot () plt.show()
ce qui donne :
On peut faire des remarques :
En conclusion ce graphique est très mauvais. Malgré cela, on peut s'en servir comme base d'un exercice de réalisation de graphique en Python. En regardant la documentation, transformez-le dans le graphique ci-dessous auquel on a ajouté un titre général et des titres aux axes des abscisses et des ordonnées :
Une manière d'obtenir une représentation qui a du sens, c'est-à-dire qui montre bien l'information que l'on veut montrer, consiste à utiliser une boîte à moustaches.
olives.plot.box (title = "Répartition des valeurs des attributs\n du jeu de données olives", xlabel = "Attribut", ylabel = "Répartition des valeurs de l'attribut") plt.show()
qui donne :
On retrouve le même problème que précédemment, oleic ayant des valeurs bien supérieures aux autres attributs, et palmitic et linoleic étant eux-aussi bien plus grands que tous les autres attributs. Le plus simple est de faire trois graphiques.
À faire : réalisez ces trois graphiques. Que représentent les barres, les moustaches et les petits cercles ? Calculez-les et confirmez le sens de ces éléments graphiques.
Un histogramme fournit beaucoup d'information sur la répartition des valeurs d'un attribut. Dans certains cas, on peut juger d'un coup d'œil que les valeurs ne sont pas distribuées uniformément ou normalement, ce qui est une information importante.
On utilise pour cela la méthode plot.hist (bins = ..., ...). Le paramètre bins indique la finesse de l'histogramme. Les autres paramètres sont à peu près les mêmes que pour plot.box.
À faire : regardez la documentation et réalisez ces 8 graphiques ci-dessous. Utilisez une boucle pour générer les 8 graphiques d'un coup.
Là encore, prenez-le temps d'observer ces graphiques et de les interpréter.
Un histogramme représente une version discrétisée d'une distribution de probabilités continue. Plutôt qu'un histogramme, on peut obtenir une estimation d'une distribution de probabilités avec la fonction plot.density ()
.
À faire : regardez la documentation et réalisez ces 8 graphiques ci-dessous. Utilisez une boucle pour générer les 8 graphiques d'un coup.
Là encore, prenez-le temps d'observer ces graphiques et de les interpréter.
On voit bien que le tracé obtenu par plot.density()
correspond aux histogrammes pour chacun des attributs.
Ces deux visualisations produisent des résultats qui se ressemblent : on retrouve les mêmes pics et creux. Néanmoins, elles sont à utiliser avec prudence : ni l'une ni l'autre ne représente une information parfaite. Si on peut se dire que les 4 premiers couples (histogramme, densité) se ressemblent, c'est beaucoup moins évidents pour les 4 suivants. Les histogrammes montrent des pics qui n'apparaissent pas dans les densités estimées. Ces pics isolés dans les histogrammes sont lissés dans les densités et disparaissent : existent-ils ? Quelle méthode donne la visualisation la plus fidèle des données ?
L'allure de l'histogramme dépend fortement de la discrétisation utilisée (le paramètre bins), notamment si le nombre de données est faible par rapport à la discrétisation.
Par ailleurs, il existe plusieurs manières de réaliser un histogramme, chacune donnant une certaine représentation de la distribution des valeurs d'un attribut.
De même, la forme de la densité estimée varie selon les paramètres utilisés. Ici, on a utilisé les paramètres par défaut. Dans une application réelle, il faut ajuster les paramètres.
À faire : refaire les histogrammes en utilisant différentes valeurs pour l'attribut bins
.
Une part très importante de la science des données consiste à trouver des relations entre des attributs. Pour cela, on peut s'aider de visualisations graphiques.
Un scatter plot est un graphique en 2 dimensions : chaque axe correspond à un attribut : on représente chaque donnée par un point défini par ces deux attributs.
La méthode plot.scatter() s'applique à un data frame et crée un tel graphique : elle prend au moins deux paramètres : x et y qui indique les deux attributs à utiliser. On peut ajouter un titre et d'autres informations.
À faire : faites un scatter plot pour les attributs oleic et palmitic. Vous devez obtenir ceci :
Il est courant de donner des couleurs différentes aux données selon la valeur de l'un de leurs attributs. Par exemple, on pourrait donner des couleurs différentes en fonction de la région d'origine de l'olive, en utilisant pour cela l'attribut region.
Le paramètre c indique l'attribut à utiliser (son nom ou son numéro) et le paramètre colormap indique la palette de couleur à utiliser (voir les palettes pré-définies sur cette page).