🐼 Pandas et 🤖 Scikit-learn
- Intro
- 🐼 Pandas DataFrame
- Filtrer Trier
- Sélectionner Series Parcourir
- Transformer
- Statisques Agréger Pivot
- Nettoyer
- Visualiser
- 🤖 Scikit-learn
- Activités
📊 Pour votre TP2, vous allez devoir manipuler des données réelles :
- 📥 Charger des ensembles de données à partir de fichiers CSV.
- 🧹 Nettoyer et prétraiter les données pour les rendre exploitables.
- 🔍 Analyser les données pour en extraire des informations pertinentes.
- 📈 Visualiser les données à l'aide de graphiques.
- 🤖 Utiliser des techniques d’apprentissage automatique pour construire des modèles prédictifs.
🧠 Cela nécessite une bonne compréhension des concepts et des outils d’analyse de données.
🔬 L’analyse de données est un processus essentiel qui consiste à examiner, nettoyer, transformer et modéliser des données dans le but de découvrir des informations utiles, informer des conclusions et soutenir la prise de décision.
🧰 Bibliothèques Python couramment utilisées pour l’analyse de données :
- 🐼 Pandas : pour la manipulation et l’analyse de données, offrant des structures de type DataFrame.
- 🔢 NumPy : pour le calcul scientifique et les opérations sur des tableaux multidimensionnels.
- 🤖 Scikit-learn : pour l’apprentissage automatique et la modélisation prédictive.
- 🧠 Keras et TensorFlow : pour le développement de modèles d’apprentissage profond (deep learning).
- 🎨 Matplotlib et Seaborn : pour la visualisation de données.
- … et bien d’autres selon les besoins !
🧩 Vous connaissez déjà :
- 🎨 Matplotlib pour la visualisation
- 🔢 NumPy pour les calculs numériques
📅 Cette semaine, nous allons apprendre à utiliser deux nouvelles bibliothèques essentielles pour votre TP2 :
🐼 Pandas et 🤖 Scikit-learn.
👉 La semaine prochaine, nous aborderons les concepts d’intelligence artificielle et d’apprentissage profond (deep learning).
Pandas est une bibliothèque Python essentielle pour la manipulation et l'analyse de données.
Elle offre des structures de données flexibles et performantes, telles que les DataFrames, qui facilitent le traitement des données tabulaires.
Le DataFrame est la structure de données principale de Pandas. Il s'agit d'une table bidimensionnelle, similaire à une feuille de calcul Excel, où les données sont organisées en lignes et en colonnes. Chaque colonne peut contenir des types de données différents (nombres, chaînes de caractères, dates, etc.).
On peut créer un DataFrame à partir de diverses sources de données, telles que des fichiers CSV, des bases de données SQL, ou même des dictionnaires Python.
Voici un exemple simple de création d'un DataFrame à partir d'un dictionnaire :
import pandas as pd
# Création d'un DataFrame à partir d'un dictionnaire
data = {'Nom': ['Alice', 'Bob', 'Charlie'],
'Âge': [25, 30, 35],
'Ville': ['Paris', 'Lyon', 'Marseille']}
df = pd.DataFrame(data)
# Affichage du DataFrame
print(df)
Cela produira le DataFrame suivant :
Nom Âge Ville
0 Alice 25 Paris
1 Bob 30 Lyon
2 Charlie 35 Marseille
- Les clés du dictionnaire deviennent les noms des colonnes, et chaque liste associée à une clé devient une colonne de données.
- La première ligne représente les en-têtes des colonnes.
- La première colonne (0, 1, 2) est l'index par défaut des lignes suivantes.
- Chacune de ces lignes représente un enregistrement (une personne dans cet exemple).
Le fichier tips_dataset.csv contient des données sur les pourboires donnés dans un restaurant, avec les colonnes suivantes : le montant total de la facture, le pourboire, le sexe du serveur, si le client est fumeur, le jour de la semaine, le moment de la journée (dîner/lunch ou souper/dinner) et la taille du groupe :
total_bill,tip,sex,smoker,day,time,size
16.99,1.01,Female,No,Sun,Dinner,2
10.34,1.66,Male,No,Sun,Dinner,3
21.01,3.5,Male,No,Sun,Dinner,3
23.68,3.31,Male,No,Sun,Dinner,2
...
Si vous le téléchargez et le placez dans votre projet Pycharm, vous pouvez le lire avec Pandas comme ceci :
import pandas as pd
# Lire le fichier CSV dans un DataFrame
df = pd.read_csv('tips_dataset.csv') # la variable df contiendra un DataFrame
# Afficher les premières lignes du DataFrame
print(df.head())
Cela produira un DataFrame qui ressemble à ceci (seules les 5 premières lignes sont affichées) :
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
Nous utiliserons ces données pour illustrer diverses opérations avec Pandas.
- Chargez-les et expérimentez par vous-même ! 🎯
Si votre DataFrame a trop de colonnes ou du contenu trop long, il se peut que certaines colonnes soient remplacées par des ...
Dans ce cas, ajoutez ces 2 instructions juste après vos importations en haut de votre script :
import pandas as pd
# Permet d'afficher entièrement le contenu des colonnes, sans limite de longueur
pd.set_option('display.max_colwidth', None)
# Empêche Pandas d'étendre l'affichage du DataFrame sur plusieurs lignes (si possible)
pd.set_option('display.expand_frame_repr', False)
Une fois vos données chargées dans un DataFrame (ici nommé df), vous pouvez effectuer une grande variété d’opérations.
L'une des premières opérations consiste généralement à explorer les données afin de découvrir les colonnes, leur format, etc.
# Afficher les 5 premières lignes du DataFrame
print(df.head())
# Afficher les 20 premières lignes du DataFrame
print(df.head(20))
# Afficher les informations sur les colonnes et les types de données
df.info()
# Afficher les noms des colonnes uniquement sous forme d'une liste de string
print(df.columns.to_list())
# Afficher le nombre de lignes dans le DataFrame
print(len(df))
# Afficher des statistiques descriptives (moyenne, min, max, etc.)
print(df.describe())
Remarquez que toutes ces opérations ne modifient pas le DataFrame original df.
Elles retournent des informations ou des nouveaux objets basés sur le contenu de df, mais df lui-même reste inchangé.
Seule la méthode df.info() affiche des informations sur le DataFrame sans retourner un nouvel objet, donc on n'a pas besoin de faire print(df.info()).
La dernière commande df.describe() permet d’obtenir sous forme d'un DataFrame un résumé statistique rapide des colonnes numériques du DataFrame, incluant des mesures telles que la moyenne (mean), l’écart-type (std), les valeurs minimales (min) et maximales (max), ainsi que les quartiles (25%, 50%, 75%) :
total_bill tip size
count 244.000000 244.000000 244.000000
mean 19.785943 2.998279 2.569672
std 8.902412 1.383638 0.951100
min 3.070000 1.000000 1.000000
25% 13.347500 2.000000 2.000000
50% 17.795000 2.900000 2.000000
75% 24.127500 3.562500 3.000000
max 50.810000 10.000000 6.000000
Avant même d'écrire une seule ligne de code, PyCharm vous permet d'explorer visuellement un fichier CSV en faisant simplement un double-clic à partir de la liste des fichiers du projet. Deux modes d'affichage sont alors disponibles en bas de l'éditeur :

