Statistiques : les bibliothèques $\mathtt{NumPy}$ et $\mathtt{Pandas}$

Retour au tutoriel général

La bibliothèque $\mathtt{Numpy}$ possède un certain nombre de fonctions utiles pour calculer des statistiques basiques.

Le descriptif de la bibliothèque $\mathtt{NumPy}$ est détaillé dans le paragraphe accessible ici.

Si l'on travaille avec un $\mathtt{np.array}$, le fonctionnement est identique à part le calcul des effectifs.

La fonction $\mathtt{unique}$ avec l'option $\mathtt{return}\_\mathtt{counts}$ permet de calculer les modalités et les effectifs.

La fonction $\mathtt{cumsum}$ (pour "cumulative sum") permet alors d'obtenir les effectifs cumulés.

Si l'on veut calculer le mode d'une série statistique on peut utiliser la fonction $\mathtt{where}$. Celle-ci renvoie la liste des indices vérifiant la condition donnée en argument.

L'option $\mathtt{bias=True}$ permet d'avoir la valeur calculée de la covariance. Si on l'oublie c'est une estimation qui est légèrement différente de la valeur calculée...

Remarquez que le résultat de $\mathtt{np.cov(x,y)}$ (c'est le même principe pour la corrélation) est une matrice définie par $$ \begin{pmatrix} \operatorname{Cov}(X,X) & \operatorname{Cov}(X,Y) \\ \operatorname{Cov}(Y,X) & \operatorname{Cov}(Y,Y) \end{pmatrix}. $$

La covariance $\operatorname{Cov}(X,Y)$ s'obtient donc ainsi :

Les coefficients de la droite de régression linéaire peuvent être obtenus avec la fonction $\mathtt{polyfit(x,y,1)}$. L'argument $1$ précise que l'on cherche un polynôme de degré $1$ (donc une droite...).

Pour information, la bibliothèque $\mathtt{statistics}$ permet de réaliser les mêmes opérations. La syntaxe est décrite à l'adresse https://docs.python.org/3/library/statistics.html#module-statistics

Visualisation des données

Un certain nombre de tracés utiles à la visualisation des données est présenté dans la section dédiée à Matplotlib notamment les fonctions

Il existe aussi la fonction $\mathtt{boxplot}$ pour le tracé des diagrammes en boite.

La bibliothèque $\mathtt{Pandas}$

La bibliothèque $\mathtt{Pandas}$ permet de traiter des fichiers de données de différents types, de faire des statistiques sur ces données et de les visualiser.

Dans ce tutoriel nous allons travailler avec le fichier suivant (issu de la documentation de $\mathtt{Pandas}$) au format .csv http://mmorancey.perso.math.cnrs.fr/titanic.csv

Ce paragraphe du tutoriel est très fortement inspiré de la documentation de $\mathtt{Pandas}$ disponible à l'adresse https://pandas.pydata.org/docs/getting_started/index.html#intro-to-pandas

L'utilisation de la table est proche de celle d'un dictionnaire. Par exemple, pour récupérer la colonne des ages des passagers :

On peut alors n'extraire que certaines données de la table à l'aide de la méthode $\mathtt{loc}$ : par exemple seulement les passagers mineurs ou même seulement les passagers mineurs de 3ème classe.

La méthode $\mathtt{iloc}$ permet d'accéder aux éléments de la table à partir des numéros de ligne et de colonne.

Une première possibilité pour traiter les données numériques est de les convertir au format $\mathtt{Numpy}$ et d'utiliser l'arsenal à notre disposition (aussi bien pour le calcul des paramètres de position et de dispersion que pour la visualisation).

Attention, lorsque l'on travaille avec des données réelles, il est possible qu'il y ait des données manquantes (valeur $\mathtt{NULL}$ en SQL par exemple). En $\mathtt{Python}$ ces valeurs sont représentées par $\mathtt{nan}$ (qui signifie 'not a number'). L'ensemble des fonctions précédentes doit alors être remplacé par $\mathtt{nanmean}$, $\mathtt{nanmedian}$ etc... pour ne pas prendre en compte ces $\mathtt{nan}$.

Il est même possible d'afficher tous les indicateurs statistiques avec la méthode $\mathtt{describe}$ : effectif, moyenne, écart-type, minimum, maximum et quartiles.

Les modalités et effectifs s'obtiennent avec la méthode $\mathtt{value}\_\mathtt{counts}$

Pour calculer la corrélation, il faut d'abord spécifier les indicateurs concernés (sous la forme d'une liste d'où le double $\mathtt{[}$ dans $\mathtt{titanic[["Survived","Pclass"]]}$ dans l'exemple ci-dessous) puis utiliser la méthode $\mathtt{corr}$.

Si besoin, on peut grouper les informations selon les variables qualitatives. Ici on accède à l'âge moyen, le pourcentage de survivants et le prix moyen du ticket selon le genre des passagers.

L'accès aux noms des colonnes se fait par la méthode $\mathtt{axes}$.

Pour tracer la courbe de la donnée $\mathtt{data2}$ en fonction de la donnée $\mathtt{data1}$ on utilise la syntaxe

Pour tracer sur un même graphique les courbes des données $\mathtt{data2}$ et $\mathtt{data3}$ en fonction de la donnée $\mathtt{data1}$ on utilise la syntaxe

Les fonctions préimplémentées de visualisation de $\mathtt{Pandas}$ permettent de facilement visualiser plusieurs données ensemble (la syntaxe est ici détaillée sur les diagrammes en bandes mais est valable pour tous les tracés).

Lorsque les variables affichées ont des valeurs très différentes il faut considérer plusieurs échelles. Dans l'exemple précédent l'option $\mathtt{secondary}\_\mathtt{y}$ permet d'afficher les prix avec l'échelle de droite (ce qui est indiqué en légende) alors que le taux de survivant est indiqué dans l'échelle de gauche.

On peut aussi aisément afficher plusieurs graphiques sans avoir à configurer le $\mathtt{subplot}$:

Pour des affichages plus complexes, il est nécessaire de recourir à matplotlib. Ci-dessous, on affiche deux figures contenant chacune deux diagrammes. On peut spécifier où l'on souhaite tracer la figure avec le paramètre $\mathtt{ax}$.