L’analyse exploratoire des données (EDA) est une première étape essentielle dans la plupart des projets de science des données et consiste souvent à suivre les mêmes étapes pour caractériser un ensemble de données (par exemple, trouver les types de données, les informations manquantes, la distribution des valeurs, les corrélations, etc.). L’une des dernières est une nouvelle bibliothèque Python open-source appelée Sweetviz.
Contenus
ToggleInstallation et lancement de Sweetviz
Après l’installation de Sweetviz (en utilisant pip install sweetviz), chargez simplement les dataframes pandas comme vous le feriez normalement, puis appelez analyze(), compare() ou compare_intra().
import sweetviz
import pandas as pd
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
Nous avons maintenant 2 dataframes (train et test), et nous aimerions analyser la valeur cible « Survived ». Je tiens à souligner que dans ce cas, nous connaissons à l’avance le nom de la colonne cible, mais il est toujours facultatif de spécifier une colonne cible. Nous pouvons générer un rapport avec cette ligne de code :
my_report = sweetviz.compare([train, "Train"], [test, "Test"], "Survived")
L’exécution de cette commande effectuera l’analyse et créera l’objet de rapport. Pour obtenir le résultat, utilisez simplement la commande show_html() :
my_report.show_html("Report.html") # Not providing a filename will default to SWEETVIZ_REPORT.html
Résumé global
Le résumé nous montre les caractéristiques des deux dataframes côte à côte. Nous pouvons immédiatement identifier que l’ensemble de test est à peu près la moitié de la taille de l’ensemble d’apprentissage, mais qu’il contient les mêmes fonctionnalités. Cette légende en bas nous montre que l’ensemble d’apprentissage contient la variable cible « Survived », mais que l’ensemble de test ne le fait pas.
Notez que Sweetviz fera une meilleure estimation pour déterminer le type de données de chaque colonne, entre numérique, catégorie/booléen et texte.
Associations
Ce graphique est un composite des éléments visuels de Drazen Zaric : Better Heatmaps and Correlation Matrix Plots in Python et des concepts de Shaked Zychlinski : The Search for Categorical Correlation.
Fondamentalement, en plus de montrer les corrélations numériques traditionnelles, il unifie dans un seul graphique à la fois la corrélation numérique mais aussi le coefficient d’incertitude (pour catégoriel-catégoriel) et le rapport de corrélation (pour catégoriel-numérique). Les carrés représentent les variables liées aux caractéristiques catégorielles et les cercles représentent les corrélations numériques-numériques. Notez que la diagonale triviale est laissée vide, pour plus de clarté.
Les associations catégorielles-catégorielles (fournies par le coefficient d’incertitude) sont ASSYMETRIQUES, ce qui signifie que chaque ligne représente à quel point le titre de la ligne (à gauche) donne des informations sur chaque colonne. Par exemple, « Sex », « Pclass » et « Fare » sont les éléments qui donnent le plus d’informations sur « Survived ». Pour le jeu de données Titanic, cette information est plutôt symétrique mais ce n’est pas toujours le cas.
Enfin, il convient de noter ces méthodes de corrélation/association
ne doivent pas être pris comme un évangile car ils font des hypothèses sur la distribution sous-jacente des données et des relations. Cependant, ils peuvent être un point de départ très utile.
Sélection d'une variable
Lorsqu’une variable cible est spécifiée, elle apparaîtra en premier, dans une boîte noire spéciale. Seules les entités numériques et booléennes peuvent être des cibles actuellement.
Nous pouvons déduire de ce résumé que « Survived » n’a pas de données manquantes dans l’ensemble d’apprentissage (891, 100%), qu’il existe 2 valeurs possibles distinctes (représentant moins de 1% de toutes les valeurs), et à partir du graphique, il peut On estime qu’environ 60 % n’ont pas survécu.
Données qualitatives et booléennes
Lorsque vous déplacez la souris pour survoler l’une des variables, une zone à droite affichera les détails. Le contenu des détails dépend du type de variable analysée. Dans le cas d’une variable catégorielle (ou booléenne), comme c’est le cas avec la cible, l’analyse est la suivante :
Ici, nous pouvons voir les statistiques exactes pour chaque classe, où 62% n’ont pas survécu et 38% ont survécu. Vous obtenez également le détail des associations pour chacune des autres fonctionnalités.
Données quantitatives
Les données numériques montrent plus d’informations sur son résumé. Ici, nous pouvons voir que dans ce cas, environ 20 % des données manquent (21 % dans les données de test, ce qui est très cohérent).
Notez que la valeur cible (« Survived » dans ce cas) est tracée sous la forme d’une ligne, juste au-dessus du graphique de distribution. Cela permet une analyse instantanée de la distribution cible par rapport aux autres variables.
Fait intéressant, nous pouvons voir sur le graphique de droite que le taux de survie est assez constant à tous les âges, sauf pour les plus jeunes qui ont un taux de survie plus élevé. Il semblerait que «les femmes et les enfants d’abord» ne soient pas que des paroles.
Détails d'une variable quantitative
Comme pour le type de données catégorielles, le type de données numériques affiche des informations supplémentaires dans sa zone de détail. Il convient de noter ici les boutons en haut du graphique.
Ces boutons modifient le nombre de « bacs » affichés dans le graphique. Vous pouvez sélectionner ce qui suit : Auto, 5, 15, 30.
Pour accéder à ces boutons, vous devez « verrouiller en place » la fonctionnalité actuelle en cliquant dessus. La fonction a alors un CONTOUR ROUGE pour montrer qu’elle est verrouillée en place et vous pouvez accéder à la zone de détail.
Données textuelles
Pour l’instant, tout ce que le système ne considère pas comme numérique ou catégorique sera considéré comme du « texte ». Les fonctionnalités textuelles n’affichent actuellement que le nombre (pourcentage) sous forme de statistiques.
Comparaison de sous-populations
Même si vous ne regardez qu’un seul ensemble de données, il peut être très utile d’étudier les caractéristiques de différentes sous-populations au sein de cet ensemble de données.
Pour cela, Sweetviz propose la fonction compare_intra(). Pour l’utiliser, vous fournissez un test booléen qui divise la population (ici, nous essayons train[« Sex »] == ‘male’, pour avoir une idée des différentes populations de genre), et donnez un nom à chaque sous-population. Par example:
my_report = sweetviz.compare_intra(train, train["Sex"] == 'male', ["Male", "Female"], 'Survived')my_report.show_html() # Not providing a filename will default to SWEETVIZ_REPORT.html
Ce qui donne l’analyse suivante :
Notez que la valeur cible (« Survived » dans ce cas) est maintenant tracée sous forme de lignes séparées, une pour chaque ensemble de données comparées (par exemple, homme en bleu, femme en orange).
Exemple sur le jeu de données du Titanic
PassengerId
- La distribution des pièces d’identité et de la capacité de survie est uniforme et ordonnée.
- Pas de données manquantes
Sex
- Deux fois plus d’hommes que de femmes
- Les femmes survivent 30% mieux que les hommes
- Mêmes distributions dans les jeux d’entrainement et de test
- Pas de données manquantes
Age
- 20 % de données manquantes, données manquantes cohérentes et répartition entre Train et Test
- Population centrée sur les jeunes adultes, mais les âges de 0 à 70 ans sont bien représentés
- Survivabilité étonnamment uniformément répartie, à l’exception d’un pic au plus jeune âge
- L’âge semble lié à Siblings, Pclass et Fare, et un peu plus surprenant à Embarked
Name
- Pas de données manquantes
- Tous les noms sont distincts
Pclass
- La capacité de survie suit de près la classe (la première classe est la plus susceptible de survivre, la troisième classe la moins susceptible)
- Répartition similaire entre Train et Test
- Aucune donnée manquante
SibSp
- Il semble y avoir un pic de survie à 1 et dans une certaine mesure à 2, mais (en regardant le volet de détails non illustré ici), il y a une forte baisse à 3 et plus. Les familles nombreuses ne pouvaient pas le faire ou étaient peut-être plus pauvres ?
Parch
- Distribution similaire
- Aucune donnée manquante
Ticket
- ~80 % de valeurs distinctes, soit environ 1 ticket partagé sur 5 en moyenne
- Le ticket de fréquence le plus élevé était de 7, ce qui est généralement cohérent avec le nombre maximum de frères et sœurs (8)
- Aucune donnée manquante, les données semblent assez propres
Fare
- Comme prévu, et comme pour Pclass, les tarifs les plus élevés ont mieux survécu (bien que la taille de l’échantillon devienne assez mince à des niveaux plus élevés)
- Un rapport de corrélation de 0,26 pour « Survived » est relativement élevé, il aurait donc tendance à soutenir cette théorie
- Environ 30 % de valeurs distinctes semblent un peu élevées car vous vous attendriez à moins de prix fixes, mais il semble qu’il y ait beaucoup de granularité, donc ça va
- Seulement 1 enregistrement manquant dans le jeu de test, données assez cohérentes entre Train et Test
Cabin
- 78% de données manquantes
- La fréquence maximale est de 4, ce qui serait logique d’avoir 4 personnes maximum dans une cabine
Embarked
- 3 valeurs distinctes (S, C, Q)
- Capacité de survie un peu plus élevée à C ; cela pourrait-il être un endroit avec des gens plus riches ?
- Quoi qu’il en soit, « Embarqué » affiche un coefficient d’incertitude de seulement 0,03 pour « Survived », il peut donc ne pas être très significatif
Analyse générale
- Dans l’ensemble, la plupart des données sont présentes et semblent cohérentes et logiques ; pas de valeurs aberrantes majeures ou d’énormes surprises
Test versus Training data
Le test contient environ 50 % de lignes en moins.
Train et Test sont très proches dans la distribution des données manquantes.
Les valeurs des données d’entraînement et de test sont très cohérentes dans tous les domaines
Association/correlation analysis
- Le sexe, le tarif et la classe donnent le plus d’informations sur les survivants
- Comme prévu, Fare et Pclass sont fortement corrélés
- L’âge semble nous en dire beaucoup sur Pclass, les frères et sœurs et dans une certaine mesure Fare, ce qui serait quelque peu attendu. Il semble nous en dire beaucoup sur « Embarqué » ce qui est un peu plus surprenant.
Missing data
- Il n’y a pas de données manquantes significatives, sauf pour l’âge (~ 20 %) et la cabine (~ 77 %)