+180 XP

Analyse de données avancée : fichiers, graphiques et tableurs

Uploadez un CSV de ventes mal formaté et ChatGPT écrira et exécutera du vrai Python dans un sandbox pour le nettoyer, le mettre en graphique et vous rendre un fichier propre accompagné d'un graphique prêt à publier. C'est Advanced Data Analysis (anciennement Code Interpreter) : un environnement Python live rattaché à votre conversation. Ce n'est pas le modèle qui devine le contenu de vos données à partir du texte. C'est le modèle qui exécute du code sur votre fichier réel et qui lit la sortie.

Cette leçon fait passer un fichier de l'état brut à l'état fini, et vous montre exactement comment récupérer les données nettoyées et les graphiques.

Ce qu'est réellement l'analyse de données avancée

Quand vous joignez un fichier, ChatGPT peut démarrer un sandbox Linux temporaire avec Python, pandas, matplotlib, numpy et compagnie préinstallés. Il écrit du code, l'exécute, voit les erreurs ou les résultats, et itère, sans que vous touchiez à un terminal.

Quelques propriétés à garder en tête :

  • Le sandbox est éphémère. Les fichiers et variables vivent le temps de la session et expirent après une période d'inactivité. Téléchargez ce que vous voulez conserver.
  • Il n'y a pas d'accès internet dans le sandbox par défaut. Il ne peut pas faire de pip install arbitraire ni appeler des API. Il travaille avec ce qui est embarqué et ce que vous uploadez.
  • Il gère .csv, .xlsx, .json, .parquet, les images, les PDF et les archives zip. Pour les tableurs, plusieurs feuilles sont accessibles.

Présentation officielle : **Advanced Data Analysis dans le centre d'aide OpenAI**.

L'exemple : un vrai CSV de ventes mal formaté

Imaginez q3_sales.csv exporté d'un CRM. Il est cassé de façon réaliste :

  • Une colonne Revenue du genre "$1,240.50" (chaîne de caractères, avec symboles et virgules).
  • OrderDate dans des formats mélangés : 2025-07-03 et 07/14/2025.
  • Une colonne Region avec "north", "North " et "NORTH".
  • Des lignes de commande dupliquées et quelques CustomerID vides.

Vous n'avez pas besoin de décrire tout cela d'entrée. Laissez ChatGPT l'inspecter d'abord.

Étape 1 : profilez avant de transformer

Uploadez le fichier et commencez par un prompt de diagnostic, pas par une commande de nettoyage :

Charge ce CSV. Montre-moi le nombre de lignes et de colonnes, les dtypes, le nombre de valeurs nulles par colonne, le nombre de lignes dupliquées et 5 lignes d'exemple. Ne change rien pour l'instant.

ChatGPT exécute quelque chose de proche de ceci et vous répond :

python
import pandas as pd

df = pd.read_csv("q3_sales.csv")
print(df.shape)
print(df.dtypes)
print(df.isna().sum())
print("duplicate rows:", df.duplicated().sum())
df.sample(5, random_state=0)

Vous raisonnez maintenant à partir de faits. Vous voyez que Revenue est un object (du texte), que CustomerID a 6 valeurs nulles et qu'il y a 14 lignes dupliquées. Cette étape de profiling est le plus gros levier de qualité. Sautez-la et vous obtenez du code vraisemblable qui gère mal vos cas limites, en silence.

Étape 2 : nettoyez avec des règles explicites

Donnez le nettoyage sous forme de spécification numérotée. La précision empêche ici le modèle de supprimer « pour vous aider » des lignes que vous voulez garder.

Nettoie les données avec ces règles, et après chaque étape affiche combien de lignes ont changé : 1. Retire les $ et les virgules de Revenue, convertis en float. 2. Parse OrderDate en datetime, convertis les valeurs non parsables en NaT et indique combien. 3. Normalise Region en title case et supprime les espaces superflus. 4. Supprime les lignes entièrement dupliquées. 5. Laisse en place les lignes avec un CustomerID manquant, mais ajoute un flag booléen missing_customer. Enregistre le résultat sous q3_sales_clean.csv.

Un analyste data senior écrirait pour l'essentiel ceci :

python
import pandas as pd

df = pd.read_csv("q3_sales.csv")
before = len(df)

df["Revenue"] = (df["Revenue"].str.replace(r"[$,]", "", regex=True).astype(float))
df["OrderDate"] = pd.to_datetime(df["OrderDate"], format="mixed", errors="coerce")
unparsed = df["OrderDate"].isna().sum()
df["Region"] = df["Region"].str.strip().str.title()
df = df.drop_duplicates()
df["missing_customer"] = df["CustomerID"].isna()

df.to_csv("q3_sales_clean.csv", index=False)
print(f"rows: {before} -> {len(df)}, unparsed dates: {unparsed}")

