4.3Data science : NumPy, pandas, Matplotlib
L'essentiel en 30 secondes
- Le trio : NumPy calcule vite (arrays vectorisés), pandas manipule des tables (DataFrame), Matplotlib montre (1 graphe = 1 message).
- Méthode de Nabil : inspecter d'abord (
head/info/describe/isna) puis agréger (groupby + sort= 80 % des rapports) — jamais l'inverse. - Vectoriser, jamais boucler :
(df.montant * 1.2).mean()remplace des boucles, ×100 plus vite sur un million de lignes.
Mini-cas filé — Nabil répond en 5 lignes
La direction demande à Nabil, à Alger : « quelles sont nos 5 meilleures villes ce trimestre ? » Au lieu d'une journée de tri dans un tableur, Nabil charge le CSV avec pandas, inspecte (head, info, isna pour les trous), agrège par ville avec groupby et sort, puis trace un bar chart titré. Réponse livrée en une heure, reproductible le trimestre prochain en relançant le script. Troisième jalon du fil rouge : l'analyste qui répond vite, et prouve ce qu'il avance.
Suite du cas 4.1-4.2 — Nabil analyse les ventes qu'il expose.
1. NumPy : calculer vite, pandas : manipuler des tables
NumPy remplace les boucles par des arrays vectorisés calculés en C : (a * 1.2).mean() traite un million de lignes d'un coup — ×100 plus vite pour ÷10 lignes de code. pandas est le tableur programmable : le DataFrame (table lignes/colonnes) se charge (read_csv), s'inspecte (head, info, describe, isna), se filtre (df[df.ville == "Alger"]), s'agrège (groupby(...).agg(...)) et se fusionne (merge). Nabil inspecte TOUJOURS avant d'analyser : types, valeurs manquantes et ordres de grandeur d'abord — le nettoyage est l'étape la plus longue et la plus importante.
2. Matplotlib : montrer, et le carnet Jupyter
Matplotlib transforme les chiffres en message : 1 graphe = 1 message, avec un titre qui dit la conclusion (« Alger porte 40 % du CA » plutôt que « CA par ville »). df.plot() suffit pour explorer ; une figure soignée (titre, labels, source) sert pour communiquer. Le notebook Jupyter mélange code, résultats et récit : idéal pour explorer et raconter l'analyse pas à pas. Nabil retient la règle : pandas remplace le tableur pour les gros volumes et le reproductible ; le tableur reste parfait pour les petits volumes visuels rapides.
Le savais-tu ?
L'ours n'est que la mascotte officieuse des data analysts.
🔎 Exemple concret — 🔎 Exemple concret — Le top villes de Nabil
L'analyse complète de Nabil en 5 lignes :
df = pd.read_csv("ventes.csv")
print(df.info(), df.isna().sum()) # inspecter d'abord
top = df.groupby("ville")["montant"].sum().sort_values(ascending=False)
print(top.head()) # la réponse chiffrée
top.head().plot(kind="bar", title="CA par ville")
Lecture : inspecter → agréger → montrer, dans cet ordre.
Leçon : groupby + sort = 80 % des rapports d'activité.
Vocabulaire de la section
- NumPy
- Bibliothèque de calcul sur arrays vectorisés (opérations en C) : remplace les boucles Python, ×100 plus vite sur gros volumes.
Exemple simple : Nabil applique une remise à un million de montants en une ligne.
Ce que ce n'est pas : une boucle for qui traite les lignes une par une.
Réflexe : dès qu'on boucle sur des nombres, chercher l'opération vectorisée.
- pandas / DataFrame
- Tableur programmable : le DataFrame (table lignes/colonnes) charge, filtre, agrège et fusionne des données — read_csv, groupby, merge.
Exemple simple : Nabil agrège ses ventes par ville en deux lignes.
Ce que ce n'est pas : des tris manuels répétés dans un tableur.
Réflexe : inspecter (head/info/isna) avant toute analyse.
- groupby + agrégation
- Regrouper les lignes par catégorie puis résumer (somme, moyenne) : le geste qui produit 80 % des rapports.
Exemple simple : Le CA par ville de Nabil : groupby ville, somme des montants, tri.
Ce que ce n'est pas : des totaux recalculés à la main à chaque demande.
Réflexe : question par catégorie ? groupby d'abord.
- Matplotlib
- Bibliothèque de graphiques : 1 graphe = 1 message, avec un titre qui dit la conclusion.
Exemple simple : Nabil titre son bar chart avec la conclusion, pas juste « CA par ville ».
Ce que ce n'est pas : dix graphiques décoratifs sans message.
Réflexe : titre-message, labels, source — sinon c'est du décor.
En pratique — En pratique — Analyser un CSV de bout en bout
- Chargez un CSV avec pd.read_csv et inspectez : head, info, describe, isna().sum() — notez types et trous.
- Nettoyez le minimum vital : types de dates/montants, valeurs manquantes signalées ou traitées.
- Filtrez (df[condition]) puis agrégez (groupby + agg + sort) pour répondre à UNE question précise.
- Tracez 1 graphique avec un titre-message, puis relancez tout le script d'un coup pour prouver qu'il est reproductible.
Script prêt à dire — présenter son analyse (30 s)
« C'est Nabil : j'ai chargé les ventes, inspecté les trous et les types, puis agrégé par ville — Alger porte l'essentiel du trimestre. Le script se relance à l'identique le trimestre prochain, et le graphique dit la conclusion dans son titre. »
À dire en revue d'activité ; montrez le graphe, pas le code.
Modèle copier-coller — analyse pandas (code testé)
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("ventes.csv")
# 1. Inspecter d'abord : types, trous, ordres de grandeur
print(df.head())
print(df.info())
print(df.describe())
print(df.isna().sum())
# 2. Filtrer : les ventes d'Alger ce trimestre
alger = df[df["ville"] == "Alger"]
# 3. Agréger : CA par ville, trié (80 % des rapports)
top = df.groupby("ville")["montant"].sum().sort_values(ascending=False)
print(top.head())
# 4. Montrer : 1 graphe = 1 message
top.head().plot(kind="bar", title="Alger porte l'essentiel du CA")
plt.tight_layout()
plt.savefig("top-villes.png")
Petit fichier
Quelques centaines de lignes ? Le tableur reste plus rapide — gardez pandas pour le reproductible.
Rapport mensuel
Comme Nabil : un script qui charge, inspecte, agrège et exporte — relancé chaque mois sans y toucher.
Million de lignes
Vectorisez tout (jamais de for sur les lignes) : NumPy/pandas en C font en secondes ce que les boucles font en minutes.
Exploration libre
Travaillez en notebook Jupyter : code, résultats et récit côte à côte pour chercher avant de conclure.
✓ Bonnes pratiques
- Inspecter (head/info/describe/isna) avant d'analyser.
- Vectoriser : jamais de boucle sur des millions de lignes.
- Un graphe = un message, titre qui conclut.
✗ Pièges fréquents
- Boucler en for sur des millions de lignes.
- Analyser sans inspecter types et trous.
- Multiplier les graphiques sans message.
Points clés à retenir
- TRIO : NUMPY (calcul vectorisé) / PANDAS (tables) / MATPLOTLIB (graphiques).
- DATAFRAME = tableur programmable : read_csv, head, describe, groupby, merge.
- MÉTHODE : inspecter → agréger → montrer ; nettoyage = étape la plus longue.
- JUPYTER = récit d'analyse ; 1 graphe = 1 message avec titre-conclusion.
Défi 48h — appliquez demain
Prenez 1 CSV réel de votre travail : inspectez-le, répondez à 1 question par groupby, et livrez 1 graphe titré-message.
- Je peux citer NumPy, pandas/DataFrame, Matplotlib.
- Je sais inspecter puis agréger un CSV.
- J'ai 1 analyse reproductible avec 1 graphe-message.
Questions fréquentes
pandas remplace-t-il Excel ?
Pour les gros volumes et le reproductible : oui — un script refait en secondes ce qu'un tableur refait en heures, sans erreur de copier-coller. Pour les petits volumes visuels et rapides : non — le tableur reste imbattable. Nabil utilise les deux : pandas pour les rapports mensuels, le tableur pour un coup d'œil.
Faut-il être fort en maths pour la data science ?
Pas à ce stade : bases de statistiques (moyenne, médiane, distribution) suffisent pour inspecter et agréger avec pandas. Les maths avancées (algèbre, probas) deviennent utiles en 4.4 pour choisir et régler des modèles de machine learning.
Quelle est la structure au cœur de pandas ?