Mode Text - affichage brut du fichier

Mode Data - affichage tabulaire interactif
-
📄 Mode Text : affiche le contenu brut du fichier, exactement tel qu'il est enregistré sur le disque. Les valeurs sont séparées par des virgules, sans mise en forme. Utile pour inspecter rapidement la structure du fichier ou détecter des anomalies (encodage, séparateurs, etc.).
-
📊 Mode Data : affiche les données sous forme de tableau structuré, avec une colonne par champ. Ce mode offre des fonctionnalités interactives très pratiques :
- 🔍 Filtrer les lignes selon la valeur d'une colonne
- 🔃 Trier les données en cliquant sur l'entête d'une colonne
- 🔎 Rechercher une valeur précise dans le tableau
PyCharm n'affiche pas nécessairement toutes les lignes du fichier CSV dans le mode Data.
Pour des raisons de performance, seul un sous-ensemble des données est chargé en mémoire et rendu visible dans l'interface.
👉 Cette limitation n'est pas unique à PyCharm : Excel est lui aussi limité à environ 1 048 576 lignes (soit ~1 million de lignes).
Si votre fichier en contient davantage, les données excédentaires ne seront tout simplement pas visibles.
🧠 C'est l'une des raisons pour lesquelles des outils comme Pandas sont indispensables :
ils permettent de manipuler des fichiers de plusieurs millions (voire milliards) de lignes, là où les outils de visualisation classiques atteignent leurs limites.
Il est possible de créer un nouveau DataFrame en filtrant des lignes.
Par exemple, on peut filtrer pour ne conserver que :
# les lignes où le pourboire est supérieur à 5
df_filtre1 = df[df["tip"] > 5]
print(df_filtre1)
# les lignes où le jour est "Sun" et le temps est "Dinner"
df_filtre2 = df[(df["day"] == "Sun") & (df["time"] == "Dinner")]
print(df_filtre2)
# les lignes où le jour contient la chaîne de caractère "u"
# (ceci limite les résultats aux jours : Sun et Thur)
df_filtre3 = df[df["day"].str.contains("u")]
print(df_filtre3)
# les lignes où le serveur est une femme et le pourboire est supérieur à 3
df_filtre4 = df[(df["sex"] == "Female") & (df["tip"] > 3)]
print(df_filtre4)
# les lignes où la longueur de la chaîne dans la colonne "day" est supérieure à 3
df_filtre5 = df[df["day"].str.len() > 3]
print(df_filtre5)
# les lignes où le jour est dans une liste de valeur souhaitées
liste_journees_a_conserver = ["Fri", "Sat"]
df_filtre6 = df[df["day"].isin(liste_journees_a_conserver)]
print(df_filtre6)
Toutes ces opérations (et celles qui suivent) ne modifient pas le DataFrame original df.
Elles renvoient un nouveau DataFrame basé sur les critères spécifiés.
Il est cependant possible de stocker le résultat dans une nouvelle variable (si nécessaire) :
df_filtered = df[df["tip"] > 5]
df_filtered contiendra alors un nouveau DataFrame avec uniquement les lignes où le pourboire est supérieur à 5.
Il est possible de créer un nouveau DataFrame trié sur une ou plusieurs colonnes :
# Trier par montant total de la facture (total_bill) en ordre croissant
df_trie1 = df.sort_values(by="total_bill")
print(df_trie1)
# Trier par pourboire (tip) en ordre décroissant
df_trie2 = df.sort_values(by="tip", ascending=False)
print(df_trie2)
# Trier par jour puis par montant total de la facture
df_trie3 = df.sort_values(by=["day", "total_bill"])
print(df_trie3)
Il est possible de chaîner les opérations. Par exemple, on peut filtrer les données, puis les trier immédiatement. Cela peut se faire en deux instructions séparées, tout comme il est possible de le faire en une seule ligne!
# Création de 2 DataFrames contenant les mêmes lignes
# (les données de la fin de semaine triées en ordre du montant total de la facture)
# Version détaillée (en 2 étapes)
df_version1 = df[df["day"].isin(["Sun","Sat"])]
df_version1 = df_version1.sort_values(by="total_bill")
print(df_version1)
# Version compacte (en 1 seule instruction : "Method Chaining")
df_version2 = df[df["day"].isin(["Sun","Sat"])].sort_values(by="total_bill")
print(df_version2)
En programmation, on applique souvent le principe de réduction précoce (early filtering) : plus tôt on réduit la taille du jeu de données, plus les opérations suivantes seront fluides et performantes. Par conséquent, commencez toujours par filtrer vos données avant de les trier.
Lorsque vous combinez plusieurs opérations, il peut être complexe d'identifier la source d'une erreur. Le débogage est souvent plus simple en décomposant les instructions sur des lignes distinctes : cela permet de vérifier l'état du DataFrame après chaque transformation.
En mode débogage, PyCharm offre une fonctionnalité très pratique : le lien "View as DataFrame", visible dans le panneau des variables. Il permet d'inspecter visuellement le contenu d'un DataFrame sous forme de tableau interactif, directement depuis le débogueur.

👆 Cliquez sur "View as DataFrame" dans le panneau des variables pour inspecter un DataFrame en cours d'exécution.

📊 Le contenu du DataFrame s'affiche dans une vue tabulaire claire, avec toutes ses lignes et colonnes.
Nous avons vu comment filtrer des lignes en fonction de critères spécifiques.
Voyons maintenant comment sélectionner des colonnes ou des lignes spécifiques d'un DataFrame.
Il est possible de créer un NOUVEAU DataFrame à partir d'un DataFrame existant en ne conservant que certaines colonnes ou certaines lignes.
📌 Sélection de colonnes
Pour sélectionner plusieurs colonnes, on utilise une liste de noms de colonnes :
colonnes_a_conserver = ["total_bill", "tip", "day"]
df_plusieurs_colonnes = df[colonnes_a_conserver]
print(df_plusieurs_colonnes)
On peut aussi le faire directement (attention aux doubles crochets [[...]]) :
df_plusieurs_colonnes = df[["total_bill", "tip", "day"]]
print(df_plusieurs_colonnes)