ML Learning Hub
Fondationsdébutant

Stack Python ML : NumPy, Pandas & Matplotlib

Votre boîte à outils data science — NumPy, Pandas, Matplotlib et le flux de travail Jupyter

Maîtrisez les outils quotidiens — NumPy, Pandas DataFrames et Matplotlib/Seaborn. La fondation sur laquelle tout le reste repose.

35 min
6 diagrammes
7 Concepts Couverts

Concepts Couverts

NumPy ArraysBroadcastingPandas DataFrameEDAMatplotlibSeabornVectorization

Formules Clés

Moyenne Vectorisée

np.mean(X) — NumPy calcule cela en C, des ordres de grandeur plus rapide qu'une boucle Python

Broadcasting

NumPy étire le petit tableau selon la dimension manquante — évite les boucles explicites

Corrélation de Pearson

np.corrcoef(X,Y) — mesure la dépendance linéaire entre deux variables

Simulation Interactive

Loading visualization…
🎯

Pourquoi Cette Pile Avant Tout

motivation

Chaque framework ML — scikit-learn, PyTorch, TensorFlow, JAX — repose sur les tableaux NumPy. Comprendre comment les tableaux fonctionnent en mémoire (disposition C contiguë, dtype, strides) est la différence entre écrire des boucles Python en O(n²) et des opérations NumPy vectorisées en O(n) qui s'exécutent à la vitesse du C. Pandas vous donne des DataFrames étiquetés pour les données réelles désordonnées, et Matplotlib/Seaborn vous permettent de voir ce qui se passe avant de modéliser. L'écosystème ML tout entier parle NumPy — le maîtriser, c'est maîtriser la lingua franca.

Une boucle Python sur 10 millions de nombres prend ~4 secondes. np.sum() prend ~8ms — 500× plus rapide. C'est crucial lors du calcul des gradients sur un réseau de neurones.

⚙️

Essentiels NumPy — Ce Dont Vous Avez Vraiment Besoin

algorithm
1

Création de tableaux : np.array(), np.zeros(), np.ones(), np.linspace(), np.arange(), np.random.randn()

2

Manipulation de forme : .reshape(), .T (transposé), np.concatenate(), np.stack(), np.squeeze()

3

Maths vectorisées : +, -, *, / diffusent élément par élément ; np.dot() / @ pour la multiplication matricielle

4

Indexation : arr[2:5], arr[arr > 0] (masque booléen), arr[:, 0] (tranche colonne)

5

Agrégations : .sum(), .mean(), .std(), .max(), .argmax() — tous acceptent le paramètre axis=

6

Règle de diffusion : aligner les formes par la droite, les dimensions doivent correspondre ou être 1

</>

NumPy, Pandas & Matplotlib — Workflow Complet

code
python63 lines
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# ── NumPy : tableaux, broadcasting, opérations vectorisées ───────────────────
X = np.random.randn(1000, 5)          # 1000 échantillons, 5 variables
y = 2*X[:,0] - X[:,1] + 0.5*np.random.randn(1000)

print(X.shape, X.dtype)               # (1000, 5) float64
print(X.mean(axis=0).round(3))        # moyennes par variable ≈ 0
print(X.std(axis=0).round(3))         # écarts-types par variable ≈ 1

# Broadcasting : soustraire la moyenne et diviser par l'écart-type (StandardScaler manuel)
X_scaled = (X - X.mean(axis=0)) / X.std(axis=0)

# Multiplication matricielle : X @ W où W est 5×2
W = np.random.randn(5, 2)
Z = X_scaled @ W                       # forme (1000, 2)

# Indexation booléenne
high_income = X[X[:,0] > 1.0]         # lignes où la variable 0 > 1σ
print(f"Lignes à revenu élevé : {len(high_income)}")

# ── Pandas : DataFrames, EDA ─────────────────────────────────────────────────
df = pd.DataFrame(X, columns=[f"var_{i}" for i in range(5)])
df["cible"] = y

# EDA rapide
print(df.describe().round(2))          # count, mean, std, quartiles
print(df.isnull().sum())               # vérifier les valeurs manquantes
print(df.dtypes)

# Exemple de groupby
df["groupe"] = np.where(df["var_0"] > 0, "élevé", "faible")
print(df.groupby("groupe")["cible"].agg(["mean","std"]).round(3))

# Corrélations
corr = df.drop(columns="groupe").corr()
print(corr["cible"].sort_values(ascending=False).round(3))

# ── Matplotlib / Seaborn : visualisation ─────────────────────────────────────
fig, axes = plt.subplots(1, 3, figsize=(15, 4))

# 1. Distribution de la cible
axes[0].hist(df["cible"], bins=50, color="#6c63ff", alpha=0.8, edgecolor="white")
axes[0].set_title("Distribution de la cible")
axes[0].set_xlabel("y")

# 2. Nuage de points + droite de régression
axes[1].scatter(df["var_0"], df["cible"], alpha=0.3, s=10, color="#06b6d4")
m, b = np.polyfit(df["var_0"], df["cible"], 1)
x_line = np.linspace(-3, 3, 100)
axes[1].plot(x_line, m*x_line + b, color="#ff6b6b", lw=2, label=f"pente={m:.2f}")
axes[1].set_title("Variable 0 vs Cible")
axes[1].legend()

# 3. Carte de chaleur des corrélations
sns.heatmap(corr, annot=True, fmt=".2f", cmap="coolwarm",
            center=0, ax=axes[2], cbar=False)
axes[2].set_title("Matrice de corrélation")

plt.tight_layout()
⚠️

Les Bugs NumPy Les Plus Courants

pitfall

1) Incompatibilité de forme : (100,) ≠ (100,1). Vérifiez toujours .shape avant les opérations matricielles. 2) Division entière : attention avec les tableaux dtype=int. 3) Copie vs vues : arr[0:5] retourne une VUE — le modifier modifie l'original. Utilisez .copy() pour être sûr. 4) En-place vs hors-place : X *= 2 modifie X sur place ; Y = X * 2 crée un nouveau tableau. 5) Propagation des NaN : np.mean([1,2,np.nan]) = NaN. Utilisez np.nanmean() pour des agrégations sûres.

np.shares_memory(a, b) vous indique si deux tableaux partagent des données sous-jacentes — crucial à savoir quand vous 'copiez' des tranches.

?Vérification des Connaissances

La progression est sauvegardée dans votre navigateur — aucun compte requis.

Besoin d'un Data Scientist ou Ingénieur IA ?

Je construis des modèles ML sur mesure, des chatbots RAG, des pipelines de données et des APIs en production — de l'analyse au déploiement.