import pandas as pd
from pandas.plotting import scatter_matrix
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cm import viridis, plasma
import seaborn as sns
sns.set()

tips = sns.load_dataset("tips")
# pour se debarrasser du type Category
for colonne in ['sex', 'smoker', 'day', 'time']:
  tips[colonne] = tips[colonne].astype(object)

# pour reduire le nombre de lignes
tips = tips.groupby(['sex', 'smoker', 'day', 'time', 'size']
  )[['total_bill', 'tip']].sum().reset_index().iloc[:30]

# pour verifier que l'index est  utilise dans certains graphiques
tips.index = range(50,80)

tips.head()
       sex smoker  day    time  size  total_bill    tip
50  Female     No  Fri  Dinner     2       22.75   3.25
51  Female     No  Fri   Lunch     3       15.98   3.00
52  Female     No  Sat  Dinner     1        7.25   1.00
53  Female     No  Sat  Dinner     2      149.28  21.23
54  Female     No  Sat  Dinner     3       69.83  10.74

Introduction

On peut generer des graphiques en une ligne de code avec pandas, pour une exploration rapide des donnees. On presente ci-dessous une partie des possibilites offertes, on trouve beaucoup plus de details sur https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html

Avec l’index sur un des axes

Courbes

Courbes sur un meme graphique.

tips.plot()
plt.show()

Un graphique par courbe.

g = tips.plot(subplots = True)
plt.show()

Les cumul des courbes precedentes sous forme d’aire, avec la palette “plasma” de viridis.

tips.plot(kind = "area", colormap = plasma)
plt.show()

Diagramme circulaire d’une panda.Series

Ici l’index correspond aux jours.

tips.groupby("day")["tip"].sum().plot(kind = "pie", y = "tip", figsize=(5, 5))
plt.show()

Avec une autre syntaxe.

tips.groupby("day")["tip"].sum().plot.pie(y = "tip", figsize=(5, 5))
plt.show()

Diagrammes en barres

Barres horizontales cote a cote.

tips[["total_bill", "tip"]].plot(kind = "barh")
plt.show()

Barres verticales et empilees.

tips.plot(kind = "bar", stacked = True)
plt.show()

Distribution des variables continues

Histogrammes

Grille d’histogrammes.

g = tips.hist()
plt.show()

Grille d’histogrammes d’une variable groupee par une autre.

g = tips.total_bill.hist(by = tips.day)
plt.show()

Histogrammes superposes (pas tres lisible).

tips.plot(kind = "hist", alpha = 0.6, bins = 30)
plt.show()

Histogrammes empiles.

tips.plot(kind = "hist", bins = 30, stacked = True)
plt.show()

Boxplots

Boxplots horizontaux.

tips.plot(kind = "box", vert = False)
plt.show()

Boxplots verticaux d’une variable groupee par une autre (en mode horizontal ca peut bugger …).

g = tips.boxplot(by = 'sex')
plt.show()

Densites de distribution

Densites superposees (pas tres lisible).

tips.plot(kind = "kde")
plt.show()

Graphiques de deux variables

Nuage de points.

cles = ['Thur', 'Fri', 'Sat', 'Sun']
nb_col = len(cles)
dico_col = dict(zip(cles, np.array(range(nb_col))/(nb_col-1)))
couleurs = tips.day.map(dico_col)

legende = pd.DataFrame(dico_col, index = ["a"])

tips.plot(kind = "scatter", x= "total_bill", y = "tip", c = couleurs, cmap = viridis, 
  s = tips["size"]*20)
plt.show()

legende
   Thur       Fri       Sat  Sun
a   0.0  0.333333  0.666667  1.0

Pavage hexagonal.

tips.plot(kind = "hexbin", x = "tip", y = "size", gridsize = 15)
plt.show()

Densite de chaque variable numerique + croisement deux a deux des variables numeriques.

g = scatter_matrix(tips, alpha=0.2, figsize=(6, 6), diagonal="kde")
plt.show()

Meme representation avec des histogrammes.

g = scatter_matrix(tips, alpha=0.2, figsize=(6, 6))
plt.show()

retour au debut du document