Section 11.2.17 : Data Storytelling — Communiquer avec les données
🎯 Objectif pédagogique
Transformer une analyse de données en une histoire convaincante. Vous serez capable de communiquer vos découvertes de manière claire, persuasive et actionnable — la compétence qui différencie un analyste technique d'un communicant efficace.
Les données ne parlent pas — vous devez les faire parler
Marc l'a appris en finance : un rapport avec 50 tableaux n'est jamais lu. Un graphique avec un titre percutant est mémorisé. Le data storytelling est l'art de transformer les chiffres en récit.
Les 3 piliers : Data + Narrative + Visuel
Avant/Après : le même graphique, deux impacts
❌ Mauvais : technique, pas d'histoire
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 5))
ax.bar(['Applied', 'Interview', 'Offer', 'Rejected'], [45, 12, 3, 25])
ax.set_title("Status Distribution")
plt.show()
✅ Bon : histoire, contexte, action
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 6))
statuses = ['Candidatures\n(45)', 'Entretiens\n(12)', 'Offres\n(3)', 'Refus\n(25)']
values = [45, 12, 3, 25]
colors = ['#94a3b8', '#f59e0b', '#22c55e', '#ef4444']
bars = ax.bar(statuses, values, color=colors, width=0.6, edgecolor='white', linewidth=2)
bars[2].set_edgecolor('#16a34a')
bars[2].set_linewidth(3)
ax.set_title("Seulement 7% des candidatures aboutissent à une offre",
fontsize=14, fontweight='bold', pad=15)
ax.set_ylabel("Nombre")
# Annotation sur l'insight clé
ax.annotate('Taux de conversion\n3 offres / 45 candidatures = 6.7%',
xy=(2, 3), xytext=(2.5, 20),
arrowprops=dict(arrowstyle='->', color='#22c55e'),
fontsize=10, color='#22c55e', fontweight='bold')
ax.text(0.5, -0.15, "Action : cibler moins d'offres mais mieux qualifiées (objectif : 15% de conversion)",
transform=ax.transAxes, ha='center', fontsize=10, fontstyle='italic', color='#64748b')
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
plt.show()
Règles de design pour les graphiques
| Règle | Pourquoi | Comment |
|---|---|---|
| 1 graphique = 1 message | Trop d'info = pas d'info | Un insight par graphique |
| Titre = insight | Les gens ne lisent que le titre | "7% de conversion" > "Status Distribution" |
| Couleurs intentionnelles | Guident l'oeil | Gris = contexte, Couleur = focus |
| Pas de 3D ni de décorations | Distraient du message | Simple, plat, lisible |
| Annoter les anomalies | L'oeil ne les voit pas seul | Flèches, cercles, texte |
| Source en bas | Crédibilité | "Source: data.gouv.fr, 2026" |
Template de rapport data
def create_data_story(df, title, insight, recommendation):
"""Template pour un rapport data storytelling."""
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle(title, fontsize=16, fontweight='bold')
# Graphique 1 : Vue d'ensemble
df['status'].value_counts().plot(kind='bar', ax=axes[0,0], color='#0891b2')
axes[0,0].set_title("Vue d'ensemble")
# Graphique 2 : Tendance temporelle
df.groupby(df['date'].dt.to_period('W')).size().plot(ax=axes[0,1], color='#0891b2')
axes[0,1].set_title("Évolution hebdomadaire")
# Graphique 3 : Distribution
axes[1,0].hist(df['salary'].dropna(), bins=15, color='#0891b2', edgecolor='white')
axes[1,0].set_title("Distribution des salaires")
# Graphique 4 : Comparaison
df.groupby('status')['salary'].mean().plot(kind='barh', ax=axes[1,1], color='#0891b2')
axes[1,1].set_title("Salaire moyen par statut")
# Insight et recommandation en bas
fig.text(0.5, 0.02, f"💡 \{insight\}", ha='center', fontsize=11, fontweight='bold')
fig.text(0.5, -0.01, f"➡️ \{recommendation\}", ha='center', fontsize=10, fontstyle='italic')
plt.tight_layout(rect=[0, 0.05, 1, 0.95])
plt.savefig('report.png', dpi=200, bbox_inches='tight')
plt.show()
La règle des 5 secondes
Un bon graphique communique son message en 5 secondes. Si le lecteur doit réfléchir plus longtemps, c'est trop complexe. Testez : montrez votre graphique à un collègue pendant 5 secondes. Que retient-il ? Si ce n'est pas votre insight principal, refaites le graphique.
🏋️ Exercice pratique (20 minutes)
Créez un "mini-rapport" data storytelling sur votre recherche d'emploi :
- →Titre : insight principal en une phrase
- →4 graphiques : chacun avec un titre = insight
- →Annotations sur les points clés
- →Recommandation en conclusion
Quel titre de graphique est le plus efficace pour le data storytelling ?
Dans un rapport data, quel est l'ordre optimal de présentation ?