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)
# 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
relplot
pour afficher des relations statistiquesdistplot
pour afficher la distribution d’une ou deux variablescatplot
pour afficher la distribution de valeurs *catégorielles
et aussi
jointplot
une version un peu plus élaborée derelplot
pairplot
pour étudier en une seule figure les corrélations entre plusieurs colonnes
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');

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)
hue
pour choisir la couleurstyle
pour choisir la forme (genre x ou o)size
pour la taille des points
et même d’autres plus intéressantes
col
: par exemple avec une colonne catégorielle à trois valeurs, choisir cette colonne avec le paramètrecol
va construire 3 figures situées côte à côterow
: pareil mais les figures sont situées l’une au-dessus de l’autre
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'
);

# 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',
);

# 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',
);

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
solution
df[ df.day.isin(['Sat', 'Sun']) & (df.time == 'Lunch')]
df[(df.day == 'Thur') & (df.time == 'Dinner')]
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)
# 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");

raw-cell
- Unknown Directive
raw-cell
- Unknown Directivepour 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)
# on peut voir qu'il vaut mieux faire
# le service du soir
sns.displot(
data=df,
x='tip',
hue='time',
kind='kde');

# ou encore, la même chose mais en cumulatif
sns.displot(
data=df,
x='tip',
hue='time',
kind='ecdf');

raw-cell
- Unknown Directive
raw-cell
- Unknown Directivepour 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');

# la même chose avec `kind=swarm'
sns.catplot(
data=df,
x='time', hue='time',
y='tip',
kind='swarm');

raw-cell
- Unknown Directive
raw-cell
- Unknown Directivepour 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');

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');

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