Skip to article frontmatterSkip to article content

une librairie de visualisation plus évoluée que matplotlib pour faire de l’exploration de données

import seaborn as sns

quelques goodies

# assez pratique, les jeux de données courants

# celui-ci vous le connaissez :)
titanic = sns.load_dataset('titanic')

# et nous ici on va utiliser celui-ci
tips = sns.load_dataset('tips')
# voyons les pingouins
df = tips

df.head(5)
Loading...
# at aussi, tout à fait optionnel
# mais seaborn vient avec des styles

sns.set_style('darkgrid')

les grandes familles de plot

nous allons voir quelques-uns des plot exposés par seabord

et aussi

voyons cela sur quelques exemples

relplot()

dans la table des pingouins, on choisit les deux colonnes total_bill et tip pour voir leur corrélation

# commençons par une forme
# pas trop intéressante

sns.relplot(data=df, x='total_bill', y='tip');
<Figure size 500x500 with 1 Axes>

jusque-là, rien de bien original; mais en fait avec seaborn on peut utiliser davantage que ces deux dimensions x et y, et notamment (on va voir des exemples tout de suite)

et même d’autres plus intéressantes

ce qui en tout, permet de faire en principe des visualisations à 7 dimensions (x, y, hue, style, size, col et row

comme promis voici quelques exemples

# hue=
#
# la même visu mais qui fait ressortir 
# le déjeuner et le diner en couleurs

sns.relplot(data=df, x='total_bill', y='tip', 
            hue='time',   # time vaut 'Lunch' ou 'Dinner'
           );
<Figure size 596.375x500 with 1 Axes>
# col=
#
# toujours la même donnée, mais cette fois
# on met le déjeuner à gauche et le diner à droite
sns.relplot(data=df, x='total_bill', y='tip', 
            col='time',
           );
<Figure size 1000x500 with 2 Axes>
# etc etc
# on peut tout combiner de cette façon...
# et donc en tout on peut mettre en évidence
# jusque 7 dimensions

sns.relplot(data=df, 
            x='total_bill', y='tip', 
            col='time', row='day',
            hue='sex', size='size', style='smoker',
           );
<Figure size 1101x2000 with 8 Axes>
Exercise 1 (révision masques)

vérifiez que les données contiennent une seule entrée pour le jeudi soir, et aucune pour les samedi et dimanche à midi

affichage des incertitudes

signalons enfin, pour le même genre de figures, que seaborn permet aussi de visualiser les variations pour les données multiples

# un exemple de données où on a plusieurs valeurs (signal) pour le méme X (ici timepoint)

fmri = sns.load_dataset("fmri")
fmri.head(10)
Loading...
# si on ajoute `kind=line` on indique qu'on veut un "lineplot" 
# et non pas un "scatterplot" comme tout à l'heure
# dans ce cas seaborn va nous montrer 
# les intervalles de confiance autour de la moyenne

sns.relplot(data=fmri, x="timepoint", y="signal", kind="line");
<Figure size 500x500 with 1 Axes>
raw-cell - Unknown Directive
pour en savoir plus: <https://seaborn.pydata.org/tutorial/relational.html>

displot()

avec displot on peut représenter la distribution d’une variable numérique; en reprenant les données sur les tips

df = tips
df.head(2)
Loading...
# on peut voir qu'il vaut mieux faire
# le service du soir

sns.displot(
    data=df,
    x='tip',
    hue='time',
    kind='kde');
<Figure size 596.375x500 with 1 Axes>
# ou encore, la même chose mais en cumulatif

sns.displot(
    data=df,
    x='tip',
    hue='time',
    kind='ecdf');
<Figure size 596.375x500 with 1 Axes>
raw-cell - Unknown Directive
pour en savoir plus: <https://seaborn.pydata.org/tutorial/distributions.html>

catplot()

par exemple, la même donnée mais avec d’autres représentations

# en x une valeur catégorielle

sns.catplot(
    data=df,
    x='time', hue='time',
    y='tip',
    kind='box');
<Figure size 500x500 with 1 Axes>
# la même chose avec `kind=swarm'

sns.catplot(
    data=df,
    x='time', hue='time',
    y='tip',
    kind='swarm');
<Figure size 500x500 with 1 Axes>
raw-cell - Unknown Directive
pour en savoir plus: <https://seaborn.pydata.org/tutorial/categorical.html>

jointplot()

cet outil est très pratique pour fabriquer en un seul appel des vues croisées entre plusieurs colonnes; par exemple

# toujours la corrélation entre 
# les pourboires et le montant de l'addition

sns.jointplot(
    data=df,
    x='total_bill',
    y='tip',
    hue='time');
<Figure size 600x600 with 3 Axes>

pairplot()

va nous montrer la corrélation entre toutes les colonnes numériques
ici nous en avons 3:

df.dtypes
total_bill float64 tip float64 sex category smoker category day category time category size int64 dtype: object
# ce qui donne un diagramme carré de 3x3 figures:

# sur la diagonale on retrouve un displot de cette colonne
# et dans les autres cases un relplot entre les deux colonnes
# on peut visualiser les colonnes de catégories pour
# par exemple la couleur

sns.pairplot(
    data=df,
    hue='time');
<Figure size 846.375x750 with 12 Axes>

exercice

conclusion

ce (très) rapide survol devrait vous convaincre de l’utilité de cette librairie, qui permet de gagner beaucoup de temps pour l’analyse visuelle de vos données