Data Science : Exploration de données avec Python et les statistiques

By | 19 octobre 2017

L’exploration de données est une étape importante du workflow de Data science. Toutefois, Les gens ne s’y attardent pas beaucoup, souvent à tort.

La phase d’exploration de données permet de comprendre ses dernières. Grâce à l’analyse univariée et multivariée, on peut déduire certaines hypothèses qui pourront servir lors de la phase de modélisation.

L’analyse univariée permet d’explorer une seule feature à la fois. Cette analyse se base sur les statistiques descriptives. Ces dernières permettent de tirer des indications concises sur une feature donnée. Parmi ces indicateurs, on retrouve la moyenne, la médiane ainsi que les mesures de dispersion de données.

Dans cet article, nous allons voir comment obtenir ces informations statistiques à l’aide de Python. Rassurez vous, il ne s’agit pas d’un cours de statistiques. On ne s’intéressera qu’à la partie pratique des statistiques.

C’est parti !

Data Scientist : Person who is better at statistics than any software engineer and better at software engineering than any statistician

 

data exploration data science

A propos du jeu de données

Le jeu de données qu’on va utiliser lors de cet article concerne la mesure de température dans certaines villes européennes. J’ai effectué à ce Data Set quelques transformations mineurs avec Microsoft Excel pour en faciliter son traitement avec Python. Lors de la suite de l’article, on verra les principales métriques statistiques qu’un data scientist sera potentiellement amené à utiliser lors de l’exploration univariée de ses features. On utilisera python pour calculer ces métriques sur la ville Italienne : Milan.

Mesures statistiques

Dans cette section, on verra certaines métriques simples comme la moyenne, la médiane et les quantiles.

Calculer la moyenne

La moyenne est la métrique évidente qui saute aux yeux. Son calcul est simple : additionner toutes les valeurs d’une feature et les diviser par le nombre d’observations.

    \[ moy = \frac{1}{n} \sum_{i=1}^{n}{x_{i}} = \frac{1}{n} (x_{1} + ... + x_{n}) \]

En Python, à l’aide du module numpy, on peut calculer la moyenne de température à Milan :

 

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy import stats as st

import matplotlib.pyplot as plt

dataset = pd.read_csv("temperature.csv", sep=";", encoding='ISO-8859-1')

print (dataset.head())

milanoData = dataset['Milan']
moyenne = np.mean(milanoData)

# la fonction round est juste pour arrondir a deux nombre apres virgule
print ("Moyenne de degree a milan est : ", round(moyenne, 2))

le output Python donne :

 

La Moyenne de degree a milan est :  12.67

La moyenne est sensible aux valeurs extrêmes (outliers). Par conséquent, il est toujours utile de calculer aussi la médiane qui est moins sensible à ces valeurs.

Calculer la médiane

La médiane est une valeur réelle telle qu’il y ait au moins autant d’observations x_{i} inférieures ou égales à que supérieure ou égales à m. En d’autres termes, il s’agit de trouver “le point central” des valeurs d’une feature donnée.

