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
set()
sns.
= sns.load_dataset("tips")
tips # pour se debarrasser du type Category
for colonne in ['sex', 'smoker', 'day', 'time']:
= tips[colonne].astype(object)
tips[colonne]
# pour reduire le nombre de lignes
= tips.groupby(['sex', 'smoker', 'day', 'time', 'size']
tips 'total_bill', 'tip']].sum().reset_index().iloc[:30]
)[[
# pour verifier que l'index est utilise dans certains graphiques
= range(50,80)
tips.index
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.
= tips.plot(subplots = True)
g plt.show()
Les cumul des courbes precedentes sous forme d’aire, avec la palette “plasma” de viridis.
= "area", colormap = plasma)
tips.plot(kind plt.show()
Diagramme circulaire d’une panda.Series
Ici l’index correspond aux jours.
"day")["tip"].sum().plot(kind = "pie", y = "tip", figsize=(5, 5))
tips.groupby( plt.show()
Avec une autre syntaxe.
"day")["tip"].sum().plot.pie(y = "tip", figsize=(5, 5))
tips.groupby( plt.show()
Diagrammes en barres
Barres horizontales cote a cote.
"total_bill", "tip"]].plot(kind = "barh")
tips[[ plt.show()
Barres verticales et empilees.
= "bar", stacked = True)
tips.plot(kind plt.show()
Distribution des variables continues
Histogrammes
Grille d’histogrammes.
= tips.hist()
g plt.show()
Grille d’histogrammes d’une variable groupee par une autre.
= tips.total_bill.hist(by = tips.day)
g plt.show()
Histogrammes superposes (pas tres lisible).
= "hist", alpha = 0.6, bins = 30)
tips.plot(kind plt.show()
Histogrammes empiles.
= "hist", bins = 30, stacked = True)
tips.plot(kind plt.show()
Boxplots
Boxplots horizontaux.
= "box", vert = False)
tips.plot(kind plt.show()
Boxplots verticaux d’une variable groupee par une autre (en mode horizontal ca peut bugger …).
= tips.boxplot(by = 'sex')
g plt.show()
Densites de distribution
Densites superposees (pas tres lisible).
= "kde")
tips.plot(kind plt.show()
Graphiques de deux variables
Nuage de points.
= ['Thur', 'Fri', 'Sat', 'Sun']
cles = len(cles)
nb_col = dict(zip(cles, np.array(range(nb_col))/(nb_col-1)))
dico_col = tips.day.map(dico_col)
couleurs
= pd.DataFrame(dico_col, index = ["a"])
legende
= "scatter", x= "total_bill", y = "tip", c = couleurs, cmap = viridis,
tips.plot(kind = tips["size"]*20)
s plt.show()
legende
Thur Fri Sat Sun
a 0.0 0.333333 0.666667 1.0
Pavage hexagonal.
= "hexbin", x = "tip", y = "size", gridsize = 15)
tips.plot(kind plt.show()
Densite de chaque variable numerique + croisement deux a deux des variables numeriques.
= scatter_matrix(tips, alpha=0.2, figsize=(6, 6), diagonal="kde")
g plt.show()
Meme representation avec des histogrammes.
= scatter_matrix(tips, alpha=0.2, figsize=(6, 6))
g plt.show()