IAMaîtriser l'IA générative Plan du corpus

06 — Restitution, dataviz et reporting

Une analyse juste mais mal restituée ne sert à rien. Et l'IA, laissée seule, produit toujours le même graphique : un histogramme de tout, contre tout.

Temps de lecture : 16 min | Niveau : Intermédiaire

Ce que tu sauras faire après

  • Choisir le bon type de graphique à partir de la question posée, pas de l'habitude.
  • Faire générer du code de visualisation propre, en matplotlib ou via pandas.
  • Faire écrire le commentaire d'un tableau de bord sans invention de causes.
  • Préparer une restitution pour des non-techniciens.
  • Réutiliser un template de synthèse exécutive qui tient en une page.

1. Le bon graphique dépend de la question, pas des données

C'est la règle qui règle 90 % des cas. Reformule la question, et le type de graphique tombe tout seul.

La question que tu posesLe graphiqueLe piège
Comment ça évolue dans le temps ?Courbe (line)Ne pas casser l'axe des ordonnées
Qui est le plus gros ?Barres (bar / barh)Trier par valeur, pas par ordre alphabétique
Comment ça se répartit ?Histogramme (hist) ou boîte à moustaches (box)Choisir le nombre de classes avec soin
Deux variables sont-elles liées ?Nuage de points (scatter)Corrélation n'est pas causalité
De quoi est composé un total ?Barres empilées ou pie si 2 ou 3 partsLe camembert au-delà de 4 parts est illisible
Comparé à un objectif ?Barres avec une ligne de référenceL'objectif doit être visible, pas dans la légende

Deux règles qui valent pour tout :

  • Trie. Un graphique en barres non trié fait perdre trois secondes par lecteur, à chaque lecture.
  • Le titre porte le message, pas le sujet. « CA par magasin » est un sujet. « Trois magasins portent 60 % du recul d'août » est un message. Le second fait le travail.

2. Générer le code de visualisation

matplotlib : le style recommandé

La documentation matplotlib est explicite sur le style à privilégier : le style orienté objet (OO), où l'on crée explicitement la figure et les axes.

« In general, we suggest using the OO style, particularly for complicated plots, and functions and scripts that are intended to be reused as part of a larger project. However, the pyplot style can be very convenient for quick interactive work. »

Le motif de base :

fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.show()

Et l'exemple complet donné par la doc :

x = np.linspace(0, 2, 100)

fig, ax = plt.subplots(figsize=(5, 2.7), layout='constrained')
ax.plot(x, x, label='linear')
ax.plot(x, x**2, label='quadratic')
ax.plot(x, x**3, label='cubic')
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend()

Mets « style orienté objet, fig, ax = plt.subplots() » dans ton prompt. Sinon le modèle mélange les deux styles dans le même script, et ton code devient impossible à réutiliser.

pandas : le raccourci quand le DataFrame est déjà prêt

DataFrame.plot() enveloppe matplotlib. Les valeurs documentées de kind :

'line' (par défaut), 'bar', 'barh', 'hist', 'box', 'kde' / 'density', 'area', 'scatter', 'hexbin', 'pie'.

Deux écritures équivalentes :

df.plot(kind="bar")
df.plot.bar()

Et pour placer un graphique sur un axe existant, avec le paramètre ax= :

fig, axes = plt.subplots(nrows=2, ncols=2)
df["A"].plot(ax=axes[0, 0])
df["B"].plot(ax=axes[0, 1])
df["C"].plot(ax=axes[1, 0])
df["D"].plot(ax=axes[1, 1])

C'est le motif à utiliser pour une planche de quatre graphiques dans un rapport.

AVANT / APRÈS

AVANT :

Fais-moi un graphique du CA par magasin.

Tu obtiens un df.plot(kind='bar') sans tri, sans titre utile, avec les étiquettes de l'axe des abscisses illisibles.

APRÈS :

<donnees>
DataFrame `ca_magasin`, colonnes :
- magasin_libelle (object)
- ca_aout (float64)
- ca_juillet (float64)
- evolution_pct (float64)
19 lignes.
</donnees>

Message à faire passer : "trois magasins concentrent l'essentiel du recul".
Lecteur : directeur commercial, lit le graphique 10 secondes, sur un écran.