La formule de calcul de la médiane est la suivante :

    \[ med = \left\{\begin{array}{ll}   x_{(\frac{n+1}{2})} \mbox{\hspace{1cm}Si n est impair} \\ \frac{x_{(\frac{n}{2})} + x_{(\frac{n}{2} +1)}}{2} \mbox{\hspace{1cm}Si n est pair} \end{array} \right    \]

On peut calculer la médiane avec le code python suivant :

 

mediane = np.median(milanoData)
print ("La mediane de degree a milan est : ", round(mediane, 2))

le output Python donne :

 

La mediane de degree a milan est :  12.85

La médiane a une propriété statistiques intéressante. En effet, elle est moins sensible aux outliers que la moyenne. Par ailleurs, il ne faut pas se baser seulement sur la moyenne mais prendre aussi en compte la valeur médiane de la feature.

Calculer les quantiles

Un quantile d’ordre \alpha (avec 0 < \alpha < 1 ) est la plus petite valeur de Q_{\alpha} de la série de données (de la feature), tel qu’au moins \alpha\% des autres valeurs lui sont inférieures.

On reconnait deux quantiles particuliers le Q_{0.25} et Q_{0.75} qu’on appelle respectivement des quartiles. Le Quartile Q_{1} correspond au quantile Q_{0.25} et le quartile Q_{3} correspond au quantile Q_{0.75}.

Note : Vous l’avez peut être remarqué, Q_{0.5} n’est rien d’autre que la médiane.

Les quartiles Q1 et Q3

Le premier quartile est la plus petite valeur Q_{1} de la série de données tel que 25% au moins des autres valeurs lui sont inférieures ou égales.

Pour calculer le quartile  Q_{1}  en python, on utilise la fonction percentile :

 

# On calcule le quantile 0,25 qui est le quartile Q1
Q1 = round(np.percentile(milanoData, 25))
print("Quartile Q1 vaut : ", Q1)

 

le output Python donne :

 

Quartile Q1 vaut :  6.0

Le troisième quartile est la plus petite valeur Q_{3} de la série de données tel que 75% au moins des autres valeurs lui sont inférieures ou égales.

Pour calculer le quartile  Q_{3}  en Python :

 
# On calcule le quantile 0,75 qui est le quartile Q3
Q3 = round(np.percentile(milanoData, 75))
print("Quartile Q3 vaut : ", round(np.percentile(milanoData, 75)))

le output Python donne :

 

Quartile Q3 vaut :  20.0

Mesures de dispersion des données

Les métriques de dispersion permettent de savoir  comment les valeurs d’une feature se “positionnent” dans leur espace unidimensionnel (1 Dimension).

Dans certaines situations de modélisation en Machine Learning, comprendre comment les données sont réparties permet d’émettre de meilleures hypothèses sur le phénomène à modéliser.

La variance

La variance indique de quelle manière la série de données d’une feature se disperse autour de la moyenne. Une variance élevée indique que les valeurs sont très écartées les unes des autres et vice versa.

Le calcul est noté avec le symbole (sigma squared) comme suit :

    \[ \sigma^{2} = \frac{1}{n} \sum_{i=1}^{n}{(x_{i} - m)^{2}} \mbox{\hspace{1cm}Avec m la moyenne des observations} \]

Pour calculer la variance d’une feature en Python, on procède ainsi

 

variance = np.var(milanoData)
print ("La variance de degree a milan est : ", round(variance, 2))

Ce qui donne :

 
La variance de degree a milan est :  61.17

L’écart-type (Standard Deviation)

L’écart type est aussi une mesure de dispersion des données. Il est tout simplement la racine carrée de la variance. On utilise souvent l’écart type que la variance pour mieux appréhender le degré de dispersion des données.

    \[ \sigma = \sqrt{ \sigma^{2}}= \sqrt{\frac{1}{n} \sum_{i=1}^{n}{(x_{i} - m)^{2}}}  \]

En python, il se calcule ainsi

 

ecartType = np.std(milanoData)
print ("Le ecart type de degree a milan est : ", round(ecartType, 2))

Ce qui donne :

 
Le ecart type de degree a milan est :  7.82

L’écart interquartile

L’écart intequartile mesure la dispersion de 50% des données du dataset. Les 50% des données correspond à celles comprises entre le premier quartile Q1 et le 3eme quartile Q3.

L’écart interquartile est tout simplement la soustraction du troisième quartile du premier :

    \[  \mbox{Ecart interquartile} = Q_{3} - Q_{1}  \]

 
# On calcule le quantile 0,25 qui est le quartile Q1
Q1 = round(np.percentile(milanoData, 25))

# On calcule le quantile 0,75 qui est le quartile Q3
Q3 = round(np.percentile(milanoData, 75))
print("Quartile Q3 vaut : ", round(np.percentile(milanoData, 75)))

# L ecart interquartile est Q3 - Q1
print("L ecart interquartile vaut : ", Q3 - Q1)

Ce qui donne :

 
L ecart interquartile vaut :  14.0

 

>> Téléchargez le code source depuis mon espace Github <<

 

 

Conclusion

Nous venons de mettre en oeuvre certains outils statistiques à l’aide de Python. Ces indicateurs permettent d’avoir un “résumé” statistique sur une feature d’un Dataset.

L’exploration univariée est à appliquer sur les features qui nous paraissent pertinentes pour résoudre le problème métier. En fonction de ce résumé statistique, nous pourrons émettre certaines hypothèses concernant le modèle prédictif.

Toutefois, l’analyse univariée n’est qu’une partie de l’exploration des données. L’analyse multivariée permet de comprendre les relations entre les features et à quel degré ces dernières agissent sur le phénomène à modéliser.

Si vous avez d’autres indicateurs qui peuvent être pertinents lors de l’analyse univariée, partagez-les ! Si vous avez des questions n’hésitez pas à me les poser par un commentaire, je ferai de mon mieux pour y répondre.

One thought on “Data Science : Exploration de données avec Python et les statistiques

  1. mongan agbeshie

    Concernant les autres indicateurs , je pense au mode, aux coefficients de( variation, asymétrie, aplatissement (kurtosis))

    Reply

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.