ChatGPT vous montrera la sortie affichée (« rows: 1014 -> 1000, unparsed dates: 3 ») et vous donnera un lien de téléchargement pour q3_sales_clean.csv. Cliquez dessus pour sauvegarder le fichier nettoyé. Ce lien pointe vers le sandbox, alors récupérez-le avant l'expiration de la session.

Une remarque sur la confiance : lisez le code

Vous pouvez et devez déplier les blocs de code que ChatGPT exécute. S'il a converti 3 dates en NaT, demandez lesquelles. La discipline qui compte : traitez le modèle comme un analyste junior rapide dont vous vérifiez le travail par échantillonnage, pas comme un oracle. Quand des chiffres alimentent une décision, demandez-lui d'afficher les comptages intermédiaires à chaque étape (comme ci-dessus) pour que la transformation soit auditable.

Étape 3 : des graphiques réellement diffusables

Maintenant la partie amusante. Demandez l'analyse et le graphique d'un coup :

À partir des données nettoyées, donne-moi le chiffre d'affaires mensuel total sous forme de graphique en ligne. Nomme les axes, ajoute un titre, formate l'axe des y en devise et utilise un style épuré. Puis enregistre-le en PNG 300 DPI téléchargeable.

Une version propre de ce qui s'exécute :

python
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

monthly = (df.set_index("OrderDate").resample("ME")["Revenue"].sum())

fig, ax = plt.subplots(figsize=(9, 5))
ax.plot(monthly.index, monthly.values, marker="o", linewidth=2)
ax.set_title("Q3 2025 Monthly Revenue")
ax.set_xlabel("Month")
ax.set_ylabel("Revenue")
ax.yaxis.set_major_formatter(mticker.FuncFormatter(lambda x, _: f"${x:,.0f}"))
fig.tight_layout()
fig.savefig("monthly_revenue.png", dpi=300)

Vous obtenez le graphique rendu dans la conversation plus un monthly_revenue.png téléchargeable. Itérez en langage naturel : « passe en barres », « ajoute des étiquettes de données sur chaque point », « éclate par Region en small multiples ». Chaque demande réexécute le code sur le même DataFrame en mémoire, vous ne réuploadez donc rien.

Une contrainte bien réelle : matplotlib rend ici le texte avec le jeu de polices par défaut, donc les emoji et certaines écritures non latines peuvent ne pas s'afficher. Si un graphique nécessite des polices de marque spécifiques, c'est le travail de vos propres outils, pas du sandbox.

Tableaux croisés dynamiques et exports multi-feuilles

Le travail sur tableur est un point fort. Demandez un tableau croisé et un export Excel formaté :

Construis un tableau croisé du Revenue total par Region (lignes) et Month (colonnes). Écris-le dans q3_summary.xlsx avec les données brutes nettoyées sur une seconde feuille nommée « data ».
python
pivot = pd.pivot_table(df, values="Revenue", index="Region",
                       columns=df["OrderDate"].dt.strftime("%Y-%m"),
                       aggfunc="sum", fill_value=0)

with pd.ExcelWriter("q3_summary.xlsx") as writer:
    pivot.to_excel(writer, sheet_name="summary")
    df.to_excel(writer, sheet_name="data", index=False)

La sortie est un vrai .xlsx à deux feuilles, prêt à glisser dans une présentation ou un email.

ChatGPT Advanced Data Analysis Full Tutorial

Watch on YouTube

Rendre tout cela reproductible

Une analyse ponctuelle, c'est bien. Le levier vient de la réutilisation.

Instructions personnalisées et Projects

Si vous faites cela chaque semaine, vos standards ne doivent pas vivre dans votre tête. Mettez-les là où ChatGPT les lit à chaque fois. Dans un Project, définissez des instructions du type : « Quand j'uploade des données de ventes, profile toujours en premier, affiche toujours les comptages de lignes après chaque transformation, formate les devises sur les graphiques et exporte les graphiques en 300 DPI. » Les fichiers que vous ajoutez à un Project y sont cantonnés, votre travail commercial reste donc séparé du reste.

Un Custom GPT pour votre équipe

Encapsulez tout le workflow dans un Custom GPT pour que vos collègues obtiennent une sortie cohérente sans écrire de prompts. Inscrivez la règle du profiling d'abord et votre style de graphique maison dans ses instructions. Advanced Data Analysis est une capacité que vous activez pour le GPT. Un coéquipier non technique uploade un CSV et obtient exactement votre pipeline d'analyse.

Tâches planifiées et agent ChatGPT

Pour du reporting récurrent, les tâches planifiées peuvent déclencher une conversation à une fréquence donnée (« chaque lundi à 9h »). Le hic : une tâche planifiée ne peut pas aller chercher un fichier frais sur votre ordinateur. Associez-la à un Connector (Google Drive, SharePoint, etc.) pour que la source du fichier soit accessible, ou utilisez l'agent ChatGPT, qui peut naviguer et opérer dans son propre environnement virtuel pour récupérer et traiter les données. Choisissez l'outil selon que les données sont déjà dans la conversation ou qu'elles doivent être récupérées.

