Accélération de l'analyse exploratoire des données à l'aide de la bibliothèque pandas-profiling

Tout d'abord, en commençant à travailler avec un nouveau jeu de données, il est nécessaire de le comprendre. Pour ce faire, il faut, par exemple, déterminer les plages de valeurs que peuvent prendre les variables, leurs types, ainsi que connaître le nombre de valeurs manquantes.

La bibliothèque pandas nous fournit de nombreux outils utiles pour effectuer une analyse exploratoire des données (Exploratory Data Analysis, EDA). Cependant, avant de les utiliser, il est généralement nécessaire de commencer par des fonctions plus générales, comme df.describe(). Toutefois, il convient de noter que les capacités offertes par de telles fonctions sont limitées et que les étapes préliminaires du travail avec tout jeu de données lors de l'EDA se ressemblent souvent fortement les unes aux autres.

Accélération de l'analyse exploratoire des données à l'aide de la bibliothèque pandas-profiling

L'auteur du matériel que nous publions aujourd'hui dit qu'il n'est pas un amateur des actions répétitives. Par conséquent, à la recherche de moyens pour effectuer rapidement et efficacement une analyse exploratoire des données, il a trouvé la bibliothèque pandas-profiling. Les résultats de son travail ne se présentent pas sous forme d'indicateurs individuels, mais sous la forme d'un rapport HTML assez détaillé, contenant une grande partie des informations sur les données analysées, qui peuvent être nécessaires avant de passer à un travail plus approfondi avec celles-ci.

Nous examinerons ici les caractéristiques de l'utilisation de la bibliothèque pandas-profiling à travers l'exemple du jeu de données Titanic.

Analyse exploratoire des données avec pandas

J'ai décidé d'expérimenter avec pandas-profiling sur le jeu de données Titanic parce qu'il contient des données de différents types et qu'il comporte des valeurs manquantes. Je pense que la bibliothèque pandas-profiling est particulièrement intéressante dans les cas où les données ne sont pas encore nettoyées et nécessitent un traitement supplémentaire, dépendant de leurs caractéristiques. Pour réussir à effectuer un tel traitement, il est essentiel de savoir par où commencer et sur quoi prêter attention. C'est là que les capacités de pandas-profiling vont nous être utiles.

Pour commencer, importons les données et utilisons pandas pour obtenir des indicateurs de statistiques descriptives :

# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np

# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')

# вычисление показателей описательной статистики
df.describe()

Après avoir exécuté ce fragment de code, nous obtiendrons ce qui est montré dans l'image suivante.

Accélération de l'analyse exploratoire des données à l'aide de la bibliothèque pandas-profiling
Les indicateurs de statistiques descriptives, obtenus à l'aide des outils standards de pandas.

Bien qu'il y ait une multitude d'informations utiles ici, il n'y a pas tout ce qui pourrait intéresser concernant les données étudiées. Par exemple, on peut supposer qu'il y a 891 lignes dans le cadre de données. DataFrameSi vous devez vérifier cela, une autre ligne de code sera nécessaire pour définir la taille du cadre. Bien que ces calculs ne soient pas particulièrement gourmands en ressources, leur répétition constante entraînera forcément une perte de temps, que l'on peut probablement mieux consacrer à la purification des données.

Analyse exploratoire des données avec pandas-profiling

Nous allons maintenant faire la même chose en utilisant pandas-profiling :

pandas_profiling.ProfileReport(df)

L'exécution de la ligne de code ci-dessus permettra de générer un rapport contenant des indicateurs d'analyse exploratoire des données. Le code ci-dessus générera des informations trouvées sur les données, mais il est possible de récupérer un fichier HTML qui pourrait, par exemple, être montré à quelqu'un.

