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.
Concepts Couverts
∑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
Pourquoi Cette Pile Avant Tout
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
Création de tableaux : np.array(), np.zeros(), np.ones(), np.linspace(), np.arange(), np.random.randn()
Manipulation de forme : .reshape(), .T (transposé), np.concatenate(), np.stack(), np.squeeze()
Maths vectorisées : +, -, *, / diffusent élément par élément ; np.dot() / @ pour la multiplication matricielle
Indexation : arr[2:5], arr[arr > 0] (masque booléen), arr[:, 0] (tranche colonne)
Agrégations : .sum(), .mean(), .std(), .max(), .argmax() — tous acceptent le paramètre axis=
Règle de diffusion : aligner les formes par la droite, les dimensions doivent correspondre ou être 1
NumPy, Pandas & Matplotlib — Workflow Complet
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns class="tok-comment"># ── NumPy : tableaux, broadcasting, opérations vectorisées ─────────────────── X = np.random.randn(class="tok-num">1000, class="tok-num">5) class="tok-comment"># class="tok-num">1000 échantillons, class="tok-num">5 variables y = class="tok-num">2*X[:,class="tok-num">0] - X[:,class="tok-num">1] + class="tok-num">0.5*np.random.randn(class="tok-num">1000) print(X.shape, X.dtype) class="tok-comment"># (class="tok-num">1000, class="tok-num">5) float64 print(X.mean(axis=class="tok-num">0).round(class="tok-num">3)) class="tok-comment"># moyennes par variable ≈ class="tok-num">0 print(X.std(axis=class="tok-num">0).round(class="tok-num">3)) class="tok-comment"># écarts-types par variable ≈ class="tok-num">1 class="tok-comment"># Broadcasting : soustraire la moyenne et diviser par l'écart-type (StandardScaler manuel) X_scaled = (X - X.mean(axis=class="tok-num">0)) / X.std(axis=class="tok-num">0) class="tok-comment"># Multiplication matricielle : X @ W où W est class="tok-num">5×class="tok-num">2 W = np.random.randn(class="tok-num">5, class="tok-num">2) Z = X_scaled @ W class="tok-comment"># forme (class="tok-num">1000, class="tok-num">2) class="tok-comment"># Indexation booléenne high_income = X[X[:,class="tok-num">0] > class="tok-num">1.0] class="tok-comment"># lignes où la variable class="tok-num">0 > class="tok-num">1σ print(fclass="tok-str">"Lignes à revenu élevé : {len(high_income)}") class="tok-comment"># ── Pandas : DataFrames, EDA ───────────────────────────────────────────────── df = pd.DataFrame(X, columns=[fclass="tok-str">"var_{i}" for i in range(class="tok-num">5)]) df[class="tok-str">"cible"] = y class="tok-comment"># EDA rapide print(df.describe().round(class="tok-num">2)) class="tok-comment"># count, mean, std, quartiles print(df.isnull().sum()) class="tok-comment"># vérifier les valeurs manquantes print(df.dtypes) class="tok-comment"># Exemple de groupby df[class="tok-str">"groupe"] = np.where(df[class="tok-str">"var_0"] > class="tok-num">0, class="tok-str">"élevé", class="tok-str">"faible") print(df.groupby(class="tok-str">"groupe")[class="tok-str">"cible"].agg([class="tok-str">"mean",class="tok-str">"std"]).round(class="tok-num">3)) class="tok-comment"># Corrélations corr = df.drop(columns=class="tok-str">"groupe").corr() print(corr[class="tok-str">"cible"].sort_values(ascending=False).round(class="tok-num">3)) class="tok-comment"># ── Matplotlib / Seaborn : visualisation ───────────────────────────────────── fig, axes = plt.subplots(class="tok-num">1, class="tok-num">3, figsize=(class="tok-num">15, class="tok-num">4)) class="tok-comment"># class="tok-num">1. Distribution de la cible axes[class="tok-num">0].hist(df[class="tok-str">"cible"], bins=class="tok-num">50, color=class="tok-str">"class="tok-comment">#6c63ff", alpha=class="tok-num">0.8, edgecolor=class="tok-str">"white") axes[class="tok-num">0].set_title(class="tok-str">"Distribution de la cible") axes[class="tok-num">0].set_xlabel(class="tok-str">"y") class="tok-comment"># class="tok-num">2. Nuage de points + droite de régression axes[class="tok-num">1].scatter(df[class="tok-str">"var_0"], df[class="tok-str">"cible"], alpha=class="tok-num">0.3, s=class="tok-num">10, color=class="tok-str">"class="tok-comment">#06b6d4") m, b = np.polyfit(df[class="tok-str">"var_0"], df[class="tok-str">"cible"], class="tok-num">1) x_line = np.linspace(-class="tok-num">3, class="tok-num">3, class="tok-num">100) axes[class="tok-num">1].plot(x_line, m*x_line + b, color=class="tok-str">"class="tok-comment">#ff6b6b", lw=class="tok-num">2, label=fclass="tok-str">"pente={m:.2f}") axes[class="tok-num">1].set_title(class="tok-str">"Variable class="tok-num">0 vs Cible") axes[class="tok-num">1].legend() class="tok-comment"># class="tok-num">3. Carte de chaleur des corrélations sns.heatmap(corr, annot=True, fmt=class="tok-str">".2f", cmap=class="tok-str">"coolwarm", center=class="tok-num">0, ax=axes[class="tok-num">2], cbar=False) axes[class="tok-num">2].set_title(class="tok-str">"Matrice de corrélation") plt.tight_layout()
Les Bugs NumPy Les Plus Courants
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 ingénieur IA ou data scientist ?
Je conçois des modèles ML sur mesure, des agents IA, de la vision par ordinateur et de l'automatisation — de l'idée à la production.