Écris le code matplotlib :
- style orienté objet : fig, ax = plt.subplots()
- barres horizontales, triées par evolution_pct croissante
- les 3 magasins les plus en recul dans une couleur distincte, les autres en gris
- ligne verticale à 0
- valeurs annotées au bout de chaque barre, en pourcentage à une décimale
- titre = le message, pas le sujet
- pas de légende si elle n'apporte rien
- figsize adapté à une lecture sur écran

Commente chaque bloc en une ligne, en français.

Pourquoi c'est mieux : le modèle connaît le message à faire passer, le lecteur, le temps de lecture. Il ne décore pas, il sert le message.


3. Écrire le commentaire d'un tableau de bord

Le commentaire de dashboard est un exercice à part : court, factuel, et lu par quelqu'un qui n'ouvrira pas les détails.

Les règles qui marchent :

  1. Un chiffre par phrase. Deux chiffres dans une phrase, personne ne retient rien.
  2. L'écart d'abord, le contexte ensuite. « Le CA recule de 6,1 % » avant « sur un mois d'août traditionnellement calme ».
  3. Pas de cause affirmée. Sauf si tu l'as prouvée. Sinon on écrit « en partie lié à », et on précise ce qui reste inexpliqué.
  4. Ce qui n'a pas bougé mérite une ligne. Un indicateur stable dans un contexte agité est une information.

Le prompt doit reprendre les garde-fous de la fiche 05-analyse-exploratoire-et-insights : citation obligatoire des chiffres fournis, séparation constat / hypothèse, droit de dire « non déterminable ».


4. Préparer une restitution à des non-techniciens

Trois transformations à opérer, et l'IA les fait bien si tu les nommes.

Transformation 1 — Le vocabulaire. Remplace le terme technique par son effet.

Tu écrisLe métier lit
« jointure incomplète »« certaines commandes n'ont pas trouvé leur magasin »
« la table n'était pas rafraîchie »« les chiffres s'arrêtaient au 19 août »
« périmètre constant »« à magasins comparables, hors ouvertures et fermetures »
« granularité »« une ligne par commande »

Transformation 2 — L'ordre. En technique, on va de la cause vers l'effet. En restitution, on fait l'inverse : conclusion d'abord, puis pourquoi, puis comment on l'a vu. Le lecteur décroche après 90 secondes ; mets l'essentiel dans les 20 premières.

Transformation 3 — Le niveau de détail. Une règle simple : tout ce qui n'est pas nécessaire à la décision passe en annexe. Pas dans le corps, pas en note de bas de page. En annexe.

AVANT / APRÈS

AVANT :

Résume cette analyse pour ma direction.

APRÈS :

<analyse_technique>
[COLLE TON ANALYSE COMPLÈTE]
</analyse_technique>

Réécris-la pour un comité de direction.

Contraintes :
- Structure : conclusion d'abord, puis les 2 causes principales, puis la
  recommandation. Le "comment on l'a mesuré" va en annexe.
- Aucun terme technique. Remplace chaque terme par son effet concret.
  Interdits explicites : jointure, granularité, périmètre constant, DAG,
  table, requête, pipeline.
- Un seul chiffre par phrase.
- Longueur : 250 mots maximum pour le corps, annexe libre.
- Toute affirmation causale doit être marquée "confirmé" ou "hypothèse".

N'ajoute aucun chiffre absent de l'analyse fournie.

5. La synthèse exécutive : structure qui tient en une page

Cinq blocs, dans cet ordre. Ne change pas l'ordre.

  1. La phrase unique. Ce qu'il faut retenir si on ne lit rien d'autre.
  2. Les trois chiffres. Pas quatre. Chacun sur sa ligne, avec sa période et son point de comparaison.
  3. Ce qui explique. Deux causes maximum, chacune marquée confirmée ou hypothèse.
  4. Ce qu'on propose. Une à trois actions, chacune avec un responsable et une échéance.
  5. Ce que cette analyse ne dit pas. Le bloc que tout le monde oublie, et celui qui te protège en réunion.

Le bloc 5 est ta meilleure défense. Il désamorce l'objection avant qu'elle n'arrive, et il montre que tu connais les limites de ton propre travail.


🧰 Templates à copier-coller

Template A — Choisir et générer un graphique

<donnees>
Nom du DataFrame : [NOM]
Colonnes (nom | type) :
[COLLE_LA_LISTE]
Nombre de lignes : [N]
</donnees>

<intention>
Message à faire passer : "[LE_MESSAGE_EN_UNE_PHRASE]"
Lecteur : [PROFIL]
Support : [ECRAN | DIAPOSITIVE | PDF IMPRIME]
Temps de lecture attendu : [X] secondes
</intention>

