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.
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 . 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.

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.

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.

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.

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 :
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.

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é.

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 mon projet réalisé avec nbviewer. Et dans 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 ?
Source : habr.com
