Tous les guides
IntermédiaireÀ votre rythmeGuide gratuitSection 37/95

Data Storytelling — Communiquer avec les données

Pratiquez les fondations du développement : programmation, web, API, données et usages de l’IA. Des sections et exercices pour construire vos premiers projets.

💡

Contenu gratuit, accessible sans compte. Les outils et modèles évoluent : consultez le dossier actuel pour vérifier leurs versions. Modèles et sources

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

Loading diagram…

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èglePourquoiComment
1 graphique = 1 messageTrop d'info = pas d'infoUn insight par graphique
Titre = insightLes gens ne lisent que le titre"7% de conversion" > "Status Distribution"
Couleurs intentionnellesGuident l'oeilGris = contexte, Couleur = focus
Pas de 3D ni de décorationsDistraient du messageSimple, plat, lisible
Annoter les anomaliesL'oeil ne les voit pas seulFlèches, cercles, texte
Source en basCré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 :

  1. →Titre : insight principal en une phrase
  2. →4 graphiques : chacun avec un titre = insight
  3. →Annotations sur les points clés
  4. →Recommandation en conclusion
Vérification rapide

Quel titre de graphique est le plus efficace pour le data storytelling ?

Vérification rapide

Dans un rapport data, quel est l'ordre optimal de présentation ?

Votre progression

Cette progression est déclarative et conservée dans votre navigateur. L’attestation finale ne constitue pas un diplôme ni une évaluation indépendante.

Voir ma progression et mon attestation

Apprendre l’IA, du premier prompt aux agents

15 guides gratuitsQuiz, schémas et ateliersSans compte

Un cas pratique IA dans votre boîte mail

Méthodes, ressources et nouveaux exercices. Gratuit, avec désinscription à tout moment.