La première partie du rapport contiendra une section Aperçu, fournissant des informations de base sur les données (nombre d'observations, nombre de variables, etc.). De plus, elle comportera une liste d'avertissements, informant l'analyste sur ce qu'il convient de surveiller de près. Ces avertissements peuvent servir d'indications sur les aspects à cibler lors de la purification des données.

Accélération de l'analyse exploratoire des données à l'aide de la bibliothèque pandas-profiling
Section du rapport Aperçu

Analyse exploratoire des variables

Derrière la section Aperçu du rapport, vous pouvez trouver des informations utiles sur chaque variable. Celles-ci incluent, entre autres, de petits graphiques décrivant la distribution de chaque variable.

Accélération de l'analyse exploratoire des données à l'aide de la bibliothèque pandas-profiling
Informations sur la variable numérique Âge

Comme on peut le voir dans l'exemple précédent, pandas-profiling nous fournit plusieurs indicateurs utiles, tels que le pourcentage et le nombre de valeurs manquantes, ainsi que des mesures de statistiques descriptives que nous avons déjà vues. Étant donné que Âge est une variable numérique, la visualisation de sa distribution sous forme d'histogramme nous permet de conclure qu'il s'agit d'une distribution asymétrique à droite.

Lors de l'examen d'une variable catégorielle, les indicateurs affichés diffèrent légèrement de ceux trouvés pour une variable numérique.

Accélération de l'analyse exploratoire des données à l'aide de la bibliothèque pandas-profiling
Informations sur la variable catégorielle Sexe

En effet, au lieu de trouver la moyenne, le minimum et le maximum, la bibliothèque pandas-profiling a trouvé le nombre de classes. Puisque Sexe — une variable binaire, ses valeurs sont représentées par deux classes.

Si vous, comme moi, aimez explorer le code, alors cela pourrait vous intéresser de voir comment la bibliothèque pandas-profiling calcule ces indicateurs. Apprendre cela, étant donné que le code de la bibliothèque est ouvert et disponible sur GitHub, n'est pas si difficile. Comme je ne suis pas un grand fan de l'utilisation de « boîtes noires » dans mes projets, j'ai jeté un œil au code source de la bibliothèque. Par exemple, voici à quoi ressemble le mécanisme de traitement des variables numériques, présenté par la fonction describe_numeric_1d:

def describe_numeric_1d(series, **kwargs):
    """Calcule les statistiques résumées d'une variable numérique (`TYPE_NUM`) (une Série).
    Crée également des histogrammes (mini et complets) de sa distribution.
    Paramètres
    ----------
    series : Series
        La variable à décrire.
    Renvoie
    -------
    Series
        La description de la variable sous forme de Série avec un index étant les clés des statistiques.
    """
    # Formater un nombre en pourcentage. Par exemple, 0.25 sera converti en 25%.
    _percentile_format = "{:.0%}"
    stats = dict()
    stats['type'] = base.TYPE_NUM
    stats['mean'] = series.mean()
    stats['std'] = series.std()
    stats['variance'] = series.var()
    stats['min'] = series.min()
    stats['max'] = series.max()
    stats['range'] = stats['max'] - stats['min']
    # Pour éviter de le calculer plusieurs fois
    _series_no_na = series.dropna()
    for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
        # Le dropna() est un contournement pour https://github.com/pydata/pandas/issues/13098
        stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)
    stats['iqr'] = stats['75%'] - stats['25%']
    stats['kurtosis'] = series.kurt()
    stats['skewness'] = series.skew()
    stats['sum'] = series.sum()
    stats['mad'] = series.mad()
    stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN
    stats['n_zeros'] = (len(series) - np.count_nonzero(series))
    stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)
    # Histograms
    stats['histogram'] = histogram(series, **kwargs)
    stats['mini_histogram'] = mini_histogram(series, **kwargs)
    return pd.Series(stats, name=series.name)

Bien que ce fragment de code puisse paraître assez long et complexe, en réalité, il est très simple à comprendre. Il s'agit d'une fonction dans le code source de la bibliothèque qui détermine les types de variables. Si la bibliothèque rencontre une variable numérique, la fonction ci-dessus trouvera les indicateurs que nous avons examinés. Cette fonction utilise les opérations standard de pandas pour travailler avec des objets de type Série, comme series.mean(). Les résultats des calculs sont stockés dans un dictionnaire stats. Les histograms sont générés en utilisant une version adaptée de la fonction matplotlib.pyplot.hist. L'adaptation vise à permettre à la fonction de fonctionner avec différents types d'ensembles de données.

Indicateurs de corrélation et échantillon des données étudiées

Après l'analyse des variables par pandas-profiling, la section Corrélations affichera les matrices de corrélation de Pearson et de Spearman.

Accélération de l'analyse exploratoire des données à l'aide de la bibliothèque pandas-profiling
Matrice de corrélation de Pearson

Si nécessaire, il est possible, dans la ligne de code qui déclenche la génération du rapport, de définir les seuils utilisés pour calculer la corrélation. Ce faisant, vous pouvez indiquer ce qui est considéré comme une force de corrélation significative pour votre analyse.

Enfin, dans le rapport pandas-profiling, la section Échantillon affiche, en guise d'exemple, un extrait de données pris au début de l'ensemble de données. Cette approche peut conduire à des surprises désagréables, car les premières observations peuvent représenter un échantillon qui ne reflète pas les caractéristiques de l'ensemble de données dans son intégralité.

Accélération de l'analyse exploratoire des données à l'aide de la bibliothèque pandas-profiling
Section contenant un échantillon des données étudiées

En conséquence, je ne recommande pas de prêter attention à cette dernière section. Il vaut mieux utiliser la commande df.sample(5), qui sélectionnera aléatoirement 5 observations de l'ensemble de données.

Résultats

En résumé, la bibliothèque pandas-profiling offre aux analystes des outils utiles qui peuvent être pratiques lorsque vous avez besoin de rapidement obtenir une vue d'ensemble des données ou de transmettre un rapport d'analyse exploratoire à quelqu'un. Dans ce cas, le véritable travail avec les données, prenant en compte leurs spécificités, se fait, tout comme sans l'utilisation de pandas-profiling, manuellement.

Si vous souhaitez voir à quoi ressemble une analyse exploratoire complète des données dans un unique bloc-notes Jupyter — consultez celui-ci mon projet réalisé avec nbviewer. Et dans ce le dépôt GitHub, vous pouvez trouver le code correspondant.

Chers lecteurs ! Par quoi commencez-vous l'analyse de nouveaux ensembles de données ?

Accélération de l'analyse exploratoire des données à l'aide de la bibliothèque pandas-profiling

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster