Analyse de Données avec Python

Classe B3 ASO 2025-2026

Module 2

Opérations et Manipulations avec Numpy

Apprendre à manipuler les données dans les tableaux : calculs, statistiques, sélection.

2.1. La magie de la Vectorisation

C'est le concept le plus important. Au lieu d'écrire une boucle for pour additionner chaque élément de deux tableaux, vous faites simplement tableau1 + tableau2. C'est plus lisible et infiniment plus rapide.

import numpy as np # Sans vectorisation (lent et verbeux) list1 = [1, 2, 3] list2 = [4, 5, 6] resultat_liste = [] for i in range(len(list1)): resultat_liste.append(list1[i] + list2[i]) print("Résultat avec une boucle for:", resultat_liste) # Avec la vectorisation Numpy (rapide et concis) arr1 = np.array(list1) arr2 = np.array(list2) resultat_arr = arr1 + arr2 print("Résultat avec Numpy:", resultat_arr)

Cela s'applique à toutes les opérations : * (multiplication), / (division), ** (puissance), et aussi aux fonctions Numpy comme np.sqrt() (racine carrée).

2.2. Indexing et Slicing

Comme avec les listes, on peut extraire des parties d'un tableau.

import numpy as np arr = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Indexing simple print("Le 3ème élément:", arr[2]) # 2 # Slicing (extraire une tranche) print("Éléments de l'index 2 à 5:", arr[2:6]) # [2, 3, 4, 5] # Pour les tableaux 2D, on utilise [ligne, colonne] arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print("Élément à la ligne 1, colonne 2:", arr_2d[1, 2]) # 6 # Extraire la première colonne entière (toutes les lignes, colonne 0) print("Première colonne:", arr_2d[:, 0]) # [1, 4, 7]

2.3. Calculs Statistiques

Numpy excelle dans le calcul de statistiques sur de grands volumes de données.

import numpy as np data = np.array([15, 20, 22, 28, 35, 40]) print("Moyenne:", data.mean()) print("Somme:", data.sum()) print("Écart-type:", data.std()) print("Valeur maximale:", data.max())

Exercices Pratiques

Exercice 1 : Vectorisation et Conditions

Créez un tableau Numpy allant de 1 à 20. À l'aide d'opérations vectorielles, mettez au carré tous les nombres de ce tableau. Ensuite, utilisez le "boolean indexing" pour n'afficher que les nombres au carré qui sont supérieurs à 100.

Voir la solution
import numpy as np # Crée un tableau de 1 à 20 nombres = np.arange(1, 21) # Met au carré tous les éléments en une seule opération nombres_carres = nombres ** 2 print("Nombres au carré :", nombres_carres) # Crée un masque booléen pour les valeurs > 100 masque = nombres_carres > 100 # Applique le masque pour filtrer le tableau resultat = nombres_carres[masque] print("Nombres au carré > 100 :", resultat)

Exercice 2 : Slicing de Matrice

Créez une matrice Numpy 4x4 contenant les nombres de 0 à 15. À partir de cette matrice, extrayez le carré central 2x2 (contenant les valeurs 5, 6, 9, 10).

Voir la solution
import numpy as np # Crée une matrice 4x4 avec les nombres de 0 à 15 matrice = np.arange(16).reshape(4, 4) print("Matrice originale :\n", matrice) # On sélectionne les lignes d'index 1 et 2 (1:3) # et les colonnes d'index 1 et 2 (1:3) carre_central = matrice[1:3, 1:3] print("\nCarré central 2x2 :\n", carre_central)

Exercice 3 : Statistiques sur un Axe

Créez une matrice 3x4 de nombres aléatoires. Calculez la moyenne de chaque colonne, puis la somme de chaque ligne.

Voir la solution
import numpy as np # Crée une matrice 3x4 avec des nombres aléatoires matrice_aleatoire = np.random.randint(0, 100, size=(3, 4)) print("Matrice aléatoire :\n", matrice_aleatoire) # axis=0 spécifie que l'opération se fait verticalement (sur les colonnes) moyenne_colonnes = matrice_aleatoire.mean(axis=0) print("\nMoyenne de chaque colonne :", moyenne_colonnes) # axis=1 spécifie que l'opération se fait horizontalement (sur les lignes) somme_lignes = matrice_aleatoire.sum(axis=1) print("Somme de chaque ligne :", somme_lignes)