Analyser un tableur sans halluciner
Pourquoi un modèle qui « lit » un CSV se trompe, et la méthode pour n'obtenir que des chiffres calculés.
Colle un CSV de trois mille lignes dans une conversation, demande le chiffre d'affaires par région, et tu obtiendras un tableau propre, avec des totaux qui tombent juste au premier coup d'œil. Refais la même demande dix minutes plus tard : les chiffres auront bougé.
C'est normal, et ce n'est pas un bug. Un modèle de langage qui « lit » un tableau ne fait pas d'addition, il produit le nombre le plus probable au vu du contexte. Sur des données propres et peu nombreuses, ça tombe souvent juste. Sur un vrai fichier, ça tombe à peu près juste, ce qui est bien pire.
La solution tient en une phrase : le modèle ne calcule jamais, il écrit le code qui calcule. Tout le reste de ce guide découle de là.
Lire n'est pas calculer
Sépare mentalement deux tâches. Comprendre le fichier (quelles colonnes, quelles unités, quelles anomalies) est un travail de lecture, où le modèle excelle. Produire un chiffre est un travail d'exécution, qui doit passer par du code dont tu vois la sortie.
Le signe qu'on a franchi la ligne : une réponse qui contient un nombre sans qu'aucun code n'ait tourné.
Le total plausible est le pire des résultats
Un chiffre absurde se repère. Un chiffre crédible à 4 % près part dans une présentation, puis dans une décision. C'est le mode de défaillance dominant sur les tableurs, et il est silencieux.
Avant de commencer
- Le fichier, en local, pas collé dans la conversation
- Python avec pandas (
pip install pandas) - Deux ou trois chiffres que tu connais déjà par cœur
1Décrire le fichier avant de lui poser une question
Aucune analyse tant que tu ne sais pas ce qu'il y a dedans. Ce premier passage ne produit aucun résultat métier, seulement un état des lieux.
Lis ce fichier avec pandas et rends-moi, en executant le code :
- le nombre de lignes et de colonnes ;
- le nom et le type de chaque colonne ;
- pour chaque colonne, le nombre de valeurs manquantes ;
- le nombre de lignes strictement dupliquees ;
- pour chaque colonne numerique : min, max, moyenne, mediane ;
- pour chaque colonne texte : les 5 valeurs les plus frequentes.
Ne tire aucune conclusion. Montre-moi le code et sa sortie.
Les quatre commandes qui portent l'essentiel :
df.shape
df.dtypes
df.isna().sum()
df.duplicated().sum()
Une colonne de montants typée object au lieu de float64 signale presque
toujours un problème de séparateur décimal ou un « N/A » caché dans les données.
2Ouvrir correctement un fichier français
La moitié des analyses fausses viennent de l'import, pas du calcul. Un export Excel français utilise le point-virgule comme séparateur de colonnes, la virgule comme séparateur décimal, et souvent un encodage qui n'est pas UTF-8.
import pandas as pd
df = pd.read_csv(
"ventes.csv",
sep=";",
decimal=",",
thousands=" ",
encoding="utf-8-sig", # essaie "cp1252" si des accents cassent
parse_dates=["date_commande"],
na_values=["", "N/A", "-", "NC"],
)
Pour un .xlsx, pd.read_excel a besoin d'une dépendance supplémentaire :
pip install openpyxl. Pour un .ods, c'est odfpy, et pour un vieux .xls,
xlrd.
Le contrôle qui coûte trois secondes
Après l'import, vérifie que le nombre de lignes correspond à ce qu'annonce ton
tableur, et que les colonnes de montants sont bien numériques. Un sep mal
deviné donne souvent une seule colonne géante, et ça se voit tout de suite.
3Vérifier par un autre chemin
Chaque chiffre important se contrôle par un calcul indépendant. Pas une relecture : un autre chemin qui doit donner le même résultat.
Calcule le chiffre d'affaires total de deux facons independantes :
1. la somme de la colonne montant ;
2. la somme des totaux par region, puis la somme des totaux par mois.
Affiche les trois nombres. S'ils different, ne choisis pas : montre-moi
les lignes responsables de l'ecart.
L'écart est plus informatif que le total. Il vient presque toujours d'une catégorie vide, de lignes hors période, ou d'un doublon partiel.
Ajoute un contrôle d'ordre de grandeur avec des chiffres que tu connais :
Notre CA annuel tourne autour de 2 M EUR et on fait environ 400 commandes
par mois. Compare ces reperes a ce que dit le fichier. Si un resultat
s'en ecarte de plus de 20 %, dis-le et cherche l'explication dans les
donnees avant de conclure.
4Interdire la devinette
Une valeur absente n'est pas zéro, et une catégorie manquante n'est pas « Autre ». La consigne doit être explicite, sinon le modèle comblera, parce que c'est ce qu'un tableau bien formé demande.
Regles pour cette analyse :
- Une valeur manquante reste manquante. Ne la remplace ni par 0, ni par
la moyenne, ni par la valeur precedente.
- Compte et signale les lignes exclues d'un calcul, avec le motif.
- Si une question ne peut pas etre repondue avec ces colonnes, dis
laquelle manque au lieu de l'approcher.
- Tout nombre que tu m'annonces doit venir d'un code que tu as execute
et dont tu me montres la sortie.
Le dernier point est celui à garder si tu ne devais en garder qu'un.
5Faire relire le code, pas le résultat
Le résultat est invérifiable à l'œil, le code ne l'est pas. Une fois l'analyse finie, demande une relecture ciblée :
Relis uniquement le code de cette analyse. Cherche : un filtre applique
trop tot, une jointure qui duplique des lignes, une colonne de date mal
typee, une moyenne calculee sur des lignes qu'on aurait du exclure, une
unite melangee (euros et milliers d'euros).
Ne recommente pas les resultats.
Les jointures qui dupliquent sont la cause la plus fréquente de totaux gonflés, et la plus difficile à voir dans une sortie déjà agrégée.
Quelques prompts pour aller plus loin
| Objectif | Prompt à adapter |
|---|---|
| Diagnostiquer la qualité | Fais un rapport de qualite de ce fichier : valeurs manquantes par colonne, doublons, valeurs aberrantes, incoherences de format sur les dates et les identifiants. Classe par gravite. |
| Comprendre les colonnes | Voici les 20 premieres lignes. Pour chaque colonne, propose une definition et une unite. Marque "incertain" celles que tu ne peux pas deduire. |
| Recalculer un chiffre officiel | On annonce [CHIFFRE] pour [PERIODE]. Retrouve-le a partir du fichier. Si tu n'y arrives pas, montre l'ecart et les lignes qui l'expliquent. |
| Réconcilier deux fichiers | Voici deux exports censes couvrir la meme periode. Liste les cles presentes dans l'un et pas dans l'autre, et les lignes ou les montants different. |
| Figer l'analyse | Transforme cette analyse en un script Python unique, commente, qui prend le chemin du fichier en argument et affiche les memes resultats. |
Tu as d’autres ressources comme ça ?
Ce que tu viens de lire est entièrement gratuit. Une nouvelle ressource part chaque semaine dans la newsletter : guides, modèles à copier et liens triés, sans compte à créer.
Me contacter
Une question, un projet, une envie de collaborer ? Écris-moi.
Cette page est en accès libre, n’hésite pas à la partager.