Dataprep: une librairie python pour accélérer votre analyse de données

Le processus de préparation des données commence par trouver les bonnes données. Cela peut provenir d’un catalogue de données existant ou d’un entrepôt. Une fois les données collectées, il est important de découvrir et d’explorer les données à préparer et à traiter. Cette étape est essentielle et permet de connaître les données et de comprendre ce qui doit être fait avant que les données puissent être qualifiées d’utiles dans un contexte particulier.

DataPrep est une bibliothèque open source disponible pour python qui vous permet de préparer vos données à l’aide d’une seule bibliothèque avec seulement quelques lignes de code. Dans cet article, on vous présentera comment analyser et préparer ses données en quelques lignes.

Installation de la librairie

L’installation est possible avec PyPi (pip) et anaconda. (un tutoriel explique comment installer ces librairies)

# installation
#Avec pip 
!pip install dataprep
#Avec anaconda
!conda install -c conda-forge dataprep

Analyse exploratoire d’un jeu de données avec dataprep

Dans ce tutoriel, nous utiliserons le california housing dataset.
Ce jeu de données est extrait du recensement américain de 1990. Chaque ligne du dataset représente des données immobilières d’un groupe de blocs de recensement (Census block group).
Un groupe de blocs est la plus petite unité géographique pour laquelle le bureau de recensement des US publie des données d’échantillonnage. Généralement, un groupe de blocs a généralement une population de 600 à 3 000 personnes.

On importe les librairies nécessaires pour la suite

from sklearn.datasets import fetch_california_housing
import random
import numpy as np
from dataprep.eda import plot_correlation, plot, create_report

Ensuite, on télécharge le jeu de données.

houses = fetch_california_housing(as_frame=True)

Notre dataset est maintenant disponible dans la variable houses.frame, affichons quelques lignes de ce dataframe.

houses.frame.head()
[Output]
MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude Longitude MedHouseVal
0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88 -122.23 4.526
1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86 -122.22 3.585
2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85 -122.24 3.521
3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 -122.25 3.413
4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 -122.25 3.422

La description des différents attributs :

  • MedInc : revenu médian dans le groupe de blocs exprimé en centaines de milliers de dollars (100 000 $).
  • HouseAge : l’age médian des maisons dans le groupe de blocs
  • AveRooms : nombre moyen de chambres par ménage
  • AveBedrms: nombre moyen de chambres par ménage
  • Population : nombre d’habitants dans le groupe de blocs
  • AveOccup : nombre moyen de membres du ménage
  • Latitude : latitude du groupe de blocs
  • Longitude : longitude du groupe de blocs
  • MedHouseVal: valeur médiane des maisons, exprimée en centaines de milliers de dollars (100 000 $).

On fait une copie du dataframe et un describe.

houses_df = houses.frame.copy()
houses_df.describe()

On a environ 20640 lignes, pas de valeurs nulles. Alors pour rendre l’exercice plus intéressant, nous allons ajouter des mauvaises valeurs de façon aléatoire dans le jeu de données 🙃. Pour ce faire, je crée une fonction add_random_bad_values qui fera cette tache.

def add_random_bad_values(df,number_of_bad_values = 1000,seed=42):
    dataframe = df.copy()
    bad_values = [ np.NaN, None]
    columns = dataframe.columns.tolist()
    dataframe_size = len(dataframe)
    random.seed(seed)
    for null_values in range(number_of_bad_values):
        random_column = random.choice(columns)
        random_row = random.randint(0,dataframe_size)
        dataframe.loc[random_row,random_column] = random.choice(bad_values)
    return dataframe
houses_df = add_random_bad_values(houses_df)
houses_df.isnull().sum()
[Outuput]
MedInc          83
HouseAge       142
AveRooms       103
AveBedrms       99
Population     121
AveOccup       124
Latitude       112
Longitude      109
MedHouseVal    100
dtype: int64

Études des distributions avec dataprep

L’une des premières fonctions de dataprep que nous allons utiliser dans ce tutoriel est plot().
En effet, la fonction plot() permet d’explorer les distributions et les statistiques d’un dataset. Elle génère une variété de visualisations et de statistiques qui permettent une compréhension rapide des distributions des colonnes et de leurs relations.

# La fonction plot() a été importé plus haut
# from dataprep.eda import plot
plot(houses_df)

Il est aussi possible d’analyser uniquement les relations entre deux colonnes.

plot(houses_df,"MedInc","MedHouseVal")

Le résultat était évident à ce niveau. Les ménages à faibles revenus ont des biens immobiliers qui ont une valeur moins élevée. Cependant, il y a une grande quantité d’outliers qui prouve que la règle n’est pas forcément respectée.

Il faut savoir que les visualisations générées par cette fonction plot()dépendent du type des valeurs de la colonne. Dans notre cas, ces deux colonnes contiennent que des valeurs numériques. Ainsi, on a comme visualisation un scatter plot, un hexbin plot et un box plot.

Analyse de corrélations

Ici, nous utiliserons la fonction plot_correlation() qui nous permet de créer une heatmap des corrélations des différentes colonnes de notre dataset. Cela nous permettra de mieux appréhender les relations entre nos différentes features. La fonction plot_correlation() calcule les coefficients de corrélation de Pearson, Spearman et KendallTau.

plot_correlation(houses_df)

On voit bien la forte corrélation entre le revenu moyen des ménages et la valeur moyenne des logements.

pearson
Spearman
KendallTau

Pour aller plus loin dans l’analyse il est possible de générer un rapport. En gros, il s’agit de l’ensemble des visualisations qu’offre la libraire regroupées en plusieurs sections. C’est assez pratique, car on peut directement consulter les sections qui nous intéressent. Pour ce faire, on utilise create_report()

report = create_report(houses_df, title='Analyse exploratoire')

On peut soit afficher le rapport dans un notebook, dans un navigateur ou même l’exporter en format html.

Je vous laisse consulter le notebook du tutoriel ici : tutoriel-dataprep

Conclusion

Dans cet article, nous avons présenté dataprep une libraire qui nous permet d’explorer plus rapidement nos données. Cette libraire a le mérite d’exister cependant, il y a encore beaucoup à faire surtout pour les données géospatiales. Pour ma part, je l’utiliserais en début de mes analyses de données. Et vous, que pensez-vous de cette librairie ?

Sources

Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions, Statistics and Probability Letters, 33 (1997) 291-297

Dataprep – documentation

Laisser un commentaire

Votre adresse email ne sera pas publiée.

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

Voulez-vous en savoir plus sur la Data Science ?

Inscrivez-vous alors à notre newsletter et vous receverez gratuitement nos derniers articles et actualités ! 
S'INSCRIRE MAINTENANT 
close-link