Skip to content

Synthèse : restituer une recommandation argumentée

La dernière pièce manquante : identifier les adhérents les plus fidèles, candidats naturels à une invitation prioritaire.

query("""
SELECT a.prenom, a.nom, COUNT(*) AS nb_emprunts
FROM emprunts e JOIN adherents a ON a.id = e.adherent_id
GROUP BY a.id
HAVING COUNT(*) >= 2
ORDER BY nb_emprunts DESC
""")
prenom nom nb_emprunts
0 Amelie Rousseau 3
1 Sarah Lemoine 2
2 Youssef Amrani 2
3 Chloe Petit 2
4 Karim Belkacem 2

Une table de nombres convainc moins qu’un graphique. pandas s’interface directement avec matplotlib :

import matplotlib.pyplot as plt
df_categories = query("""
SELECT d.categorie, COUNT(*) AS nb_emprunts
FROM emprunts e JOIN documents d ON d.id = e.document_id
GROUP BY d.categorie
ORDER BY nb_emprunts DESC
""")
df_categories.plot(kind="bar", x="categorie", y="nb_emprunts", legend=False,
title="Emprunts par catégorie", color="#4C72B0")
plt.ylabel("Nombre d'emprunts")
plt.tight_layout()
plt.savefig("emprunts_par_categorie.png")

Le graphique obtenu est une simple barre par catégorie, avec BD culminant à 8 emprunts, largement devant les trois autres catégories (2 à 3 emprunts chacune) — la lecture visuelle confirme en un coup d’œil ce que la requête d’agrégation avait déjà montré.

En remontant chaque étape de ce module :

  1. Les emprunts de bande dessinée représentent plus de la moitié du volume total d’emprunts (8 sur 15) — la catégorie à renforcer en nombre d’exemplaires est sans ambiguïté la BD.
  2. Trois adhérents inscrits (Hugo Bernard, Paul Simon, Victor Lefebvre) n’ont jamais emprunté : une communication ciblée vers eux, plutôt qu’une invitation générique, a plus de chances de les activer.
  3. Cinq adhérents ont emprunté au moins deux fois, avec Amélie Rousseau en tête (3 emprunts, dont 2 BD) : ce sont les profils à inviter en priorité à la soirée de lancement, en tant qu’ambassadeurs naturels.

Chacune de ces trois phrases est directement traçable à une requête SQL précise des leçons précédentes — c’est cette traçabilité, plus que l’élégance du SQL en lui-même, qui fait la valeur d’une recommandation d’analyste de données.

Ce module a couvert, dans l’ordre : CREATE TABLE et les contraintes d’intégrité (PRIMARY KEY, UNIQUE, CHECK, REFERENCES), l’insertion en masse, les requêtes SELECT/WHERE/ORDER BY/LIMIT, les agrégations GROUP BY/HAVING, les jointures INNER JOIN et LEFT JOIN (anti-jointure), une sous-requête de comparaison à une moyenne, et la restitution graphique d’un résultat.

Ces briques reviendront tout au long du cours : les jointures et agrégations dans le module 4 (classification), les anti-jointures dans le module 8 (séries temporelles), les requêtes paramétrées dans le module 10 (agents IA).

👉 Module 3 : Régression & classification from scratch


Junior TSAFACK – 12/09/2026