Étape 1 : propose le type de graphique le plus adapté, et explique en
2 phrases pourquoi les autres types conviennent moins bien.

Étape 2 : écris le code [matplotlib | pandas .plot] :
- style orienté objet : fig, ax = plt.subplots()
- tri : [PAR_QUELLE_COLONNE_ET_DANS_QUEL_SENS]
- mise en évidence : [QUELS_ELEMENTS_A_METTRE_EN_AVANT]
- titre = le message, pas le sujet
- annotation des valeurs : [OUI_NON_ET_FORMAT]
- pas de légende si elle n'apporte rien
- figsize adapté au support indiqué

Commente chaque bloc en une ligne, en français.

Template B — Commentaire de tableau de bord

<chiffres_du_tableau_de_bord>
[COLLE_LE_TABLEAU_COMPLET_AVEC_PERIODES_ET_COMPARAISONS]
</chiffres_du_tableau_de_bord>

<contexte_connu>
[EVENEMENTS_CONNUS_SUR_LA_PERIODE]
[CE_QUE_JE_N_AI_PAS_COMME_INFORMATION]
</contexte_connu>

Écris le commentaire de ce tableau de bord.

Format :
- [NOMBRE] puces maximum, une idée par puce ;
- un seul chiffre par puce, repris tel quel du tableau ;
- l'écart d'abord, le contexte ensuite ;
- une puce sur un indicateur qui n'a PAS bougé, si c'est notable ;
- aucune cause affirmée : écris "en partie lié à" et précise ce qui reste
  inexpliqué.

Tout chiffre cité doit apparaître tel quel dans le tableau fourni.
Si une variation n'est pas explicable avec le contexte donné, écris
"variation non expliquée à ce stade".

Template C — Synthèse exécutive en une page

<analyse>
[COLLE_TON_ANALYSE_COMPLETE_AVEC_LES_CHIFFRES]
</analyse>

<destinataire>
Profil : [EX_COMITE_DE_DIRECTION_NON_TECHNIQUE]
Décision attendue : [CE_QU_IL_DOIT_POUVOIR_DECIDER]
Temps de lecture : [X] minutes
</destinataire>

Rédige une synthèse exécutive en 5 blocs, dans cet ordre :

1. LA PHRASE — ce qu'il faut retenir si on ne lit rien d'autre.
2. LES TROIS CHIFFRES — exactement trois, chacun avec sa période et son
   point de comparaison, un par ligne.
3. CE QUI EXPLIQUE — 2 causes maximum, chacune marquée [CONFIRMÉ] ou [HYPOTHÈSE].
4. CE QU'ON PROPOSE — 1 à 3 actions, chacune avec un responsable et une échéance.
5. CE QUE CETTE ANALYSE NE DIT PAS — les limites, et les 2 objections les
   plus probables avec la réponse à donner.

Contraintes : 350 mots maximum au total. Aucun terme technique.
Aucun chiffre absent de l'analyse fournie.

Template D — Traduire du technique vers le métier

<texte_technique>
[COLLE_TON_TEXTE]
</texte_technique>

Réécris ce texte pour [PROFIL_DU_LECTEUR].

Règles :
- remplace chaque terme technique par son effet concret pour le lecteur ;
- termes interdits : [LISTE_EX_jointure_granularite_pipeline_DAG_requete] ;
- inverse l'ordre : conclusion d'abord, mécanisme ensuite, méthode en annexe ;
- un chiffre par phrase ;
- phrases courtes, maximum 20 mots.

Rends en plus un tableau | terme technique retiré | formulation retenue |,
pour que je puisse réutiliser le vocabulaire la prochaine fois.

A retenir

  • Le type de graphique se déduit de la question, pas de la forme des données.
  • Trie toujours, et fais du titre le message, pas le sujet.
  • En matplotlib, impose le style orienté objet fig, ax = plt.subplots() dans ton prompt.
  • DataFrame.plot(kind=...) couvre les cas simples ; le paramètre ax= permet de composer une planche.
  • Pour une restitution : conclusion d'abord, vocabulaire d'effet, détail en annexe.
  • Le bloc « ce que cette analyse ne dit pas » est ce qui te protège en réunion : ne le supprime jamais.

Sources

Corpus personnel de formation · genere le 26/09/2026 · source : 06-restitution-dataviz-et-reporting.md