Si vous êtes Data Scientist, vous avez sans doute déjà travaillé avec des graphiques à nuage de points. Malgré leur simplicité, les graphiques à nuage de points sont des outils puissants pour visualiser des données. Il existe de nombreuses façons de les représenter en fonction des attributs tels que la couleur, la taille, la forme et le tracé de régression.

Dans cet article, je vous dis à peu près tout ce que vous devez savoir sur la visualisation de données avec des graphiques à nuage de points! Nous allons passer en revue tous les paramètres et voir quand et comment les utiliser (code inclus). Il se peut que vous trouviez quelques bonnes surprises et astuces que vous pourrez ajouter à votre boîte à outils Data Science!

Importation des bibliothèques:

Avant de commencer à tracer nos différents graphiques à nuage de points, je vous invite à importer les bibliothèques dont nous aurons besoin:

import seaborn as sns
import matplotlib.pyplot as plt

Chargement du dataset:

Nous allons travailler sur le dataset iris et commencer par charger celui-ci dans un Dataframe:

df = sns.load_dataset('iris')

Notion de régression

Lorsque nous traçons pour la première fois nos données sur un graphique à nuage de points, cela nous donne déjà un aperçu rapide de nos données:

# Graphique à nuage de points
sns.regplot(x=df["sepal_length"], y=df["sepal_width"], fit_reg=False)
plt.show()

graphique nuage de points

Nous pouvons déjà voir les groupes où la plupart des données semblent se regrouper. Ainsi nous pouvons rapidement identifier les valeurs aberrantes.

Mais il est également agréable de voir à quel point notre tâche peut être compliquée; nous pouvons le faire avec un tracé de régression:

# Régression linéaire ajustée au graphique précédent
sns.regplot(x=df["sepal_length"], y=df["sepal_width"], fit_reg=True)
plt.show()

graphique régression linéaire

Dans la figure ci-dessus, nous avons réalisé un tracé linéaire. Il est assez facile de voir qu’une fonction linéaire ne fonctionnera pas car beaucoup de points sont assez éloignés de la ligne.

# Régression polynomiale ajustée au graphique d'origine
sns.regplot(x=df["sepal_length"], y=df["sepal_width"], fit_reg=True, order=4)
plt.show()

graphique régression polynomiale

La fonction ci-dessus utilise un polynôme d’ordre 4 et semble beaucoup plus prometteuse. Il semble donc que nous aurons certainement besoin de quelque chose d’au moins 4 pour modéliser cet ensemble de données.

Couleur et forme

Les couleurs et les formes peuvent être utilisées pour visualiser les différentes catégories de votre dataset. Couleur et forme sont très intuitives pour le système visuel humain. Lorsque vous regardez un graphique où les groupes de points ont des couleurs différentes ou des formes différentes, il est tout de suite évident que les points appartiennent à des groupes différents. Cela a naturellement un sens pour nous. Cette intuition naturelle correspond toujours à ce que vous voulez faire pour créer des visualisations de données claires et convaincantes.

“Ce qui est évident se passe d’explication.”

# On utilise l'argument 'hue' pour fournir une variable de facteur
sns.lmplot( x="sepal_length", y="sepal_width", data=df, fit_reg=False, hue='species', legend=False)
plt.legend(loc='lower right')
plt.show()

graphique couleur

La figure ci-dessus montre les classes regroupées par couleur.

sns.lmplot( x="sepal_length", y="sepal_width", data=df, fit_reg=False, hue='species', legend=False, markers=["o", "P", "D"])
plt.legend(loc='lower right')
plt.show()

graphique couleur et forme

La figure ci-dessus montre les classes séparées par leur couleur et leur forme.

Dans les deux cas, il est beaucoup plus facile de voir les groupes que sur le premier graphique avec tous les points en bleu! Nous savons maintenant qu’il sera probablement facile de séparer la classe setosa avec une erreur faible et que nous devrions concentrer notre attention sur la manière de séparer les deux autres. Il est également clair qu’un seul tracé linéaire ne pourra séparer les points vert et orange; nous aurons besoin d’une dimension supérieure.

Choisir entre couleur et forme devient une question de préférence. Personnellement, je trouve la couleur un peu plus claire et intuitive, mais le choix vous appartient!

Distribution des points avec histogrammes

Les nuages de points avec des histogrammes marginaux sont ceux qui ont des histogrammes au dessus et sur les côtés, représentant la distribution des points pour les entités le long des axes x et y. C’est un petit ajout, mais il est bon de voir la répartition exacte de nos points et d’identifier plus précisément nos points aberrants.

sns.jointplot(x=df["sepal_length"], y=df["sepal_width"], kind='scatter')
plt.show()

histogrammes marginaux

Dans la figure ci-dessus, nous pouvons voir pourquoi l’axe a une très forte concentration de points autour de 3,0. Comment sont-ils concentrés? C’est ce qui se voit le plus facilement dans l’histogramme complètement à droite, ce qui montre qu’il ya au moins trois fois plus de points autour de 3,0 que pour toute autre plage discrète. Nous constatons également qu’il n’ya pratiquement aucun point au dessus de 3,75 par rapport aux autres gammes. En revanche, pour l’axe des x, les choses sont un peu plus égales, à l’exception des valeurs extrêmes tout à droite.

Graphiques à bulles

Avec les graphiques à bulles, nous pouvons utiliser plusieurs variables pour coder les informations. Le nouveau paramètre que nous allons ajouter ici est la taille. Dans la figure ci-dessous, nous indiquons le nombre de frites mangées par chaque personne en fonction de leur taille et de leur poids. Notez qu’un nuage de points n’est qu’un outil de visualisation 2D, mais que, grâce à différents attributs, nous pouvons représenter des informations en 3 dimensions.

Ici, nous utilisons la couleur, la position et la taille. La position détermine la taille et le poids de la personne, la couleur détermine le sexe et la taille détermine le nombre de frites mangées! Le graphique à bulles nous permet de combiner facilement tous les attributs en un graphique afin que nous puissions voir les informations de grande dimension dans une simple vue 2D.

graphique à bulles

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

x = np.array([100, 105, 110, 124, 136, 155, 166, 177, 182, 196, 208, 230, 260, 294, 312])
y = np.array([54, 56, 60, 60, 60, 72, 62, 64, 66, 80, 82, 72, 67, 84, 74])
z = (x*y) / 60

for index, val in enumerate(z):
    if index < 10:
        color = 'g'
    else:
        color = 'r'
    plt.scatter(x[index], y[index], s=z[index]*5, alpha=0.5, c=color)

red_patch = mpatches.Patch(color='red', label='Homme')
green_patch = mpatches.Patch(color='green', label='Femme')
plt.legend(handles=[green_patch, red_patch])

plt.title("French fries eaten vs height and weight")
plt.xlabel("Poids (pounds)")
plt.ylabel("Taille (inches)")

 

Si cet article vous a plus,  n’hésitez pas à le partager 🙂