Skip to article frontmatterSkip to article content
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import IPython

introduction


la dataframe des iris

# le code
df = pd.read_csv('data/iris.csv')
IPython.display.display(   df.head(2)      )

IPython.display.display(   df.describe()   )
Loading...

visualisation de la dataframe - df.plot()

# le code
df.plot();
<Figure size 640x480 with 1 Axes>

boxplots des colonnes df.boxplot

# le code

df.boxplot()

plt.show() # afin de ne pas superposer les plots

df.boxplot(['SepalWidth', 'PetalWidth']);

plt.show()

df.boxplot(['PetalLength'], by='Name')

plt.tight_layout() # le padding
<Figure size 640x480 with 1 Axes><Figure size 640x480 with 1 Axes><Figure size 640x480 with 1 Axes>

histogrammes df.hist

# le code
df.hist()
df.hist('SepalLength', bins = 10, color='lightblue')
plt.title('histogramme de la colonne SepalLength');
<Figure size 640x480 with 4 Axes><Figure size 640x480 with 1 Axes>

barchart df.plot.bar()

# le code
df_animals = pd.DataFrame({'speed' : [0.1, 17.5, 40, 48, 52, 69, 88],
                   'lifespan' : [2, 8, 70, 1.5, 25, 12, 28]},
                  index = ['snail', 'pig', 'elephant',
                           'rabbit', 'giraffe', 'coyote', 'horse'])

df_animals.plot.bar()

df_animals.plot.barh()

df_animals.plot.bar(x='lifespan', y='speed');
<Figure size 640x480 with 1 Axes><Figure size 640x480 with 1 Axes><Figure size 640x480 with 1 Axes>

la colonne des 'Name'

# le code
IPython.display.display(   df[['Name']].describe()   )
df['Name'].value_counts()
Loading...
#le code
df['Name'].dtype
dtype('O')

encodage des 'Names' en codes de catégorie

# le code
col = df['Name'].astype('category')
col.head(2)
0 Iris-setosa 1 Iris-setosa Name: Name, dtype: category Categories (3, object): ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']
# le code
df['Name-code'] = col.cat.codes
df['Name-code'].value_counts()
Name-code 0 50 1 50 2 50 Name: count, dtype: int64
# et en une seul ligne
df['Name-code'] = df['Name'].astype('category').cat.codes

nuages de points df.plot.scatter

pour mettre en valeur des informations sur nos données
on peut dessiner en 2D les colonnes les unes par rapport aux autres
avec pandas.DataFrame.plot.scatter

dessinons les 'SepalLength' en fonction des 'SepalWidth'

df.plot.scatter(x='SepalLength', y='SepalWidth')

on peut le faire directement en matplotlib.pyplot.plot
mais il faut alors préciser tous les paramètres (noms des axes...)

plt.scatter(df['SepalLength'], df['SepalWidth'])

avec le paramètre c=

oui, on peut représenter ainsi la catégorie des points

df.plot.scatter(x='SepalLength', y='SepalWidth', c='Name-code', cmap='viridis');

avec matplotlib.pyplot.plot
mais vous n’avez alors que les paramètres par défaut

plt.scatter(df['SepalLength'], df['SepalWidth'], c=df['Name-code'], cmap='viridis')
plt.colorbar() # sinon pas de jolie barre de couleur

avec le paramètre s= on peut changer la taille des points
ou la taille de chaque point
par exemple, donnons leur une taille proportionnelle à la largeur des pétales

plt.scatter(df['SepalLength'], df['SepalWidth'], c=df['Name-code'], s=df['PetalWidth']);

ainsi sur un même dessin on peut voir 4 informations
le nuage, la couleur et la taille des points

il faut travailler un peu les paramètres pour que ce soit visible
(là la taille est trop peu différenciée, multipliez la)

# le code
df.plot.scatter(x='SepalLength', y='SepalWidth');
<Figure size 640x480 with 1 Axes>
# le code
plt.scatter(df['SepalLength'], df['SepalWidth']);
# plt.xlabel('SepalLength')
# plt.ylabel('SepalWidth')
<Figure size 640x480 with 1 Axes>
# le code
df.plot.scatter(x='SepalLength', y='SepalWidth', c='Name-code', cmap='viridis');
<Figure size 640x480 with 2 Axes>
# le code
plt.scatter(df['SepalLength'], df['SepalWidth'], c=df['Name-code'], cmap='viridis')
plt.colorbar();
<Figure size 640x480 with 2 Axes>
# le code
plt.scatter(df['SepalLength'], df['SepalWidth'], c=df['Name-code'], s=df['PetalWidth']*50);
<Figure size 640x480 with 1 Axes>

fabriquer son propre type category

pour les avancés

avec la technique précédente on n’a pas de contrôle sur l’ordre parmi les différentes catégories

imaginez que nous avons maintenant une colonne dont les valeurs uniques sont
bad, average, good, excellent
cette colonne est clairement une colonne de type catégorie ordonnée

on peut définir son propre type catégoriel avec la fonction
pd.CategoricalDtype()
dont le paramètre ordered permet de dire si la catégorie est ordonnée ou non

en l’appliquand à la colonne des 'Names' je peux ensuite trier la dataframe
sur cette colonne

iris_ord_cat = pd.CategoricalDtype(
                    categories=['Iris-versicolor', 'Iris-virginica', 'Iris-setosa'],
                    ordered=True)
df.Name = df.Name.astype(iris_ord_cat)
df.sort_values(by='Name')
iris_ord_cat = pd.CategoricalDtype(
                    categories=['Iris-versicolor', 'Iris-virginica', 'Iris-setosa'],
                    ordered=True)
iris_ord_cat
CategoricalDtype(categories=['Iris-versicolor', 'Iris-virginica', 'Iris-setosa'], ordered=True, categories_dtype=object)
df.Name = df.Name.astype(iris_ord_cat)
df.sort_values(by='Name').head(4)
Loading...