Vérification des acquis

1. Quelle est la distinction fondamentale entre Advanced Data Analysis et le modèle qui se contente de lire vos données sous forme de texte ?

2. Pourquoi faut-il télécharger les données nettoyées et les graphiques que vous voulez conserver d'une session ?

3. Pourquoi la leçon recommande-t-elle de commencer par un prompt de diagnostic (profiling) plutôt que par une commande de nettoyage immédiate ?

CHOIX MULTIPLES

4. Sélectionnez TOUTES les affirmations qui décrivent correctement l'environnement sandbox utilisé par Advanced Data Analysis.

Sélectionnez toutes les réponses correctes.

CHOIX MULTIPLES

5. Sélectionnez TOUS les problèmes de qualité de données illustrés par l'exemple de CSV de ventes mal formaté.

Sélectionnez toutes les réponses correctes.

Quand passer à l'API

Le sandbox du chat est parfait pour l'exploration et les rapports ad hoc. C'est le mauvais outil pour un pipeline qui doit tourner sans surveillance, interroger une base de données et ne jamais halluciner un nom de colonne. Pour cela, passez à l'API OpenAI.

La même capacité « le modèle écrit et exécute du Python » existe sous la forme de l'outil Code Interpreter dans la Responses API. Vous joignez un fichier, activez l'outil, et le modèle exécute du code dans un conteneur managé, en renvoyant à la fois l'analyse et les ID de fichiers générés que vous pouvez télécharger de façon programmatique.

python
from openai import OpenAI

client = OpenAI()

resp = client.responses.create(
    model="gpt-5",
    tools=[{"type": "code_interpreter", "container": {"type": "auto"}}],
    input="Clean the attached sales CSV, then return total revenue by region as a table.",
)
print(resp.output_text)

Empruntez la voie de l'API quand vous avez besoin de planification sur votre propre infrastructure, de sorties structurées que vous pouvez valider, ou d'une intégration dans une application existante. Utilisez le chat quand un humain est dans la boucle et que vous voulez itérer visuellement. Ils partagent le même moteur ; la différence, c'est le contrôle contre la commodité.

Si votre sortie doit s'insérer dans un système en aval, combinez ceci avec les structured outputs pour que le résumé revienne en JSON validé par un schéma plutôt qu'en prose. C'est ce qui transforme « une belle analyse » en « des données auxquelles un autre programme peut faire confiance ».

Pièges classiques

  • Faire confiance au premier graphique. Confirmez toujours le nombre de lignes derrière un agrégat. Un filtre que vous avez oublié peut discrètement diviser vos totaux par deux.
  • Perdre des fichiers à l'expiration. Téléchargez immédiatement les sorties .csv et .png. Le sandbox n'est pas un espace de stockage.
  • Prompts de nettoyage vagues. « Nettoie ça » invite à des suppressions de lignes silencieuses. Spécifiez chaque règle et demandez les comptages avant/après.
  • Supposer un accès internet. Le sandbox ne peut pas récupérer une URL ni installer un package exotique. Si vous avez besoin d'une bibliothèque externe, les données doivent venir avec vous, ou utilisez l'API avec un conteneur que vous contrôlez.
  • Fichiers énormes. Des uploads très volumineux peuvent épuiser la mémoire. Pour des données de plusieurs millions de lignes, échantillonnez d'abord, prototypez la logique, puis exécutez le job complet via l'API.

À retenir

  • Profilez avant de transformer. Demandez d'abord la shape, les dtypes, les valeurs nulles et les doublons, pour que le nettoyage repose sur des faits, pas sur des hypothèses.
  • Spécifiez le nettoyage sous forme de règles numérotées et exigez les comptages de lignes avant/après à chaque étape pour garder la transformation auditable.
  • Téléchargez immédiatement les fichiers nettoyés et les graphiques : le sandbox est éphémère et hors ligne, sans stockage persistant.
  • Encodez vos standards dans un Project ou un Custom GPT pour que le workflow profiling d'abord, devises formatées, 300 DPI se répète sans avoir à re-prompter.
  • Passez à l'outil Code Interpreter de la Responses API quand vous avez besoin d'exécutions sans surveillance, d'accès à une base de données ou de JSON structuré auquel vos autres systèmes peuvent faire confiance.

À faire, tiré de cette leçon

Ces actions sont compilées dans le plan d'action du rôle.

  • Profilez la structure des données, les valeurs nulles et les doublons avant de transformer, en exigeant le nombre de lignes avant/après
  • Téléchargez les fichiers et graphiques du sandbox immédiatement après chaque exécution d'analyse
Voir le plan d'action complet →