- Apprendre
- Informatique et numérique
- Science des données et IA
- Python et pandas : NumPy, analyse et visualisation de données
- Analyse exploratoire des données en Python
Analyse exploratoire des données en Python
IntermédiaireUnité 8 sur 8 de la formation Formation : Python et pandas : NumPy, analyse et visualisation de données
Ce que tu vas apprendre
- Explique à quoi sert l’analyse exploratoire des données, transforme une demande générale en questions concrètes et prépare un notebook que chacun peut réexécuter du début à la fin.
- Définir l’objectif et les questions d’une analyse exploratoireDécris le rôle de l’analyse exploratoire des données, suis ses étapes des questions aux résultats et formule des questions précises auxquelles les données peuvent répondre.
- Organiser un notebook que chacun peut réexécuterStructure un notebook Jupyter pour qu’il s’exécute du début à la fin avec les mêmes résultats, grâce à des sections claires, des chemins relatifs, des versions consignées, des graines aléatoires fixes et des vérifications intégrées.
- Définir l’objectif et les questions d’une analyse exploratoire
- Examine la taille, la structure et les types de variables d’un nouveau jeu de données, quantifie les données manquantes et les doublons, puis vérifie la validité et la cohérence des valeurs avant de te fier à une régularité.
- Examiner la structure, la taille et les types des variablesUtilise les méthodes d’inspection de pandas pour connaître la forme, les colonnes, les types et les clés d’un jeu de données, classe chaque variable en vue de l’analyse et repère les valeurs stockées avec un type incorrect.
- Quantifier les valeurs manquantes et les doublonsCompte les valeurs manquantes et leur proportion par colonne, trouve les codes cachant des valeurs manquantes, vérifie si leur absence suit une régularité et détecte les lignes et les clés en double.
- Vérifier la validité et la cohérence des valeursVérifie les intervalles, les catégories, les relations entre colonnes, les unités et la couverture temporelle, et consigne chaque problème de qualité des données ainsi que chaque décision.
- Examiner la structure, la taille et les types des variables
- Décris et représente graphiquement chaque variable quantitative et qualitative, reconnais les formes des distributions, puis repère les valeurs aberrantes et décide de leur traitement.
- Décrire une variable quantitative par sa tendance centrale et sa dispersionCalcule et interprète les indicateurs de tendance centrale, de dispersion et de position dans pandas, et choisis des indicateurs robustes lorsque les données sont asymétriques ou contiennent des valeurs extrêmes.
- Représenter et décrire la forme des distributionsTrace des histogrammes, des courbes de densité, des boîtes à moustaches et des fonctions de répartition empiriques avec pandas et seaborn, choisis des classes et des échelles qui montrent la forme réelle, puis décris une distribution avec des mots et des nombres.
- Décrire les variables qualitativesConstruis des tableaux des effectifs et des fréquences et des diagrammes en barres pour les variables qualitatives, respecte l’ordre des catégories ordinales, traite les catégories rares et les libellés manquants, et indique le dénominateur de chaque pourcentage.
- Repérer les valeurs aberrantes et décider de leur traitementRepère les valeurs inhabituelles avec la règle de l’écart interquartile, les scores z et les scores robustes, recherche leur cause, puis choisis et documente un traitement justifié.
- Décrire une variable quantitative par sa tendance centrale et sa dispersion
- Représente les relations entre variables quantitatives avec des nuages de points, mesure leur force à l’aide de coefficients de corrélation et interprète ce qu’une liaison peut montrer et ce qu’elle ne peut pas montrer.
- Représenter et décrire les relations entre deux variables quantitativesTrace des nuages de points et des matrices de nuages de points qui restent lisibles avec de nombreux points, ajoute une troisième variable par la couleur ou des panneaux, et décris le sens, la forme, la force et les points inhabituels de la relation.
- Mesurer la liaison à l’aide de coefficients de corrélationCalcule et interprète les corrélations de Pearson, de Spearman et de Kendall dans pandas, lis une matrice de corrélation et une carte de chaleur, et reconnais ce qu’un coefficient ne montre pas.
- Interpréter les relations sans tirer de conclusions excessivesExplique pourquoi une liaison statistique ne prouve pas une causalité, reconnais les facteurs de confusion, le paradoxe de Simpson, les tendances temporelles, les plages restreintes, l’agrégation et les résultats dus au hasard, puis formule les conclusions en conséquence.
- Représenter et décrire les relations entre deux variables quantitatives
- Compare les distributions, les proportions et les taux entre groupes et périodes, en tenant compte des effectifs et en utilisant les bons dénominateurs, et reconnais quand une différence repose sur trop peu de données.
- Comparer une variable quantitative entre groupesDécris une variable quantitative par groupe avec les effectifs et les indicateurs de tendance centrale et de dispersion, trace les distributions des groupes côte à côte et exprime les écarts en termes absolus et relatifs.
- Comparer les proportions des catégories et les taux entre segmentsConstruis des tableaux de contingence avec des pourcentages en ligne ou en colonne, compare des taux avec le bon dénominateur et distingue les points de pourcentage des variations en pourcentage.
- Comparer les segments au fil du tempsAgrège les données par période et par segment, évite les pièges des périodes incomplètes ou de durée inégale, distingue la saisonnalité des tendances et examine les lacunes et les changements brusques.
- Comparer une variable quantitative entre groupes
- Transforme l’exploration en résultats clairs et étayés, dont les limites sont exposées honnêtement, et partage l’analyse sous forme d’un notebook ou d’un rapport soigné que d’autres peuvent réexécuter et vérifier.
- Transformer les constats en résultats clairs et étayésRédige des résultats qui répondent aux questions avec des éléments probants, leur ampleur et leur périmètre, choisis et légende des graphiques qui rendent chaque résultat visible, puis indique les limites et les prochaines étapes.
- Partager une analyse reproductiblePrépare un notebook soigné et réexécutable, calcule chaque nombre présenté dans le code, exporte le notebook sous forme de rapport, enregistre les figures et les tableaux, consigne leur provenance et protège les données personnelles.
- Transformer les constats en résultats clairs et étayés
Analyse exploratoire des données en Python : cours
1Planifier une analyse exploratoire dans un notebook
Des questions claires rendent une analyse exploratoire utile, et un notebook fiable permet d’en vérifier les résultats. Commence par relier la demande à une décision, identifier la population et comprendre ce que représente une ligne. Organise ensuite le code, les paramètres et les vérifications pour qu’une nouvelle session puisse reproduire le travail. Ces habitudes donnent un objectif et un point de départ fiable aux graphiques et aux comparaisons qui suivent.
1.1 Des questions qui donnent un objectif à l’exploration
L’analyse exploratoire des données utilise des indicateurs et des graphiques pour découvrir ce que contient un jeu de données. Tu recherches les problèmes de qualité, les régularités et les surprises, puis tu t’en sers pour formuler de meilleures questions. John Tukey a développé et promu cette approche, notamment dans son livre de 1977 Exploratory Data Analysis.
Partir d’une décision
Une demande comme « Comment se passent nos livraisons ? » est trop générale pour guider le premier calcul. Demande-toi quelle décision l’analyse éclairera, puis précise les variables et les comparaisons importantes. Parmi les questions utiles : « Quelle est la durée typique d’une livraison et dans quelle mesure varie-t-elle ? », « Quelle proportion de commandes prend plus de 45 minutes ? », « Les durées diffèrent-elles selon la ville ou l’heure ? » et « La médiane mensuelle a-t-elle changé depuis janvier ? ». Chacune oriente vers un indicateur, un graphique ou une comparaison.
Avant de calculer, établis l’origine des données, leur mode de collecte, leur période et leur population, ainsi que le sens et l’unité de chaque colonne. Une hausse du nombre de champs remplis peut refléter une modification du formulaire qui a rendu un champ obligatoire. Ce contexte change l’explication de la régularité observée.
Comprendre ce que représente une ligne
L’unité d’observation, aussi appelée granularité, est ce que représente une ligne. Il peut s’agir d’une commande, d’un article d’une commande, d’un client ou d’un magasin un jour donné. Une table de 12 000 lignes de commande et de 4 000 identifiants de commande distincts compte en moyenne 3 lignes par commande. Son nombre de lignes décrit les articles : une question portant sur les commandes nécessite donc de compter les commandes. Dans cette table, les identifiants de commande répétés sont attendus ; ils constitueraient un problème de qualité dans une table censée contenir une ligne par commande.
Suivre une boucle
Une démarche utile est la suivante :
- Énoncer les questions et la décision qu’elles éclairent.
- Charger les données et confirmer ce que représente une ligne.
- Établir le profil de la structure, des types et de la qualité.
- Examiner séparément les variables importantes.
- Explorer les relations entre variables.
- Comparer les segments et les périodes.
- Consigner les résultats, les limites et les prochaines questions.
Ces étapes forment une boucle. Une relation surprenante peut te conduire à revenir à la source pour vérifier les unités ou les valeurs manquantes. De nouvelles données peuvent modifier le profil et rouvrir des questions antérieures. Partir de questions garde l’analyse ciblée ; rester ouvert aux surprises préserve son caractère exploratoire. Tracer toutes les paires possibles sans objectif produit généralement une longue collection de graphiques avec peu de choses à expliquer.
Distinguer une piste d’une confirmation
L’exploration produit des hypothèses. L’analyse confirmatoire vérifie une hypothèse formulée à l’avance, idéalement avec des données qui n’ont pas révélé la régularité. Examiner de nombreux graphiques rend plus probables les régularités dues au hasard : un résultat exploratoire frappant doit donc être étudié davantage avant d’étayer une affirmation générale. L’analyse exploratoire aide à préparer ce travail en montrant les variables utilisables, les distributions asymétriques et les relations prometteuses.
La couverture des données détermine aussi la portée d’un résultat. Les avis sur les produits proviennent de personnes qui ont choisi d’en écrire. Leurs évaluations décrivent ces répondants ; étendre le résultat à tous les clients exige des éléments sur les différences entre les répondants et les autres clients.
Points clés
- Commence par une décision et des questions concrètes sur les variables, les populations et les comparaisons.
- Confirme ce que représente une ligne avant d’interpréter les effectifs ou les clés répétées.
- Utilise les étapes comme une boucle : les surprises peuvent révéler des problèmes de qualité ou de nouvelles questions.
- L’exploration produit des hypothèses ; la confirmation vérifie des hypothèses formulées à l’avance.
- Le processus de collecte et la population limitent la portée des résultats.
1.2 Un notebook qui s’exécute du début à la fin
Un notebook Jupyter réunit du code, des sorties et des explications Markdown. Son noyau est le processus Python qui conserve les variables en mémoire. Il mémorise l’ordre d’exécution des cellules, qui peut différer de l’ordre visible sur la page.
Supprimer l’état caché
Supposons que tu exécutes une cellule qui crée clean, que tu la supprimes, puis que tu continues à utiliser clean plus bas. La session actuelle fonctionne toujours parce que la variable reste en mémoire. Une nouvelle session échoue parce que le notebook ne contient plus sa définition. Modifier une cellule au début après avoir exécuté des calculs plus bas peut aussi laisser d’anciennes sorties à côté du nouveau code.
Les compteurs d’exécution comme [7] aident à repérer les exécutions dans le désordre. Une vérification pratique est plus complète : dans JupyterLab, choisis Kernel → Restart Kernel and Run All Cells. Vérifie que tout le notebook s’exécute et que ses nombres correspondent aux sorties que tu souhaites partager.
Organiser clairement les dépendances
Commence par un titre, l’objectif et les questions. Ajoute ensuite les importations et une cellule de paramètres, puis des sections pour le chargement, les contrôles de qualité, les distributions, les relations, les comparaisons et les résultats. Par exemple :
from pathlib import Path
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
DATA = Path("data/raw/orders.csv")
LATE_MINUTES = 45
SEED = 42
df = pd.read_csv(DATA)
Un chemin relatif fonctionne dans la structure du projet partagé. Un chemin lié au bureau d’une personne cesse de fonctionner lorsque le projet est déplacé. Indique le répertoire de travail utilisé pour exécuter le notebook afin que le chemin relatif soit résolu correctement. Préserve les fichiers bruts et enregistre les données traitées séparément. Effectue les modifications dans le code : une modification manuelle dans un tableur est invisible lors de la prochaine réexécution.
Consigner l’environnement et les choix aléatoires
Enregistre les versions des paquets dans un fichier d’environnement, par exemple avec la sortie de pip freeze > requirements.txt, et affiche les versions importantes dans le notebook avec print(pd.__version__). Le comportement change selon les versions : pandas 3 attribue au texte le type de données dédié str, et un DataFrame contenant du texte nécessite une sélection explicite des colonnes quantitatives pour calculer les corrélations.
Un graphique fondé sur un échantillon doit montrer les mêmes observations à chaque réexécution. Utilise df.sample(n=1000, random_state=42) lorsqu’au moins 1 000 lignes sont disponibles, ou crée un générateur NumPy avec rng = np.random.default_rng(42). Consigne la graine avec les autres paramètres. Une graine contrôle les choix aléatoires ; reproduire l’ensemble des sorties nécessite aussi les mêmes données d’entrée et logiciels.
Rendre les hypothèses vérifiables à l’exécution
Transforme les attentes importantes en vérifications :
assert df["order_id"].is_unique
assert df["minutes"].ge(0).all()
La première exige un identifiant de commande unique par ligne. La seconde exige que chaque durée soit positive ou nulle et présente pour les données ordinaires à virgule flottante. Si les durées manquantes sont autorisées, définis une vérification distincte de leur absence et applique la règle d’intervalle uniquement aux durées enregistrées. Une assertion qui échoue arrête l’exécution dès que les données d’entrée ne respectent plus les conditions attendues.
Place les procédures répétées dans des fonctions pour qu’une seule correction mette à jour tous leurs usages. Place le code et les notebooks sous gestion de versions. Les sorties des notebooks sont stockées dans leur JSON, ce qui peut rendre les modifications difficiles à comparer ; effacer les sorties avant un commit ou associer le notebook à un script texte avec Jupytext peut aider.
Points clés
- Le noyau conserve les variables issues de l’historique d’exécution, y compris celles des cellules qui ne sont plus visibles.
- Redémarre le noyau et exécute chaque cellule pour révéler les dépendances cachées et les sorties obsolètes.
- Regroupe les importations et les paramètres, utilise des chemins relatifs et préserve les données d’entrée brutes.
- Consigne les versions des paquets et fixe la graine de chaque étape aléatoire.
- Utilise des assertions pour vérifier les conditions que doit respecter un nouveau fichier d’entrée.
- Effectue chaque modification des données dans le code pour qu’une autre exécution puisse la reproduire.
2Établir le profil d’un jeu de données et évaluer sa qualité
Un jeu de données peut sembler bien organisé tout en cachant des enregistrements répétés, des codes de valeurs manquantes ou des unités incompatibles. Établis le profil de sa structure et du sens de ses données, quantifie les lacunes et les doublons, puis applique des règles qui reflètent la façon dont les données ont été recueillies. L’objectif est de comprendre quelles observations étayent chaque résultat et de laisser une trace visible des décisions qui modifient les données analysées.
2.1 Le premier examen d’un jeu de données
Un premier examen permet de connaître la taille de la table, ce que représentent ses colonnes et si leurs types de stockage correspondent à leur sens. Ce profil t’aide à choisir des indicateurs pertinents avant de te fier au résultat d’une commande pratique.
Examiner la structure sous plusieurs angles
Utilise df.shape pour obtenir les nombres de lignes et de colonnes, df.head() et df.tail() pour les extrémités du fichier, et df.sample(5, random_state=0) pour un échantillon reproductible lorsqu’il existe au moins cinq lignes. Les premières lignes peuvent toutes correspondre à la date la plus ancienne ou au même magasin. Exécute df.info() pour examiner les noms des colonnes, les nombres de valeurs non manquantes, les types de données et l’occupation mémoire. Utilise df.nunique() pour compter les valeurs distinctes enregistrées dans chaque colonne.
Distinguer le sens du stockage
| Type d’analyse | Exemple | Traitement utile |
|---|---|---|
| Quantitative continue | Distance en km | Tendance centrale, dispersion et distribution |
| Quantitative discrète | Articles par commande | Effectifs et classes centrées sur les entiers |
| Catégorie nominale | Ville | Effectifs et proportions |
| Catégorie ordinale | Faible, moyen, élevé | Effectifs dans un ordre pertinent |
| Date et heure | Horodatage de commande | Couverture et comparaisons par période |
| Identifiant | Identifiant de client | Unicité et liens entre enregistrements |
| Texte libre | Commentaire écrit | Examiner le texte et sa qualité |
Un type de données entier ne fait pas de chaque colonne une quantité. Les codes de région et les identifiants de clients sont stockés sous forme numérique, mais leur moyenne arithmétique n’est pas utile. Une note de 1 à 5 présente un petit ensemble de réponses ordonnées et gagne souvent à être représentée comme une catégorie.
pandas utilise couramment int64, float64, bool, datetime64, category et, depuis pandas 3, str. Les versions antérieures de pandas utilisaient souvent object pour le texte. Les données entières ordinaires peuvent devenir float64 en présence de valeurs manquantes, car NaN est un marqueur à virgule flottante ; le type nullable Int64 accepte des entiers avec des valeurs manquantes.
Vérifier les conversions et les clés
Une chaîne qui ressemble à un nombre peut cacher des séparateurs, des unités ou des codes de valeurs manquantes. Pour une Series contenant « 1,234 », « 950 », « n/a » et « 1,010 » :
parsed = pd.to_numeric(
s.str.replace(",", ""), errors="coerce"
)
Les valeurs deviennent 1234.0, 950.0, NaN et 1010.0. Compare les nombres de valeurs manquantes avant et après la conversion et examine les entrées devenues manquantes. La coercition transforme aussi une valeur non traitée comme « 12 kg » en NaN : une exécution réussie ne suffit donc pas à montrer que la conversion a préservé les données.
Lis comme texte les codes dont les zéros initiaux ont un sens, par exemple avec pd.read_csv(path, dtype={"postal_code": "str"}). Retrouver ensuite un zéro perdu exige une information que la représentation entière a supprimée.
Identifie la clé attendue pour les lignes. df["order_id"].is_unique vérifie une clé à une colonne ; df.duplicated(subset=["store_id", "date"]).sum() vérifie les combinaisons magasin-date répétées. Relie les nombres de clés à ce que représente une ligne. Une colonne à valeur unique ne peut pas expliquer les différences au sein de ce jeu de données ; des milliers de catégories censées représenter des villes peuvent signaler des libellés incohérents.
Complète un dictionnaire de données au fil de ton examen : consigne le sens, le type d’analyse, l’unité, les valeurs autorisées et les problèmes connus de chaque colonne. Ces informations fournissent les règles des prochaines vérifications de qualité.
Points clés
- Examine la taille, des échantillons de lignes, les nombres de valeurs non manquantes, les types de données et les nombres de valeurs distinctes.
- Choisis les méthodes d’analyse d’après le sens d’une variable, notamment son ordre et ses unités.
- Vérifie les entrées devenues manquantes après toute conversion qui transforme les échecs d’analyse en valeurs manquantes.
- Vérifie que la clé attendue correspond à l’unité d’observation de la table.
2.2 Valeurs manquantes et enregistrements répétés
Les valeurs manquantes modifient les observations qui contribuent à un résultat. Les enregistrements en double peuvent donner plus de poids à certaines observations. Quantifie les deux avant de choisir un traitement et rends ta décision visible dans l’analyse.
Quantifier les valeurs manquantes et leur répartition
pandas utilise NaN, NaT pour les dates et heures manquantes et <NA> pour les types nullables. Compte et classe les valeurs manquantes avec :
missing_count = df.isna().sum()
missing_share = df.isna().mean().sort_values(ascending=False)
rows_with_gaps = df.isna().any(axis=1).sum()
Une moyenne de valeurs booléennes donne une proportion, car True compte pour 1 et False pour 0. Avec 96 âges manquants parmi 1 200 lignes, la proportion de valeurs manquantes est de 8 %. Les lignes comportant au moins une valeur manquante peuvent être bien plus nombreuses que les entrées manquantes d’une seule colonne ; c’est le nombre de lignes qu’une application systématique de df.dropna() supprimerait.
Certaines valeurs manquantes sont cachées derrière des valeurs ordinaires. L’analyse CSV par défaut reconnaît de nombreux marqueurs de valeurs manquantes, champs vides ou texte, mais des codes comme -999, « unknown » et « ? » peuvent subsister. Examine les fréquences et les valeurs extrêmes, consulte le dictionnaire de données et déclare les marqueurs supplémentaires avec na_values. Le zéro exige du contexte : il peut signifier qu’il n’y a aucun retour ou être un code de valeur manquante non documenté.
Vérifie si les valeurs manquantes se concentrent dans un segment :
age_gaps = df["customer_age"].isna()
age_gaps.groupby(df["city"]).mean()
Si une ville présente 40 % d’âges manquants et les autres environ 2 %, une analyse limitée aux lignes complètes sous-représentera cette ville. Les termes MCAR, MAR et MNAR décrivent différents mécanismes : l’absence de données n’est liée ni aux valeurs observées ni aux valeurs manquantes ; elle dépend uniquement de variables observées ; ou elle dépend de la valeur manquante elle-même. Les répondants aux revenus élevés qui ne répondent pas à une question sur leurs revenus illustrent le mécanisme MNAR. L’analyse exploratoire peut détecter des liens avec les variables enregistrées ; déterminer le mécanisme complet exige davantage d’éléments sur la collecte.
Préciser le dénominateur
Pour 6 paiements par carte, 2 paiements en espèces et 2 valeurs manquantes, value_counts(normalize=True) indique 75 % de paiements par carte et 25 % en espèces parmi les 8 paiements enregistrés. L’ajout de dropna=False donne 60 % de paiements par carte, 20 % en espèces et 20 % de valeurs manquantes parmi les 10 lignes. Chaque tableau répond à une question différente. Indique la population sur laquelle repose chaque proportion.
Examiner les lignes et les clés en double
df.duplicated().sum() compte les copies après la première occurrence de chaque ligne complète. Une vérification fondée sur les clés peut trouver des enregistrements contradictoires qui ne sont pas identiques :
repeated = df["order_id"].duplicated(keep=False)
df.loc[repeated].sort_values("order_id")
Considère les identifiants 101, 102, 102, 103, 104, 104 avec les montants 20, 35, 35, 12, 50, 55. Il y a 1 ligne entièrement en double, 2 occurrences de clés répétées après la première et 4 lignes associées à des clés répétées. Les deux enregistrements 104 indiquent des montants différents : supprimer une copie sans examen pourrait donc éliminer la valeur correcte.
Pour chaque problème, consigne le nombre de cas, la cause probable, le traitement et les lignes concernées. Supprimer toutes les lignes incomplètes peut retirer un sous-ensemble biaisé ; remplacer les valeurs manquantes par la moyenne masque leur répartition et réduit la dispersion apparente. Choisis un traitement adapté à la question et au processus de collecte, puis garde la possibilité de quantifier les valeurs initialement manquantes.
Points clés
- Compte les valeurs manquantes par colonne et les lignes qui en contiennent avant de choisir un traitement.
- Vérifie les valeurs sentinelles et compare les valeurs manquantes entre segments pertinents.
- Les mécanismes d’absence de données décrivent pourquoi des valeurs manquent ; les régularités observées ne suffisent pas à identifier le mécanisme complet.
- Les proportions calculées par défaut excluent les valeurs manquantes : indique donc le dénominateur.
- Les lignes entièrement en double et les clés répétées associées à des enregistrements contradictoires demandent des examens différents.
- Consigne les traitements, car supprimer ou remplacer des valeurs modifie les données analysées.
2.3 Des règles pour révéler les données invalides ou incohérentes
Une valeur est valide lorsqu’elle appartient à l’intervalle ou à l’ensemble autorisé pour sa colonne. Les enregistrements sont cohérents lorsque leurs valeurs concordent entre colonnes, lignes et sources. Construis les vérifications à partir du dictionnaire de données et de ta connaissance du processus qui a produit les données.
Vérifier les intervalles sans y mêler les valeurs manquantes
Commence par les minima et les maxima, puis vérifie des bornes explicites. Pour compter les âges enregistrés hors de l’intervalle de 0 à 120 :
invalid_age = df["age"].notna() & ~df["age"].between(0, 120)
invalid_age.sum()
between renvoie False pour les valeurs manquantes. Sa négation seule compterait les âges manquants comme invalides ; la vérification de présence distingue les deux problèmes. D’autres règles peuvent imposer des quantités positives ou nulles, des pourcentages au plus égaux à 100 ou des dates d’extraction qui ne précèdent pas les événements contenus dans les données. L’intervalle autorisé dépend du sens de la colonne.
Harmoniser les libellés et vérifier les colonnes
« Lyon », « lyon » et « Lyon » sont trois chaînes, même lorsqu’elles désignent la même ville. Après suppression justifiée des espaces et conversion de la casse, les effectifs de 410, 22 et 5 deviennent 437 pour « lyon » :
city_clean = df["city"].str.strip().str.lower()
Compare les effectifs des catégories avant et après. Les variantes orthographiques et les synonymes demandent une correspondance explicite ; changer uniquement la casse ne peut pas réunir « UK » et « United Kingdom ». Conserve la règle utilisée pour qu’une réexécution reproduise la même décision.
Les vérifications entre colonnes recherchent les contradictions. df.query("delivered_at < ordered_at") trouve les livraisons horodatées avant leur commande. D’autres vérifications portent sur la somme des montants des articles par rapport au total, la concordance entre l’âge et la date de naissance ou la présence inattendue d’une durée de livraison pour une commande annulée. Ces règles supposent des unités, des conventions horaires et des définitions identiques entre les colonnes.
Rechercher les changements d’échelle et de couverture
Le mélange de kilogrammes et de grammes peut créer des groupes dont les valeurs diffèrent d’un facteur d’environ 1 000. Une proportion enregistrée en partie sur une échelle de 0 à 1 et en partie sur une échelle de 0 à 100 crée aussi une distribution trompeuse. Vérifie la source avant de convertir : deux groupes peuvent aussi représenter deux populations réelles. Un graphique indique où enquêter ; la source établit les unités applicables.
Examine les dates les plus ancienne et la plus récente ainsi que les effectifs par mois. Un mois manquant peut correspondre à une lacune d’extraction, tandis qu’un dernier mois incomplet contient naturellement moins d’enregistrements. Une hausse brusque peut refléter un nouveau système d’enregistrement. Consigne la couverture réellement disponible avant de présenter une régularité temporelle.
Tenir un journal de qualité
Utilise un petit tableau indiquant le problème, la vérification, le nombre de lignes concernées, les éléments constatés et l’action. Par exemple, une durée négative peut être repérée par une règle imposant une durée positive ou nulle, examinée à partir des horodatages et corrigée uniquement lorsque la source établit sa vraie valeur. Les conditions importantes peuvent devenir des assertions qui arrêteront une exécution ultérieure.
Une livraison de 120 minutes est inhabituelle mais possible. Une durée de −5 minutes est impossible avec la même définition de la durée. La première nécessite un examen comme valeur aberrante ; la seconde, un examen comme erreur.
Points clés
- Utilise les règles métier pour vérifier les intervalles valides, les ensembles de catégories et la concordance entre colonnes.
- Compte les valeurs manquantes séparément des valeurs enregistrées hors de l’intervalle autorisé.
- Vérifie les variantes de libellés, les mélanges d’unités et la couverture temporelle avant d’interpréter des régularités.
- Tiens un journal de qualité et transforme les conditions importantes sur les données d’entrée en assertions.
- Examine les valeurs inhabituelles ; distingue une valeur extrême possible d’une valeur impossible.
3Décrire la distribution de chaque variable
Un seul indicateur de tendance centrale peut masquer une longue queue, deux groupes distincts ou une borne d’enregistrement. Décris chaque variable importante à l’aide d’indicateurs et de graphiques adaptés à son sens. Pour les variables quantitatives, examine la tendance centrale, la dispersion, la forme et les valeurs inhabituelles ; pour les variables qualitatives, précise les libellés, l’ordre et les dénominateurs. Les règles de détection des valeurs aberrantes aident à repérer les enregistrements à examiner, tandis que le contexte détermine leur traitement.
3.1 Tendance centrale, dispersion et effet des valeurs extrêmes
Une distribution quantitative décrit les valeurs observées et leur fréquence. Sa tendance centrale indique où se situent les données, sa dispersion montre leur étalement et sa forme révèle ce que ces indicateurs ne montrent pas. Utilise un graphique en complément des nombres.
Choisir des indicateurs adaptés à la distribution
La moyenne est la somme divisée par l’effectif. La médiane est la valeur centrale des données ordonnées ou la moyenne des deux valeurs centrales lorsque l’effectif est pair. L’étendue est le maximum moins le minimum. L’écart interquartile est Q3 moins Q1 : c’est la distance entre le 75e et le 25e centile. L’écart-type mesure la dispersion autour de la moyenne dans les unités de la variable.
La méthode pandas s.std() calcule l’écart-type d’échantillon avec ddof=1, en divisant la somme des carrés des écarts par le nombre d’observations moins un. NumPy np.std(a) utilise par défaut ddof=0, qui divise par l’effectif. Cette différence compte particulièrement pour les petits échantillons : utilise donc des réglages correspondants pour comparer les résultats.
Lire les indicateurs avant de les interpréter
s = df["minutes"]
s.describe(percentiles=[0.1, 0.5, 0.9])
Le résultat comprend le nombre de valeurs non manquantes, la moyenne, l’écart-type, le minimum, les centiles demandés et le maximum. L’entrée à 50 % est la médiane. Sur un DataFrame, describe() traite par défaut les colonnes quantitatives et les colonnes de dates et heures ; les indicateurs des dates et heures comprennent leur moyenne et leurs centiles. describe(include="all") décrit aussi les autres colonnes. Les colonnes textuelles et catégorielles reçoivent count, unique, top et freq, où top est une valeur parmi les plus fréquentes et freq son effectif. Exclus les identifiants numériques des calculs arithmétiques.
Étudier une longue queue à droite
Considère les durées de livraison de 18, 22, 25, 25, 27, 29, 31, 34, 38, 41 et 95 minutes. Leur somme est de 385 et leur effectif de 11 : la moyenne est donc de 35,0 minutes. La sixième valeur ordonnée est 29, ce qui donne la médiane. pandas donne Q1 = 25, Q3 = 36, IQR = 11 et un écart-type d’échantillon d’environ 21,02 minutes.
Sans la livraison de 95 minutes, la moyenne est de 29,0, la médiane de 28 et l’écart-type d’environ 7,15. Une valeur déplace la moyenne de 6 minutes et triple approximativement l’écart-type ; la médiane change de 1 minute. C’est pourquoi la médiane et l’écart interquartile sont des indicateurs robustes utiles pour les données contenant des valeurs extrêmes. Une distribution à peu près symétrique sans valeurs extrêmes est souvent bien décrite par sa moyenne et son écart-type.
Décrire la queue et des positions utiles
Une asymétrie à droite présente une longue queue du côté des grandes valeurs ; une asymétrie à gauche présente une longue queue du côté des petites valeurs. La moyenne se situe généralement du côté de la longue queue par rapport à la médiane, mais vérifie la forme, car cette règle empirique admet des exceptions. s.skew() est positif pour une queue à droite et négatif pour une queue à gauche ; il vaut environ 2,71 pour ces durées de livraison.
s.quantile(0.9) donne ici 41 minutes, ce qui décrit utilement la partie supérieure de la distribution. Une livraison sur les 11 dépasse 45 minutes, soit environ 9,1 %. En présence de valeurs manquantes, calcule les proportions au-dessus d’un seuil parmi les valeurs enregistrées. Les quartiles des petits échantillons peuvent différer selon les programmes : pandas utilise par défaut une interpolation linéaire. Consigne la méthode lorsque les quartiles exacts sont importants.
Points clés
- Utilise la tendance centrale, la dispersion et un graphique pour décrire une distribution quantitative.
- La médiane et l’écart interquartile sont robustes face aux valeurs extrêmes ; la moyenne et l’écart-type y sont très sensibles.
- Vérifie les nombres de valeurs non manquantes et la correspondance des réglages de l’écart-type.
- Les centiles et les proportions au-dessus d’un seuil peuvent répondre directement à des questions pratiques.
- Le sens de l’asymétrie indique le côté de la longue queue, pas celui où se trouve la majorité des observations.
3.2 Des graphiques qui montrent la forme d’une distribution
Un graphique de distribution révèle les queues, les pics, les lacunes et les bornes qu’un indicateur de tendance centrale seul masque. Chaque graphique met en évidence des caractéristiques différentes : choisis-le selon la question et vérifie comment les choix d’affichage modifient l’image.
Choisir des classes pertinentes pour l’histogramme
Un histogramme divise une échelle quantitative en intervalles et compte les observations dans chacun. sns.histplot(data=df, x="minutes", binwidth=5) utilise des classes de cinq minutes. seaborn choisit automatiquement les classes par défaut ; les histogrammes de pandas et de Matplotlib en utilisent 10 par défaut. Essaie plusieurs réglages raisonnables. Une classe très large peut réunir deux pics, tandis que des classes très étroites peuvent faire apparaître le bruit d’échantillonnage comme une structure. Pour des dénombrements entiers, discrete=True centre une barre sur chaque entier.
Décris la forme comme symétrique, asymétrique à droite ou à gauche, uniforme, ou présentant un, deux ou plusieurs pics. Cherche les lacunes, les plafonds et les planchers. Des pics aux valeurs rondes comme 30 et 60 minutes peuvent refléter une attraction des valeurs rondes due à l’arrondi des durées déclarées. Deux pics près de 25 et 50 minutes peuvent refléter des livraisons à vélo et en voiture. L’ajout de hue="vehicle" permet de vérifier si ces groupes expliquent la séparation.
Comparer les principaux graphiques
| Graphique | Ce qu’il aide à voir | Ce qu’il faut vérifier |
|---|---|---|
| Histogramme | Effectifs par intervalle, pics et lacunes | Amplitude et alignement des classes |
| Estimation de densité par noyau | Estimation lisse de la forme de la distribution | Largeur de bande et queues impossibles |
| Boîte à moustaches | Médiane, moitié centrale et valeurs extrêmes repérées | Pics masqués et taille de l’échantillon |
| Fonction de répartition empirique | Proportion inférieure ou égale à chaque valeur | Unités des axes et population |
Une estimation de densité par noyau lisse les observations sous forme d’une courbe. sns.kdeplot(data=df, x="minutes") peut être utile, mais la largeur de bande change sa forme. Le lissage peut masquer des plafonds ou s’étendre sous zéro même lorsque les durées sont positives ou nulles. Interprète ce prolongement comme une caractéristique de l’estimation, et non comme des durées négatives observées.
Une boîte à moustaches trace la médiane dans une boîte allant de Q1 à Q3. Les moustaches atteignent par défaut les valeurs observées les plus extrêmes situées à une distance maximale de 1,5 fois l’écart interquartile de la boîte ; les points plus éloignés apparaissent séparément. Une moustache ne correspond donc pas nécessairement au minimum ou au maximum, et son extrémité est une valeur observée plutôt que la borne calculée.
Lire les proportions cumulées et les échelles multiplicatives
sns.ecdfplot(data=df, x="minutes")
Une fonction de répartition empirique indique la proportion inférieure ou égale à chaque valeur. Pars horizontalement d’une proportion comme 0,9 pour repérer un centile. Elle évite le choix de classes d’un histogramme et permet de comparer la fréquence à laquelle les valeurs restent sous un seuil.
Une échelle logarithmique est utile pour des données positives dont les rapports sont grands. Sur une échelle en base 10, 10, 100 et 1 000 sont également espacés, car chaque étape multiplie par 10. Les logarithmes réels ordinaires exigent des valeurs positives ; np.log1p(x) calcule le logarithme naturel de un plus la valeur et prend en charge zéro dans des données positives ou nulles.
Pour comparer des groupes de tailles différentes, normalise séparément chaque groupe avec stat="percent", common_norm=False, ou utilise des panneaux aux axes partagés. Termine par une description chiffrée, par exemple : « La distribution des durées de livraison est asymétrique à droite, avec une médiane de 29 minutes et la moitié des commandes livrées entre 25 et 36 minutes ; une commande a pris 95 minutes. »
Points clés
- Essaie des réglages de classes raisonnables avant de conclure qu’un pic ou une lacune est réel.
- Vérifie si des mélanges de groupes expliquent les pics multiples.
- Le lissage d’une estimation de densité par noyau peut masquer des caractéristiques ou s’étendre au-delà des observations possibles.
- Une boîte à moustaches décrit la position et la dispersion, mais masque le nombre de modes et la taille de l’échantillon.
- Une fonction de répartition empirique donne les proportions cumulées sans classes.
- Les échelles logarithmiques montrent les rapports ; les graphiques normalisés séparément aident à comparer les formes des groupes.
3.3 Effectifs des catégories, ordre et dénominateurs
Les indicateurs de variables qualitatives comptent les observations dans des groupes nommés. Leur sens dépend des libellés, de leur ordre et de la population utilisée pour chaque pourcentage. Un code de catégorie numérique nécessite lui aussi une description par catégories.
Construire un tableau des effectifs et des fréquences
s.value_counts() liste les catégories de la plus fréquente à la moins fréquente. Utilise normalize=True pour les proportions et dropna=False pour inclure une ligne de valeurs manquantes. Pour le texte, describe() indique le nombre de valeurs enregistrées, le nombre de valeurs distinctes, une des valeurs les plus fréquentes et son effectif.
Parmi 200 réponses à une enquête, 30 évaluations sont « faible », 50 sont « moyen » et 120 sont « élevé ». Diviser chaque effectif par 200 donne 15 %, 25 % et 60 %. Si ces 200 personnes ont répondu à une question dans une enquête plus large, les pourcentages décrivent les répondants à cette question. L’inclusion des réponses manquantes modifie le dénominateur.
Préserver un ordre pertinent
Les catégories nominales comme les villes n’ont pas d’ordre intrinsèque ; le tri par fréquence peut faciliter les comparaisons. Les catégories ordinales ont un ordre naturel qui doit rester visible :
order = ["low", "medium", "high"]
counts = s.value_counts().reindex(order, fill_value=0)
Une variable catégorielle ordonnée enregistre l’ordre pour les tris, les comparaisons et les graphiques. Son value_counts() trie toujours par fréquence par défaut ; utilise sort=False ou réindexe explicitement les effectifs. Un graphique ordonné « élevé », « moyen », « faible » selon les fréquences peut rendre l’échelle plus difficile à reconnaître.
Distinguer les libellés rares des valeurs manquantes
Lorsque de nombreuses catégories rendent un graphique illisible, conserve les libellés les plus fréquents et rassemble les autres sous « Other » :
top = s.value_counts().nlargest(5).index
grouped = s.where(s.isna() | s.isin(top), "Other")
La présence de s.isna() préserve les valeurs manquantes. Sans cette partie, les entrées manquantes deviendraient elles aussi « Other », mélangeant les non-réponses aux réponses rares réelles. Indique combien de libellés et d’observations ont été regroupés. Vérifie qu’une catégorie rare importante pour la question n’a pas disparu dans le groupe ainsi constitué.
Les diagrammes en barres horizontales conviennent aux libellés longs. Par exemple, sns.countplot(data=df, y="city", order=df["city"].value_counts().index) trie les effectifs des villes. Fais commencer l’axe des effectifs à zéro, car la longueur des barres représente le nombre d’observations. Un diagramme circulaire devient difficile à comparer lorsqu’il comporte de nombreux secteurs.
Transformer des intervalles numériques en catégories nommées
bands = pd.cut(
df["minutes"], bins=[0, 30, 45, np.inf],
labels=["up to 30", "over 30 to 45", "over 45"],
include_lowest=True
)
Les intervalles fermés à droite par défaut placent 30 dans la première classe et 45 dans la deuxième. include_lowest=True inclut aussi 0 dans la première classe. Les valeurs hors de ces intervalles deviennent manquantes dans le résultat de la discrétisation : vérifie donc les durées négatives avant d’interpréter son nombre de valeurs manquantes. Consigne les bornes, car un libellé comme « 30–45 » seul ne précise pas le traitement de 30.
Pour les codes nominaux, associe 1 et 2 aux libellés de leurs régions avant de les afficher. Calculer la moyenne des codes de région décrirait leur numérotation arbitraire, et non la distribution des régions.
Points clés
- Les tableaux des effectifs et des fréquences indiquent les effectifs ou les proportions des catégories ; précise le dénominateur.
- Garde les valeurs ordinales dans leur ordre naturel, même lorsque leurs fréquences diffèrent.
- Garde les réponses manquantes séparées lorsque tu regroupes les libellés rares dans la catégorie « Autres ».
- Fais commencer les axes d’effectifs des diagrammes en barres à zéro et rends les libellés longs lisibles.
- Indique explicitement les bornes des classes numériques et vérifie le traitement de leurs extrémités.
3.4 Repérage et traitement des valeurs aberrantes
Une valeur aberrante est éloignée de la majeure partie des données selon une règle et un contexte précisés. Elle peut être une erreur d’enregistrement, un événement rare réel ou un élément d’un groupe distinct. Son repérage déclenche un examen.
Calculer les bornes de l’écart interquartile
La règle de l’écart interquartile repère les valeurs inférieures ou supérieures à ces bornes :
Pour les durées de livraison 18, 22, 25, 25, 27, 29, 31, 34, 38, 41 et 95, Q1 est de 25 et Q3 de 36. L’écart interquartile est de 11 : la borne inférieure est donc de 8,5 et la borne supérieure de 52,5. La commande livrée en 95 minutes est repérée.
q1, q3 = s.quantile([0.25, 0.75])
iqr = q3 - q1
flag = (s < q1 - 1.5 * iqr) | (s > q3 + 1.5 * iqr)
Ce sont les bornes utilisées par défaut pour les points aberrants d’une boîte à moustaches. Une valeur exactement sur une borne est considérée à l’intérieur. Dans une longue queue à droite, cette règle peut repérer de nombreuses grandes valeurs réelles.
Comprendre le masquage et les scores robustes
Un score z mesure la distance à la moyenne en unités d’écart-type :
Une règle courante repère les scores z dont la valeur absolue dépasse 3. Ici, la moyenne est de 35 et l’écart-type d’échantillon d’environ 21,02 : 95 donne donc un score z d’environ 2,85. La valeur extrême a augmenté les indicateurs de tendance centrale et de dispersion utilisés pour la juger. Cet effet, appelé effet de masquage, peut permettre à une valeur inhabituelle d’échapper à la règle. Celle-ci convient aussi mieux aux distributions à peu près symétriques qu’aux distributions asymétriques.
L’écart absolu médian, ou MAD, est la médiane des distances absolues à la médiane. Il utilise des grandeurs robustes. Un score z modifié s’écrit :
Ici, la médiane est de 29 et l’écart absolu médian de 5. Pour 95 minutes, le score modifié est d’environ 8,90, au-delà du seuil usuel de 3,5 en valeur absolue. Si l’écart absolu médian est nul, cette division n’est pas définie ; examine les valeurs répétées et utilise une autre vérification justifiée au lieu de présenter un score infini comme un résultat mesuré.
Examiner avant de modifier les données
Les règles métier viennent en premier. Une durée écoulée négative est une erreur selon cette définition, quel que soit son score statistique. Pour une valeur extrême possible, examine toute la ligne, ses horodatages, sa distance, son groupe et sa source. Une tempête ou un long trajet peut expliquer une livraison lente.
| Éléments constatés | Action possible |
|---|---|
| La source établit la valeur correcte | La corriger dans le code et consigner la modification |
| Un enregistrement est une erreur avérée dont la valeur ne peut pas être retrouvée | Le supprimer ou le marquer comme manquant, en consignant l’effet |
| La valeur est réelle | La conserver ; utiliser des indicateurs robustes ou une échelle utile |
| La conclusion dépend fortement de la valeur | Comparer les résultats avec et sans cette valeur |
Comparer les résultats avec et sans l’observation constitue une analyse de sensibilité. L’écrêtage des valeurs extrêmes à un centile choisi, appelé winsorisation, est une autre transformation délibérée ; indique le seuil et précise que des valeurs ont été modifiées. Examine aussi les combinaisons inhabituelles : deux mesures individuellement plausibles peuvent former un point rare dans un nuage de points.
Points clés
- Les bornes de l’écart interquartile repèrent les valeurs hors de Q1 − 1,5 IQR et Q3 + 1,5 IQR.
- Les valeurs extrêmes peuvent augmenter la moyenne et l’écart-type et se masquer elles-mêmes dans les scores z.
- Les scores z modifiés utilisent la médiane et l’écart absolu médian ; un écart absolu médian nul exige une autre approche.
- Les règles métier distinguent les valeurs impossibles des valeurs extrêmes possibles.
- Examine l’enregistrement complet et documente chaque traitement.
- Utilise des analyses de sensibilité pour montrer quand les valeurs extrêmes changent une conclusion.
- Recherche les combinaisons inhabituelles ainsi que les valeurs extrêmes de chaque variable.
4Explorer les relations entre variables
Deux variables peuvent évoluer ensemble selon une droite, le long d’une courbe ou simplement parce que des groupes distincts ont été réunis. Utilise des nuages de points pour voir la forme, des coefficients de corrélation pour résumer certains aspects de la liaison et des vérifications par sous-groupe pour en rechercher l’origine. L’interprétation exige de tenir compte de la population, de la taille de l’échantillon utilisable et du processus de collecte, ainsi que de la force apparente de la relation.
4.1 Des nuages de points qui révèlent la relation
Un nuage de points place chaque observation selon sa paire de valeurs quantitatives. Place une éventuelle variable explicative sur l’axe horizontal et la variable réponse sur l’axe vertical. Le graphique aide à voir la forme d’une relation avant de la résumer par un coefficient.
Décrire quatre caractéristiques
Utilise le sens, la forme, la force et les points inhabituels. Un sens positif signifie que la réponse tend à augmenter lorsque la variable horizontale augmente ; un sens négatif signifie qu’elle tend à diminuer. La forme peut être droite, courbe ou divisée en groupes. La force décrit à quel point les points suivent cette forme ; elle peut être forte même lorsque la forme est courbe.
Pour des températures de 8, 12, 15, 18, 21, 24, 27 et 30 °C, les nombres de locations quotidiennes de vélos sont respectivement de 310, 420, 515, 600, 690, 760, 800 et 780. La relation est globalement forte et positive. Elle est presque linéaire jusqu’à environ 27 °C, puis se stabilise et baisse légèrement. La qualifier uniquement de « positive » passe sous silence le changement aux températures élevées.
sns.scatterplot(data=df, x="temp_c", y="rentals")
Rendre les graphiques denses lisibles
Avec de nombreuses lignes, les points se couvrent les uns les autres : la superposition des points masque les zones où les observations se concentrent. Des marqueurs plus petits et alpha=0.2 révèlent une partie de la densité par transparence. Un graphique à classes hexagonales agrège les observations dans des hexagones :
df.plot.hexbin(x="distance_km", y="minutes", gridsize=30)
Un sns.histplot à deux dimensions offre une vue similaire avec des classes rectangulaires. Un échantillon aléatoire peut réduire l’encombrement ; fixe sa graine pour que les réexécutions montrent le même sous-ensemble. Lorsqu’un axe ne prend que quelques valeurs, une perturbation aléatoire disperse les points superposés pour les rendre visibles. Ce déplacement concerne l’affichage et n’ajoute aucune précision aux mesures.
Ajouter des groupes et examiner une droite ajustée
Utilise hue="season" pour la couleur ou sns.relplot(..., col="season") pour des panneaux distincts. Un nuage global peut contenir des groupes saisonniers distincts. La taille des marqueurs peut représenter une autre quantité si son sens reste clair.
sns.regplot(data=df, x="temp_c", y="rentals") ajoute une droite des moindres carrés et une bande d’incertitude ombrée. Une droite aide à la lecture, mais peut masquer une courbure. lowess=True trace une courbe lisse lorsque la dépendance statsmodels est installée. Examine les observations avant de choisir l’un ou l’autre affichage.
Pour une petite sélection de variables, une matrice de nuages de points trace les nuages par paires et les distributions individuelles. Utilise par exemple la longueur du bec en mm, la longueur de la nageoire en mm, la masse corporelle en g et l’espèce comme groupe de couleur. Environ trois à six variables quantitatives restent lisibles ; en ajouter beaucoup plus crée un mur de petits panneaux.
Examiner la concentration et les tendances temporelles communes
Les axes logarithmiques peuvent espacer des valeurs positives dont les rapports sont grands, comme la population et la consommation totale d’énergie. Garde l’échelle visible dans les libellés. Lorsqu’un point extrême impose une très grande étendue aux axes, examine-le et ajoute une vue clairement légendée de la majeure partie des données afin de rendre le reste de la relation visible.
Deux variables peuvent aussi dessiner une forme parce qu’elles augmentent toutes deux au fil du temps. Colorie les points selon la date ou trace chaque série en fonction du temps. Cette vérification peut révéler si la relation apparente reflète surtout une tendance commune.
Points clés
- Décris le sens, la forme, la force et les observations inhabituelles.
- Utilise la transparence, des points plus petits, la discrétisation ou des échantillons à graine fixe pour révéler la densité.
- Utilise la couleur ou des panneaux pour examiner les groupes au sein d’une relation globale.
- Examine la courbure avant de te fier à une droite ajustée.
- Vérifie les échelles, les points extrêmes et les tendances temporelles qui peuvent dominer l’affichage.
4.2 Ce que mesure un coefficient de corrélation
Un coefficient de corrélation résume un aspect d’une liaison statistique. Choisis le coefficient selon la relation que tu veux décrire et interprète-le avec un graphique et le nombre d’observations utilisables.
Pearson mesure une relation linéaire
Le coefficient de Pearson est la somme des produits des écarts aux moyennes divisée par le produit des longueurs centrées :
Il est compris entre −1 et 1. Son signe indique le sens et sa valeur absolue la force de la relation linéaire. Les valeurs positives ou négatives parfaites signifient que tous les points utilisables sont sur une droite, les deux variables présentant une dispersion. Le coefficient n’a pas d’unité, ne change pas lorsqu’on échange les axes et reste inchangé lors d’une conversion positive entre unités de mesure.
Un coefficient proche de zéro indique une faible liaison linéaire. Pour les entrées −3, −2, −1, 0, 1, 2, 3 et des sorties égales à leurs carrés, la corrélation de Pearson est exactement nulle malgré une relation en U parfaite. La corrélation diffère aussi de la pente : une droite peu inclinée peut présenter une forte corrélation.
Les méthodes fondées sur les rangs décrivent l’ordre
La corrélation de Spearman calcule la corrélation de Pearson sur les rangs et décrit une liaison monotone : les valeurs tendent à évoluer toujours dans le même sens, même le long d’une courbe. Le tau de Kendall compare les paires d’observations concordantes, ordonnées dans le même sens pour les deux variables, aux paires discordantes, ordonnées en sens opposés. Les méthodes fondées sur les rangs sont moins sensibles aux amplitudes extrêmes que celle de Pearson.
Pour l’exemple des températures et des locations, le coefficient de Pearson est de 0,974, celui de Spearman de 0,976 et celui de Kendall de 0,929. Le nuage de points révèle néanmoins la stabilisation au-dessus d’environ 27 °C. Un coefficient élevé peut coexister avec une courbure importante.
Calculer une matrice avec soin
cols = ["temp_c", "rentals", "distance_km"]
corr = df[cols].corr(method="spearman")
sns.heatmap(corr, annot=True, fmt=".2f",
vmin=-1, vmax=1, center=0, cmap="vlag")
Pour un DataFrame de types mixtes, df.corr(numeric_only=True) sélectionne les colonnes quantitatives ; exclus aussi les identifiants et les codes de catégories pour lesquels une relation numérique n’a pas de sens. Les valeurs manquantes sont exclues paire par paire : les cellules de la matrice peuvent donc décrire des sous-ensembles différents. Vérifie le nombre d’observations utilisables pour chaque paire. La matrice est symétrique. La corrélation d’une variable avec elle-même vaut 1 lorsqu’elle est définie ; une colonne constante a une corrélation non définie et des valeurs manquantes dans sa ligne, sa colonne et sur la diagonale.
Vérifier la sensibilité à la disposition des données
Pour les entrées de 1 à 10 et les sorties 3, 1, 4, 2, 5, 3, 4, 2, 5, 3, le coefficient de Pearson vaut environ 0,307. L’ajout du seul point (30 ; 30) le porte à 0,938 ; celui de Spearman devient environ 0,462. Un point peut dominer le coefficient de Pearson alors que la majeure partie des données conserve une faible relation.
Le quartet d’Anscombe illustre la même leçon : quatre jeux de données ont une moyenne des entrées de 9, une moyenne des sorties de 7,50, une variance des entrées de 11, une corrélation proche de 0,816 et une droite ajustée , mais leurs graphiques montrent un nuage, une courbe et différents points influents. Indique la valeur et l’effectif avec tout qualificatif de force ; les domaines utilisent des conventions différentes pour des termes comme « fort ».
Points clés
- Le coefficient de Pearson décrit une liaison linéaire, sans unité et avec des valeurs comprises entre −1 et 1.
- Une corrélation de Pearson nulle peut masquer une forte relation courbe.
- Les coefficients de Spearman et de Kendall décrivent l’ordre et réduisent la sensibilité aux amplitudes extrêmes.
- L’exclusion des valeurs manquantes paire par paire peut faire reposer les cellules d’une matrice sur des échantillons différents.
- La corrélation d’une variable constante n’est pas définie.
- Les graphiques et les analyses de sensibilité révèlent des caractéristiques que des coefficients identiques peuvent masquer.
4.3 Liaisons, causes et comparaisons trompeuses
Une liaison décrit la façon dont les variables apparaissent ensemble dans les données observées. Sa cause demande une explication distincte. Parmi les origines possibles figurent un effet causal, une causalité inverse, une troisième variable, la sélection et le hasard.
Rechercher ce qui pourrait expliquer le lien
Un facteur de confusion influence les deux variables et crée ou déforme leur liaison. La chaleur augmente les ventes de glaces et les accidents de baignade. Réduire les ventes de glaces laisserait subsister le risque lié à la météo. Une variable médiatrice est différente : elle se trouve sur le chemin causal entre les variables.
La causalité inverse renverse le sens proposé. Les clients qui consultent plus souvent les pages d’aide peuvent avoir davantage de commandes échouées parce que les échecs les conduisent vers ces pages. Le lien observé ne permet pas de s’attendre à moins d’échecs si l’on masque les pages d’aide.
Distinguer les relations dans les sous-groupes du résultat global
Le paradoxe de Simpson se produit lorsque la comparaison globale inverse le sens observé dans chaque sous-groupe. Les données d’une étude de 1986 sur les traitements des calculs rénaux illustrent le calcul :
| Groupe | Traitement A | Traitement B |
|---|---|---|
| Petits calculs | 81/87 = 93,1 % | 234/270 = 86,7 % |
| Gros calculs | 192/263 = 73,0 % | 55/80 = 68,8 % |
| Ensemble | 273/350 = 78,0 % | 289/350 = 82,6 % |
A présente la proportion de réussite la plus élevée dans les deux groupes de taille de calculs. B présente la proportion globale la plus élevée parce que A a surtout été utilisé dans les cas plus difficiles de gros calculs. Les taux globaux pondèrent les taux des sous-groupes par leurs effectifs. Examine la composition et compare des sous-groupes pertinents avant d’interpréter un résultat global.
Vérifier le temps, la sélection et l’agrégation
Deux séries sans lien peuvent toutes deux augmenter au fil des années et sembler fortement corrélées. Trace-les au fil du temps et examine les changements d’une période à l’autre ou les relations au sein des périodes. La relation entre les niveaux peut surtout refléter leur tendance temporelle commune.
Une plage sélectionnée change aussi ce qui est visible. Parmi les étudiants sélectionnés pour leurs scores élevés à l’entrée, la plage des scores est étroite et la corrélation entre scores et notes peut être bien plus faible que parmi tous les candidats. Décris la population sélectionnée ; son coefficient répond à une question différente de celui calculé pour tous les candidats.
Une corrélation entre moyennes par ville concerne les villes. L’appliquer aux habitants pris individuellement constitue une erreur écologique. L’agrégation peut renforcer, affaiblir ou inverser une liaison, car la relation au sein des groupes et la composition entre groupes ne concordent pas nécessairement.
Voir dans une recherche étendue une source d’hypothèses
Avec 20 variables quantitatives, il existe 190 paires distinctes. L’examen de ces paires et de nombreux segments donne de multiples occasions à des régularités dues au hasard d’apparaître. Indique l’étendue de ton exploration, puis présente une régularité surprenante comme une hypothèse à vérifier sur de nouvelles données ou par une analyse confirmatoire planifiée.
Utilise une formulation liée aux observations : « Les commandes passées sous la pluie étaient associées à des durées de livraison plus longues pendant cette période. » Cet énoncé consigne une relation. Affirmer que la pluie a causé l’écart exigerait aussi des éléments écartant d’autres explications, comme une composition différente des trajets ou des horaires.
Points clés
- Envisage la causalité inverse, les facteurs de confusion, la sélection et le hasard pour expliquer une liaison.
- Les facteurs de confusion influencent les deux variables ; les variables médiatrices se trouvent sur un chemin causal.
- Les comparaisons globales peuvent inverser celles des sous-groupes lorsque la composition des groupes diffère.
- Les tendances temporelles, les plages sélectionnées et l’agrégation modifient la liaison mesurée.
- Les relations au niveau des groupes demandent des interprétations à ce même niveau.
- Utilise les régularités exploratoires pour formuler des hypothèses et indique l’étendue de la recherche.
5Comparer des segments de données
Un indicateur global peut masquer des différences entre villes, canaux ou périodes. Compare les distributions des groupes, les proportions des catégories et les taux d’événements en montrant leurs dénominateurs et les tailles des échantillons. Vérifie ensuite si la composition des groupes, les résultats manquants ou une couverture temporelle inégale expliquent l’écart apparent. Une comparaison utile adapte la mesure à la question et précise la base de chaque nombre.
5.1 Comparer les tendances centrales, les dispersions et les queues entre groupes
Un segment est un sous-ensemble défini par une catégorie, une classe numérique ou une période. Une comparaison utile montre les différences entre les distributions entières, en laissant visible la quantité d’observations sur laquelle repose chaque indicateur.
Indiquer les effectifs des groupes à côté des indicateurs
by_city = df.groupby("city")["minutes"].agg(
["count", "mean", "median", "std"]
)
L’effectif est ici le nombre de durées enregistrées. Si certaines durées sont manquantes, indique aussi le nombre de commandes et la proportion de valeurs manquantes afin de préciser la base du tableau. Les agrégations nommées peuvent donner aux colonnes des libellés utiles, comme orders=("order_id", "count") et median_min=("minutes", "median").
Considère ces durées de livraison :
| Ville | Durées en minutes | Moyenne | Médiane | Écart-type d’échantillon |
|---|---|---|---|---|
| Lyon | 24, 30, 27, 33, 29, 31 | 29,0 | 29,5 | 3,2 |
| Porto | 22, 25, 21, 40, 24 | 26,4 | 24,0 | 7,8 |
| Tartu | 19, 55 | 37,0 | 37,0 | 25,5 |
Tartu présente la moyenne la plus élevée, mais ne compte que deux observations. Une longue livraison domine son résultat. Les petits groupes apparaissent souvent aux deux extrémités d’un classement parce que leurs indicateurs varient davantage sous l’effet des observations individuelles. Fixe un effectif minimal avant de classer les groupes et laisse les petits groupes visibles comme éléments insuffisants pour conclure.
Choisir une représentation de la distribution
Une boîte à moustaches sur un axe quantitatif partagé compare les médianes, les moitiés centrales et les valeurs extrêmes repérées. Un diagramme en violon ajoute une estimation de la forme. Avec de petits groupes, les diagrammes en points par catégorie ou en essaim montrent chaque observation et rendent la taille de l’échantillon plus facile à voir.
Pour les histogrammes, utilise des panneaux avec les mêmes axes ou des histogrammes superposés normalisés, par exemple avec stat="density", common_norm=False. Les histogrammes d’effectifs superposés révèlent surtout quel groupe contient le plus d’enregistrements. La superposition des densités permet de comparer la forme de chaque groupe sur une même base.
Deux groupes de même moyenne peuvent avoir des queues très différentes. Une ville où les livraisons sont surtout rapides, avec quelques livraisons très longues, peut avoir la même moyenne qu’une ville où les durées sont toujours modérées. Compare la dispersion, les centiles et une proportion pertinente au-dessus d’un seuil en complément de la tendance centrale.
Préciser la valeur de référence d’un écart
Dans cet échantillon, l’écart entre les moyennes de Tartu et de Lyon est de 8 minutes. Par rapport à Lyon, il est d’environ 27,6 % :
La valeur de référence est de 29 minutes pour Lyon. Inverser la valeur de référence change le pourcentage relatif, même si l’écart absolu reste de 8 minutes. Indique les faibles effectifs des groupes avec ce calcul descriptif ; le calcul seul ne peut pas établir une différence stable entre les villes.
Vérifier la composition des groupes
df.groupby(["city", "vehicle"])["minutes"].median().unstack()
Ce tableau par ville et par véhicule peut révéler si un écart entre villes provient de la répartition des véhicules. Un tableau croisé dynamique avec le même regroupement et la même médiane donne la même comparaison. Examine aussi les effectifs de ces cellules plus petites : subdiviser un groupe peut réduire les éléments disponibles tout en clarifiant la relation.
Points clés
- Indique les effectifs des groupes avec la tendance centrale et la dispersion, en précisant la base de chaque effectif.
- Utilise des échelles partagées et une normalisation au sein de chaque groupe pour comparer les distributions.
- Examine les queues et les proportions au-dessus d’un seuil ainsi que les indicateurs de tendance centrale.
- Précise la valeur de référence lorsque tu présentes un écart relatif.
- Vérifie la composition des sous-groupes et les effectifs des petites cellules avant de classer les groupes.
5.2 Proportions, taux et choix du dénominateur
Les effectifs indiquent combien d’événements se sont produits. Les taux indiquent leur fréquence par rapport aux occasions où ils pouvaient se produire. Lorsque les groupes diffèrent par leur taille, le choix du dénominateur peut modifier la comparaison apparente.
Lire un tableau de contingence dans le sens voulu
Un tableau de contingence compte les combinaisons de deux catégories :
pd.crosstab(df["region"], df["channel"], margins=True)
Le Nord compte 30 commandes par application et 20 par le Web ; le Sud compte 60 commandes par application et 90 par le Web. Le Sud a davantage de commandes par application, mais son total de commandes plus élevé change la comparaison des proportions.
| Question | Dénominateur | Résultat |
|---|---|---|
| Dans le Nord, quelle proportion utilise l’application ? | Les 50 commandes du Nord | 60 % |
| Dans le Sud, quelle proportion utilise l’application ? | Les 150 commandes du Sud | 40 % |
| Parmi toutes les commandes par application, quelle proportion vient du Nord ? | Les 90 commandes par application | 33,3 % |
normalize="index" divise par les totaux des lignes ; normalize="columns" divise par les totaux des colonnes. normalize="all" utilise le total général. Lis la question à voix haute avant de choisir la normalisation. Après normalisation par ligne, chaque ligne a pour somme 1 ; il en va de même pour chaque colonne après normalisation par colonne.
Préserver les résultats inconnus
Une moyenne de valeurs booléennes donne la proportion de valeurs True. Pour une indicatrice de livraison en retard, les durées manquantes demandent un traitement particulier :
df["late"] = df["minutes"].astype("Float64") > 45
rates = df.groupby("city")["late"].mean()
known = df.groupby("city")["late"].count()
Le type nullable Float64 préserve les durées manquantes sous forme d’indications manquantes. La moyenne par groupe estime alors la proportion de retards parmi les durées enregistrées. Avec les nombres ordinaires à virgule flottante, NaN > 45 vaut False : les durées inconnues seraient donc comptées comme des livraisons à l’heure, ce qui réduirait le taux. Précise le nombre de résultats connus utilisé comme dénominateur et indique la proportion de valeurs manquantes à côté du taux.
Distinguer deux types de variation en pourcentage
Un taux de retard qui passe de 4 % à 5 % augmente de 1 point de pourcentage. La hausse relative utilise le taux initial comme référence :
Écris « a augmenté de 1 point de pourcentage, soit une hausse relative de 25 % ». La formule « a augmenté de 1 % » seule est ambiguë. Pour un taux fondé sur une petite cellule, indique aussi son effectif : 1 commande en retard sur 2 donne 50 %, mais une seule commande supplémentaire livrée à l’heure fait passer le taux à un tiers.
Comparer la part d’un résultat à la taille du groupe
Si le Nord représente 25 % de toutes les commandes mais 40 % des réclamations, il est surreprésenté parmi les réclamations. Cette comparaison rapproche sa part des réclamations de sa part des commandes. Elle répond à une question différente de celle du taux de réclamation dans le Nord, qui exige de diviser le nombre de réclamations du Nord par le nombre de commandes du Nord.
Utilise des barres groupées, des barres empilées à 100 % ou une carte de chaleur légendée pour montrer les proportions. Un tableau région-canal normalisé par ligne et représenté en barres empilées compare la répartition des canaux dans chaque région. Indique le dénominateur dans le titre ou le libellé de l’axe pour que les lecteurs puissent distinguer cette répartition de la composition régionale de chaque canal.
Points clés
- Les proportions en ligne, en colonne et sur le total général répondent à des questions différentes.
- Compare les taux d’événements en utilisant les occasions correspondantes dans le même segment.
- Garde les résultats inconnus comme valeurs manquantes lors de la création d’indicatrices booléennes pour calculer des taux.
- Les écarts en points de pourcentage s’obtiennent par soustraction des taux ; les variations relatives se calculent en divisant par le taux de référence.
- Indique les effectifs à côté des taux, surtout pour les petites cellules.
- Compare la part d’un groupe dans un résultat à sa part de base pour évaluer sa surreprésentation.
5.3 Comparer des périodes comparables
Les totaux par période dépendent à la fois de l’activité et du temps couvert. Avant de décrire une hausse ou une baisse, vérifie les bornes des périodes, les dates manquantes et la saisonnalité habituelle. Compare les segments avec une mesure adaptée à leur taille.
Agréger par période calendaire
Une fois les horodatages de commande convertis, les effectifs mensuels peuvent être calculés ainsi :
monthly = (
df.set_index("order_date")
.resample("MS")["order_id"].count()
)
"MS" désigne chaque mois calendaire par son premier jour. Utilise "ME" pour les libellés de fin de mois dans les versions actuelles de pandas. Pour obtenir un tableau mensuel par ville, combine pd.Grouper(key="order_date", freq="MS") avec le regroupement par ville et utilise .size().unstack(). La méthode compte les lignes : vérifie donc d’abord qu’une ligne représente une commande.
Vérifier la durée d’observation avant de comparer les totaux
Supposons qu’il y ait 100 commandes par jour du 1er août au 12 octobre. Les totaux mensuels sont de 3 100 en août, 3 000 en septembre et 1 200 pour la partie enregistrée d’octobre. Le total d’octobre semble beaucoup plus faible, alors que l’activité est la même chaque jour observé.
Divise chaque total par le nombre de jours observés : 31, 30 et 12. Les trois moyennes quotidiennes sont de 100. Compare ces taux ou écarte les périodes incomplètes. Le dénominateur doit représenter la couverture réelle : on ne peut pas considérer sans vérification qu’un jour non enregistré est un jour sans activité.
Même les mois complets ont des durées différentes. Ils peuvent aussi contenir des nombres différents de jours de forte activité. Si l’activité est élevée le samedi, compare les mêmes jours de la semaine ou des taux qui tiennent compte de leur répartition avant d’interpréter un écart mensuel.
Distinguer un cycle d’un changement durable
La saisonnalité est une régularité récurrente, comme un cycle hebdomadaire ou annuel. daily.rolling(7).mean() lisse une fenêtre de sept jours dans une série quotidienne régulièrement espacée. Elle atténue le cycle hebdomadaire tout en conservant les changements plus lents. Compare décembre au mois de décembre précédent lorsque la question porte sur l’évolution annuelle d’une activité saisonnière.
Quelques jours exceptionnellement élevés peuvent ressembler à une tendance sur une courte période. Montre un historique assez long pour comprendre l’amplitude habituelle des fluctuations et conserve les valeurs non lissées lorsqu’elles aident à expliquer un événement important.
Vérifier les lacunes et comparer les trajectoires des segments
Un effectif rééchantillonné nul peut signifier qu’aucun événement n’a été enregistré ou que la collecte a été interrompue. Un changement brusque de niveau peut refléter une nouvelle version de l’application ou une modification de définition. Confirme la couverture et l’historique de collecte auprès de la source des données avant de considérer ces points comme des changements de comportement.
Trace chaque segment sous forme d’une courbe sur des axes partagés, avec les unités et une couleur cohérente par groupe. Les grands groupes peuvent dominer les graphiques d’effectifs. Des proportions, des taux ou un indice rapporté à la valeur initiale de chaque groupe peuvent rendre visibles les changements des groupes plus petits ; précise la mesure représentée.
Une cohorte regroupe les clients selon leur date de début. Suivre les clients ayant commencé en mars et ceux ayant commencé en avril selon le temps écoulé depuis leur première commande permet de distinguer les changements au cours de leur parcours des changements dans la composition globale de la clientèle.
Points clés
- Vérifie que la couverture est complète et utilise les alias actuels des périodes calendaires.
- Compare les totaux en tenant compte de la durée des périodes et de la répartition des jours de la semaine.
- Utilise la durée réellement observée pour les taux et examine les lacunes avant de les considérer comme des zéros.
- Compare des périodes saisonnières et examine un historique assez long pour interpréter les fluctuations.
- Utilise les taux par segment ou des trajectoires rapportées à leur valeur initiale lorsque les groupes diffèrent par leur taille.
- Les cohortes permettent de distinguer le temps écoulé depuis le début des changements dans la composition globale de la clientèle.
6Présenter les résultats exploratoires de manière reproductible
L’exploration devient utile aux autres lorsque ses résultats répondent à des questions claires et que les éléments qui les étayent peuvent être vérifiés. Sélectionne les graphiques et les nombres qui expliquent les résultats, distingue les constats des causes et actions proposées, et indique les limites qui influencent l’interprétation. Prépare un notebook soigné, des exportations à jour et suffisamment d’informations sur la provenance pour qu’un lecteur autorisé puisse reproduire le travail.
6.1 Des résultats qui répondent à la question
Un résultat utile relie une question à des éléments probants. Il indique l’ampleur d’une régularité, la population et la période qu’elle décrit, ainsi que les limites qui influencent son interprétation. Construis le rapport autour des questions plutôt que dans l’ordre de création des graphiques.
Étayer un résultat
Par exemple : « De janvier à septembre 2026, la durée médiane de livraison était de 29 minutes ; 8 % des 48 200 commandes ont pris plus de 45 minutes. La proportion de retards était la plus élevée les vendredis et samedis soirs : 14 %, contre 6 % les autres soirs. »
Cet énoncé précise la période, l’indicateur de tendance centrale, le seuil, le dénominateur et la comparaison. Utilise une précision suffisante pour la décision. « 29 minutes » est plus facile à utiliser que « 29,4545 minutes » lorsque les décimales supplémentaires n’apportent aucune information pratique. Pour une durée dont la distribution est asymétrique, une médiane et un centile supérieur décrivent souvent mieux l’expérience qu’une moyenne seule.
Distinguer ce qui s’est passé, pourquoi et que faire
| Type d’énoncé | Exemple | Rôle |
|---|---|---|
| Constat | « Les livraisons en retard étaient plus fréquentes les soirs de pluie. » | Décrit une liaison observée |
| Interprétation | « La pluie ralentit les coursiers. » | Propose une explication causale |
| Recommandation | « Prévoir davantage de coursiers les soirs de pluie. » | Propose une action fondée sur cette explication |
Une recommandation dépend d’hypothèses sur la cause et sur l’effet de l’action. Laisse ces hypothèses visibles et précise les éléments supplémentaires nécessaires. Un constat peut être utile même si son explication reste une hypothèse.
Faire expliquer un résultat par un graphique
Sélectionne les quelques graphiques qui répondent aux questions et les surprises importantes. Conserve les autres vues exploratoires utiles en annexe ou dans le notebook. Donne à chaque graphique du rapport un titre qui énonce son résultat, par exemple « Les retards de livraison culminent les vendredis et samedis soirs ». Indique les unités sur les axes, trie les catégories lorsque c’est pertinent et garde une couleur cohérente pour chaque segment d’un graphique à l’autre. Indique la source et la période des données.
Présente aussi les éléments contradictoires. Si un graphique global suggère une amélioration mais qu’un grand segment s’est dégradé, le résultat de ce segment compte pour l’interprétation. Ne sélectionner que les graphiques qui étayent un scénario attendu masquerait des informations nécessaires au lecteur.
Organiser un rapport concis
Un ordre clair est : question et contexte ; source des données, période, nombre de lignes et sens d’une ligne ; problèmes de qualité et décisions de nettoyage ; trois à cinq résultats clés étayés ; limites ; prochaines étapes. Chaque résultat doit répondre à une question ou expliquer une surprise importante.
Les limites précisent ce que couvrent les données, ce qui a été exclu et pourquoi, la quantité de données manquantes et le caractère associatif des régularités observées. Par exemple, signale les 37 commandes annulées retirées d’une comparaison des livraisons effectuées. Les prochaines étapes peuvent consister à vérifier une hypothèse sur de nouvelles données, à recueillir une variable manquante, à corriger un problème du système source ou à examiner une question en vue d’une modélisation ultérieure.
Points clés
- Pour chaque résultat, indique les éléments qui l’étayent, son ampleur, la population et la période.
- Distingue les constats, les interprétations et les recommandations.
- Sélectionne et légende les graphiques autour des résultats, en laissant visibles les éléments contradictoires.
- Indique une précision utile, les dénominateurs, les valeurs manquantes et les exclusions.
- Termine par des questions ou des actions concrètes que l’analyse permet d’envisager.
6.2 Partager des résultats que d’autres peuvent reproduire
Une analyse partagée doit offrir des résultats lisibles et permettre de retrouver le code et les données d’entrée qui les ont produits. Prépare un notebook final dont l’ordre, les sorties et les fichiers associés concordent.
Nettoyer et exécuter le notebook final
Supprime les cellules inutilisées et en double, garde les dépendances dans l’ordre d’exécution et ajoute du texte Markdown expliquant les décisions entre les sections de code. Conserve séparément le travail plus expérimental lorsqu’il est utile. Redémarre le noyau et exécute toutes les cellules avant chaque exportation. Examine les erreurs et les sorties modifiées : une exécution réussie peut tout de même révéler qu’un ancien nombre écrit est obsolète.
Produis les nombres présentés à partir du code :
s = df["minutes"]
print(f"Median delivery time: {s.median():.0f} minutes")
Un nombre saisi dans un paragraphe peut rester inchangé après l’actualisation des données. Garde l’énoncé affiché lié au calcul pour que la prochaine exécution le mette à jour.
Exporter les rapports, les figures et les tableaux
Une exportation HTML peut être lue dans un navigateur sans environnement Python :
jupyter nbconvert --to html --execute report.ipynb
L’option d’exécution lance le notebook avant la conversion. Vérifie le rapport obtenu ainsi que le notebook. Des outils de publication comme Quarto offrent une autre manière d’obtenir un rapport lisible.
Enregistre les figures et les tableaux depuis le code pour que les réexécutions actualisent les fichiers :
fig.savefig("figures/late_by_hour.png", dpi=200,
bbox_inches="tight")
summary.to_csv("output/city_summary.csv")
Crée les dossiers de destination lors de la préparation du projet. Une capture d’écran conserve la sortie d’un instant, mais ne maintient aucun lien automatique avec le calcul suivant.
Inclure la provenance et les instructions d’exécution
Consigne la source des données, la date d’extraction, le fichier ou la version d’entrée, le nombre de lignes, les filtres, les versions des logiciels et les graines aléatoires. Ces détails expliquent quelles données d’entrée et quels paramètres ont produit un résultat. Regroupe les paramètres variables près du début du notebook pour qu’une mise à jour mensuelle ait un point d’entrée clair.
Un projet peut séparer les données brutes et traitées, les notebooks, les figures et les tableaux exportés. Inclus un README qui précise l’objectif, le répertoire de travail attendu et les étapes d’exécution, ainsi qu’un fichier d’environnement des paquets. Lors du partage de l’analyse réexécutable, conserve ensemble le notebook, les instructions et l’environnement. Si l’accès aux données d’entrée doit être contrôlé, indique comment un lecteur autorisé peut obtenir la version correspondante.
Vérifier ce que révèlent les sorties
Avant le partage, examine chaque cellule de sortie et chaque exportation pour détecter les informations personnelles. Les tableaux d’aperçu peuvent exposer des noms, des adresses électroniques et des lieux précis même lorsque le graphique final est agrégé. Supprime, masque ou agrège les colonnes permettant l’identification selon le cas, et respecte les accords et les règles de protection des données applicables au jeu de données.
Points clés
- Nettoie le notebook final et vérifie-le en redémarrant le noyau puis en exécutant toutes les cellules.
- Calcule les nombres présentés dans le code et enregistre les figures et les tableaux par programmation.
- Exécute le notebook avant l’exportation pour que le rapport contienne des sorties à jour.
- Inclus la provenance des données, les paramètres, l’environnement et des instructions d’exécution claires.
- Examine toutes les sorties partagées pour détecter les informations personnelles.
Analyse exploratoire des données en Python : exemples
1Transformer une demande générale en analyse réexécutable
12 étapes
- 1IntroductionDonner un point de départ clair à l’analyse
Une équipe demande : « Quelle est la fiabilité de notre service de réparation ? » Tu disposes d’une table de tâches de réparation et d’un notebook. Avant de créer un graphique, détermine ce que l’équipe doit savoir et ce que chaque ligne peut t’apprendre. Tu vas transformer la demande en questions concrètes, identifier le niveau de détail et organiser le travail pour qu’une nouvelle session du notebook puisse le reproduire.
- 2ExplicationPoser des questions qui suggèrent une comparaison
Pars de la décision : l’équipe doit peut-être repérer où se produisent les longues attentes. Des questions utiles sont : « Quelle est la durée typique d’une réparation ? », « Quelle proportion dépasse notre seuil de service ? » et « Comment les durées diffèrent-elles selon le modèle d’appareil ? » Chacune précise une quantité ou une comparaison. Prévois une place pour les nouvelles questions lorsqu’un graphique révèle un groupe inattendu ou un problème de qualité.
- 3ExempleÉtablir ce que représentent les lignes
Le fichier contient 900 lignes de tâches et 300 identifiants d’intervention distincts. Une intervention peut comprendre plusieurs tâches. Le rapport est de 3 tâches par intervention en moyenne, mais le nombre de tâches peut varier d’une intervention à l’autre. Compter les lignes répond à une question sur les tâches. Une question sur le nombre d’interventions nécessite les identifiants d’intervention distincts ou une table au niveau des interventions, avec une règle justifiée pour réunir les informations des tâches.
- 4DéfiChoisir le dénombrement adapté à la question
L’équipe veut connaître la proportion d’interventions en retard. La table contient plusieurs lignes de tâches par intervention. La moyenne d’une indicatrice de retard au niveau des tâches répondrait-elle à cette question ?
---reveal---
Elle donne la proportion de tâches en retard et accorde davantage de poids aux interventions comportant plusieurs tâches. Définis d’abord quand une intervention est considérée comme en retard, réunis les informations des tâches au niveau de l’intervention, puis divise le nombre d’interventions en retard par le nombre d’interventions admissibles.
- 5LienRevenir aux contrôles de qualité lorsqu’une régularité surprend
L’exploration suit une boucle : questions, chargement, établissement du profil, distributions, relations, comparaisons et résultats. Supposons qu’un modèle d’appareil semble prendre 1 000 fois plus de temps. Reviens aux définitions des colonnes et aux unités de la source avant d’expliquer un écart de performance. La surprise a fait naître une question de qualité qui peut modifier l’étape suivante de l’analyse.
- 6Point cléDistinguer une découverte d’une vérification planifiée
Une régularité trouvée après l’examen de nombreux graphiques est une piste pour la suite. L’analyse confirmatoire vérifie une hypothèse formulée à l’avance, idéalement sur de nouvelles observations. Vérifie aussi qui est représenté : les évaluations de clients ayant choisi de donner leur avis décrivent ces répondants. Le processus de collecte détermine les éléments nécessaires pour étendre le résultat à toutes les personnes ayant bénéficié du service.
- 7ExplicationVoir ce que le noyau mémorise
Le noyau d’un notebook conserve les variables entre les exécutions de cellules. Si tu crées une table filtrée, supprimes la cellule qui la définit et continues à la représenter graphiquement, la session actuelle peut toujours fonctionner. Un nouveau noyau n’a aucun moyen de recréer cette table. Les compteurs d’exécution révèlent l’ordre des exécutions, mais la vérification décisive consiste à redémarrer le noyau puis à exécuter toutes les cellules du début à la fin.
- 8ExempleRendre les dépendances visibles
Organise le notebook ainsi : objectif et questions, importations, paramètres, puis sections d’analyse. Place les chemins, les seuils et les graines susceptibles de changer dans la cellule de paramètres. Utilise un chemin relatif au projet comme
Path("data/raw/repairs.csv")et documente le répertoire de travail. Garde les fichiers bruts inchangés et effectue les corrections dans le code pour appliquer la même procédure au prochain jeu de données. - 9ConseilMaîtriser les éléments qui varient entre les exécutions
Consigne les versions des paquets et enregistre un fichier d’environnement. Fixe la graine de chaque étape aléatoire ; pour une table d’au moins 200 lignes,
df.sample(n=200, random_state=17)reproduit l’échantillon avec les mêmes données d’entrée et logiciels. Une graine fixe ne peut pas restaurer un fichier d’entrée écrasé : consigne donc aussi la version des données et les détails de l’extraction. - 10DéfiTrouver une dépendance invisible
Une cellule de synthèse s’exécute correctement pour l’instant. Après avoir redémarré le noyau et exécuté toutes les cellules, elle échoue parce que
job_totalsn’est pas défini. Qu’est-ce que cela t’indique et que dois-tu corriger ?---reveal---
L’ancien noyau conservait une variable que la suite visible des cellules ne crée pas. Restaure ou déplace le code qui la définit avant la synthèse, puis réexécute tout le notebook. Enregistrer l’ancienne sortie conserverait le résultat sans corriger sa dépendance.
- 11DéfiVérifier un nouveau fichier avant de répondre à la même question
Le fichier du mois suivant arrive. Ta question porte sur le nombre d’interventions, et la table préparée au niveau des interventions doit avoir des identifiants uniques. Comment associer la vérification du sens d’une ligne à une réexécution fiable ?
---reveal---
Charge la nouvelle version à l’aide de la cellule de paramètres et vérifie par une assertion que la clé d’intervention de la table préparée est unique. Redémarre le noyau et exécute toutes les cellules. Une vérification qui échoue révèle un problème d’entrée ou de préparation avant que des interventions répétées ne faussent la proportion présentée.
- 12RécapitulatifGarder la question et le calcul liés
Tu disposes maintenant d’une question liée à une décision, du sens d’une ligne qui détermine les dénombrements et d’un notebook aux dépendances visibles. Utilise les mêmes habitudes pour établir le premier profil : consigne la version des données d’entrée, examine leur structure et laisse les vérifications arrêter l’exécution lorsque les hypothèses ne sont pas respectées. Lorsqu’une nouvelle régularité apparaît, décide si elle exige une autre vérification de qualité, une nouvelle comparaison ou une hypothèse à étudier.
2Examiner un nouveau fichier avant de se fier aux régularités observées
13 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionÉtablir un profil étayé par les données
- 2ExplicationExaminer plus que les premières lignes
- 3ExempleChoisir les types d’analyse selon le sens des colonnes
- 4DéfiVérifier ce qu’une conversion a perdu
- 5ExplicationQuantifier les valeurs manquantes avant de choisir un traitement
- 6ExempleVoir comment la suppression modifie la composition
- 7Point cléLimiter les conclusions sur les valeurs manquantes aux éléments disponibles
- 8DéfiInterpréter les nombres de doublons
- 9ExempleDistinguer les valeurs manquantes des valeurs enregistrées invalides
- 10ExplicationVérifier la concordance entre les champs
- 11DéfiChoisir une action justifiée
- 12DéfiRelier le profil à la prochaine comparaison
- 13RécapitulatifConserver le profil avec les résultats
3Construire une image complète de chaque variable
17 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionAller au-delà d’un seul indicateur de tendance centrale
- 2ExplicationComparer la tendance centrale et la dispersion
- 3ExempleCalculer les indicateurs de tendance centrale
- 4ExempleAjouter une mesure de la dispersion de la moitié centrale
- 5DéfiPrévoir l’effet d’une valeur extrême
- 6ExplicationUtiliser des classes pour révéler la structure
- 7ExempleComprendre ce qu’indique un graphique cumulé
- 8DéfiExaminer un second pic suspect
- 9ConseilLire attentivement les courbes lissées et les échelles
- 10ExempleDécrire les catégories sur une base claire
- 11ExplicationDistinguer la catégorie « Autres » des valeurs manquantes
- 12DéfiVérifier une borne d’intervalle
- 13ExempleCalculer les bornes de détection des valeurs aberrantes
- 14Point cléVoir comment une valeur peut se masquer elle-même
- 15DéfiDécider d’un traitement à partir des éléments disponibles
- 16DéfiTransformer l’ensemble des observations en résultat
- 17RécapitulatifChoisir une représentation adaptée à la question
4Lire une liaison avant de l’expliquer
15 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionGarder les observations en vue
- 2ExempleDécrire plus que le sens de la relation
- 3ConseilRévéler la densité et les groupes
- 4DéfiModifier un graphique dans un but précis
- 5ExplicationIdentifier ce que mesure Pearson
- 6ExempleUtiliser un exemple courbe pour vérifier le sens
- 7ExplicationUtiliser les rangs pour décrire un ordre cohérent
- 8DéfiExaminer un coefficient dominé par un point
- 9ConseilExaminer l’échantillon derrière une cellule de carte de chaleur
- 10ExplicationLister les sens possibles et les causes communes
- 11ExempleComparer au sein des groupes de difficulté
- 12ExempleObserver l’inversion globale
- 13DéfiChoisir le niveau d’interprétation
- 14DéfiChoisir des éléments complémentaires pour un résultat surprenant
- 15RécapitulatifPrésenter la relation et la question qui reste
5Comparer les groupes sur une même base
15 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionRendre visible la base de la comparaison
- 2ExempleInclure assez d’informations pour juger une moyenne
- 3ExempleExprimer un écart avec sa valeur de référence
- 4DéfiRechercher une différence cachée entre distributions
- 5ExempleChoisir le sens d’un pourcentage
- 6ConseilÉviter de classer les résultats manquants parmi les valeurs False
- 7DéfiDistinguer l’écart de la variation relative
- 8DéfiVérifier si les effectifs répondent à la question sur le taux
- 9ExplicationAgréger la période à comparer
- 10ExempleCalculer l’activité rapportée à la durée observée
- 11LienDistinguer un cycle récurrent d’un changement
- 12DéfiExaminer un zéro avant de l’interpréter
- 13Point cléAligner les parcours des clients
- 14DéfiCombiner les vérifications du taux et de la couverture
- 15RécapitulatifRattacher chaque comparaison à son dénominateur
6Transformer l’exploration en rapport vérifiable
11 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionAider un lecteur à évaluer le résultat
- 2ExempleRédiger un résultat avec son ampleur et son périmètre
- 3ExplicationDistinguer les niveaux d’une affirmation
- 4ConseilChoisir les graphiques autour de la question
- 5DéfiCorriger un résultat trop général
- 6ExplicationFonder le rapport sur l’exécution finale
- 7ExempleExporter des fichiers à jour
- 8ExplicationConsigner ce qu’un futur analyste devra retrouver
- 9DéfiVérifier tout ce qui sera partagé
- 10DéfiRésoudre une modification de sortie avant la diffusion
- 11RécapitulatifFournir des éléments vérifiables en permettant de remonter à leur origine
Analyse exploratoire des données en Python : QCM
Série 1 : Partir de données fiables10 Questions Pratiques
Question 1 sur 10
len(df) ?Afficher la réponseMasquer la réponse
Question 2 sur 10
Afficher la réponseMasquer la réponse
Question 3 sur 10
Afficher la réponseMasquer la réponse
Question 4 sur 10
clean sans problème, mais après un redémarrage et une exécution de toutes les cellules, cette cellule produit une NameError. Que dois-tu examiner en premier ?Afficher la réponseMasquer la réponse
Question 5 sur 10
pd.to_numeric(s, errors="coerce"), que faut-il examiner ?Afficher la réponseMasquer la réponse
Question 6 sur 10
s.duplicated(keep=False).sum() ?Afficher la réponseMasquer la réponse
keep=False inclut ces premières occurrences afin de permettre l’examen complet des conflits.Question 7 sur 10
Afficher la réponseMasquer la réponse
between renvoie False pour celles-ci, ce qui mélange deux problèmes de qualité différents.Question 8 sur 10
Afficher la réponseMasquer la réponse
Question 9 sur 10
Afficher la réponseMasquer la réponse
Question 10 sur 10
Afficher la réponseMasquer la réponse
Série 2 : Lire les distributions et examiner les valeurs extrêmes10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
value_counts(normalize=True) indique-t-il ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
bins=[0, 20, 50, np.inf], include_lowest=True et la fermeture des intervalles par défaut. Dans quelles classes vont 0, 20 et 50 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Interpréter les relations et les différences entre groupes10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
min_periods=400. Sa cellule x–y peut-elle valablement contenir 0,82 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Choisir les dénominateurs et des périodes comparables10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 5 : Formuler et partager des résultats étayés10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
Absence de données
Analyse confirmatoire
Analyse de sensibilité
Analyse exploratoire des données
Assertion
Asymétrie
Attraction des valeurs rondes
B
Bornes de Tukey
C
Cardinalité
Catégorie « Autres »
Causalité inverse
Centile
Classe
Clé
Cohérence
Cohorte
Constat
Corrélation de Pearson
Corrélation de Spearman
D
Dictionnaire de données
Données manquantes au hasard (MAR)
Données manquantes complètement au hasard (MCAR)
Données manquantes non au hasard (MNAR)
É
Écart absolu médian
Écart interquartile
Écart relatif
Écart-type
Échelle logarithmique
État caché
E
Effectif du groupe
Effet de masquage
Enregistrement en double
Erreur écologique
Estimation de densité par noyau
Exportation par programmation
F
Facteur de confusion
Fichier d’environnement
Fonction de répartition empirique
G
Graine aléatoire
H
Histogramme
Hypothèse
I
Interprétation
J
Journal de qualité des données
L
Liaison monotone
Limite
M
Matrice de corrélation
Matrice de nuages de points
Médiane
Moyenne
Moyenne mobile
N
Normalisation par colonne
Normalisation par ligne
Notebook
Noyau
Nuage de points
P
Paradoxe de Simpson
Période incomplète
Perturbation aléatoire (jitter)
Point de pourcentage
Provenance
R
Rapport statique
Recommandation
Rééchantillonnage
Règle métier
Reproductibilité
Résultat
S
Saisonnalité
Score z
Score z modifié
Segment
Superposition des points
T
Tableau de contingence
Tableau des effectifs et des fréquences
Tau de Kendall
Taux
Taux de base
Type de données
U
Unité d’observation
V
Valeur aberrante
Valeur de référence
Validité
Variable médiatrice
Variable qualitative nominale
Variable qualitative ordinale
W
Winsorisation
À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.