# Exercices
## Exercice 1 : Première Visualisation avec Matplotlib
Vous disposez d'un tableau NumPy représentant les âges de 15 clients d'une boutique en ligne :
`ages = np.array([22, 25, 30, 35, 28, 40, 25, 22, 30, 50, 27, 32, 29, 26, 31])`
Utilisez `matplotlib.pyplot` pour créer un histogramme de ces âges.
1. Importez `numpy` et `matplotlib.pyplot`.
2. Créez l'histogramme des `ages`.
3. Affichez le graphique.
## Exercice 2 : Personnalisation de Graphiques Matplotlib
Considérons un jeu de données hypothétique sur les performances d'étudiants, stocké dans un DataFrame pandas :
```python
import pandas as pd
import numpy as np
data = {
'Heures_Etude': np.random.randint(5, 30, 50),
'Note_Examen': np.random.randint(40, 100, 50),
'Genre': np.random.choice(['Homme', 'Femme'], 50)
}
df_etudiants = pd.DataFrame(data)
```
1. Créez un nuage de points (`scatter plot`) montrant la relation entre `Heures_Etude` (en x) et `Note_Examen` (en y).
2. Personnalisez le graphique :
* Ajoutez un titre : "Relation entre Heures d'Étude et Note d'Examen".
* Nommez l'axe des x : "Heures d'Étude par Semaine".
* Nommez l'axe des y : "Note à l'Examen (sur 100)".
* Changez la couleur des points en bleu (`'blue'`).
* Affichez une grille.
3. Interprétez brièvement la tendance observée (ou l'absence de tendance).
## Exercice 3 : Introduction à Seaborn pour l'Analyse Univariée/Bivariée
En utilisant le DataFrame `df_etudiants` de l'exercice précédent :
1. Utilisez `seaborn` pour créer un histogramme de la colonne `Note_Examen`. Superposez une estimation de la densité de noyau (KDE).
2. Utilisez `seaborn` pour créer un boxplot de la `Note_Examen` en fonction du `Genre`.
3. Comparez les avantages de `seaborn` par rapport à `matplotlib` pour ces types de graphiques.
## Exercice 4 : Visualisation Interactive avec Plotly Express
En utilisant le DataFrame `df_etudiants` de l'exercice 4 :
1. Importez `plotly.express`.
2. Créez un nuage de points interactif de `Heures_Etude` vs `Note_Examen`, coloré par `Genre`.
3. Ajoutez un titre au graphique : "Performance des Étudiants par Genre".
4. Décrivez un avantage clé de l'utilisation de `plotly` par rapport à `matplotlib` ou `seaborn` pour ce graphique.
## Exercice 5 : Analyse Exploratoire Multivariée avec Matplotlib et Seaborn (Niveau Élaboré)
Vous travaillez sur le célèbre jeu de données Iris, que vous chargez comme suit :
```python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset('iris')
# iris.head() :
# sepal_length sepal_width petal_length petal_width species
# 0 5.1 3.5 1.4 0.2 setosa
# 1 4.9 3.0 1.4 0.2 setosa
# 2 4.7 3.2 1.3 0.2 setosa
# 3 4.6 3.1 1.5 0.2 setosa
# 4 5.0 3.6 1.4 0.2 setosa
```
Le jeu de données contient des mesures de sépales et de pétales pour trois espèces différentes d'iris.
1. **Distribution des longueurs de pétales :**
* Créez un histogramme de la `petal_length` pour chaque `species` sur des sous-graphiques séparés (une ligne, trois colonnes) en utilisant `matplotlib.pyplot.hist`. Assurez-vous d'avoir des titres clairs pour chaque sous-graphique.
2. **Relation entre longueur et largeur de sépales par espèce :**
* Créez un nuage de points (`scatterplot`) de `sepal_length` vs `sepal_width`, coloré par `species`, en utilisant `seaborn.scatterplot`.
* Ajoutez une légende et un titre significatif.
3. **Analyse des corrélations :**
* Calculez la matrice de corrélation pour les caractéristiques numériques du jeu de données Iris.
* Visualisez cette matrice de corrélation sous forme de heatmap (`seaborn.heatmap`). Affichez les valeurs de corrélation sur la heatmap.
4. À partir de ces visualisations, quelles observations clés pouvez-vous faire concernant les espèces d'iris et leurs caractéristiques ?
## Exercice 6 : Détection d'Anomalies et Préparation à l'Apprentissage Supervisé
Un département marketing analyse les données d'achat de clients pour identifier des comportements inhabituels. Le jeu de données `transactions.csv` contient `Montant_Achat` et `Frequence_Achats` pour 1000 clients.
```python
import pandas as pd
import numpy as np
import plotly.express as px
# Création d'un dataset simulé pour l'exercice
np.random.seed(42)
data = {
'Montant_Achat': np.random.normal(50, 15, 980),
'Frequence_Achats': np.random.normal(5, 2, 980)
}
df_transactions = pd.DataFrame(data)
# Ajout de quelques anomalies
anomalies = pd.DataFrame({
'Montant_Achat': [300, 250, 10, 5, 280],
'Frequence_Achats': [20, 18, 1, 0.5, 22]
})
df_transactions = pd.concat([df_transactions, anomalies], ignore_index=True)
df_transactions['Montant_Achat'] = df_transactions['Montant_Achat'].apply(lambda x: max(0, x))
df_transactions['Frequence_Achats'] = df_transactions['Frequence_Achats'].apply(lambda x: max(0, x)).astype(int)
```
1. Utilisez `seaborn.scatterplot` pour visualiser la relation entre `Montant_Achat` et `Frequence_Achats`.
2. Utilisez `plotly.express.scatter` pour créer le même graphique, mais en le rendant interactif.
3. Identifiez visuellement les points qui pourraient être considérés comme des "anomalies" ou des "outliers". Comment ces points pourraient-ils influencer un futur modèle d'apprentissage supervisé (par exemple, un modèle de segmentation client ou de prédiction de valeur client) ?
4. Proposez une brève stratégie de pré-traitement pour ces anomalies, en vous basant sur ce que vous avez appris précédemment.
## Exercice 7 : Conception d'un Tableau de Bord Simple pour le Data Mining
Une chaîne de magasins de vêtements souhaite analyser ses ventes sur l'année écoulée pour identifier les tendances et les produits phares. Vous avez accès à un jeu de données `ventes.csv` avec les colonnes `Date_Vente`, `Produit`, `Categorie_Produit`, `Montant_Vente`, `Quantite_Vendue`.
> [!note] Contexte
> Pour cet exercice, vous n'avez pas besoin de créer le DataFrame. Concentrez-vous sur la conception.
1. **Processus KDD :** Énumérez les étapes clés du processus KDD que vous suivriez pour cette analyse de ventes, en détaillant brièvement ce que vous feriez à chaque étape.
2. **Visualisations Clés :** Proposez trois visualisations distinctes (en spécifiant la bibliothèque : `matplotlib`, `seaborn`, ou `plotly` et le type de graphique) qui seraient essentielles pour un tableau de bord de vente. Pour chaque visualisation, expliquez :
* L'objectif de l'analyse (quelle question cela répond-il ?).
* Les variables à utiliser.
* La justification du choix de la bibliothèque et du type de graphique.
3. **Préparation à l'apprentissage supervisé :** Comment ces visualisations pourraient-elles aider à préparer les données pour un modèle d'apprentissage supervisé qui prédit les ventes futures ou la popularité des produits ?
# Corrigés Détaillés
## Correction Exercice 1 : Première Visualisation avec Matplotlib
```python
import numpy as np
import matplotlib.pyplot as plt
# Données fournies
ages = np.array([22, 25, 30, 35, 28, 40, 25, 22, 30, 50, 27, 32, 29, 26, 31])
# 1. Créez l'histogramme des ages
plt.hist(ages, bins=5, edgecolor='black') # bins=5 pour 5 barres, edgecolor pour une meilleure visibilité
plt.title("Distribution des Âges des Clients") # Ajout d'un titre
plt.xlabel("Âge") # Label de l'axe des x
plt.ylabel("Fréquence") # Label de l'axe des y
# 2. Affichez le graphique
plt.show()
```
> [!example] Résultat Attendu
> Un histogramme montrant la distribution des âges, avec des barres représentant la fréquence des âges dans différents intervalles. Par exemple, la plupart des clients se situeraient dans la tranche des 20-30 ans.
## Correction Exercice 2 : Personnalisation de Graphiques Matplotlib
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Création du DataFrame (comme dans l'énoncé)
np.random.seed(42) # Pour la reproductibilité
data = {
'Heures_Etude': np.random.randint(5, 30, 50),
'Note_Examen': np.random.randint(40, 100, 50),
'Genre': np.random.choice(['Homme', 'Femme'], 50)
}
df_etudiants = pd.DataFrame(data)
# 1. Créez un nuage de points
plt.figure(figsize=(10, 6)) # Optionnel: Ajuster la taille du graphique
plt.scatter(df_etudiants['Heures_Etude'], df_etudiants['Note_Examen'], color='blue')
# 2. Personnalisez le graphique
plt.title("Relation entre Heures d'Étude et Note d'Examen")
plt.xlabel("Heures d'Étude par Semaine")
plt.ylabel("Note à l'Examen (sur 100)")
plt.grid(True) # Affiche une grille
# Affichez le graphique
plt.show()
```
> [!example] Interprétation
> Avec des données générées aléatoirement, il est probable qu'il n'y ait pas de tendance claire ou une très faible corrélation entre les heures d'étude et la note d'examen. Si les données avaient été réelles, on s'attendrait généralement à observer une tendance positive : plus les heures d'étude augmentent, plus la note d'examen tend à être élevée. Le nuage de points permet de visualiser cette relation.
## Correction Exercice 3 : Introduction à Seaborn pour l'Analyse Univariée/Bivariée
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# Création du DataFrame (comme dans l'énoncé)
np.random.seed(42)
data = {
'Heures_Etude': np.random.randint(5, 30, 50),
'Note_Examen': np.random.randint(40, 100, 50),
'Genre': np.random.choice(['Homme', 'Femme'], 50)
}
df_etudiants = pd.DataFrame(data)
# 1. Histogramme de Note_Examen avec KDE
plt.figure(figsize=(8, 5))
sns.histplot(df_etudiants['Note_Examen'], kde=True, color='skyblue')
plt.title("Distribution de la Note d'Examen avec KDE")
plt.xlabel("Note à l'Examen")
plt.ylabel("Fréquence")
plt.show()
# 2. Boxplot de Note_Examen par Genre
plt.figure(figsize=(8, 5))
sns.boxplot(x='Genre', y='Note_Examen', data=df_etudiants, palette='viridis')
plt.title("Notes d'Examen par Genre")
plt.xlabel("Genre")
plt.ylabel("Note à l'Examen")
plt.show()
```
> [!tip] Avantages de Seaborn
> Seaborn est construit sur Matplotlib et offre une interface de haut niveau pour créer des graphiques statistiques attrayants et informatifs.
> * **Simplicité :** Pour des graphiques statistiques complexes (comme un histogramme avec KDE ou un boxplot regroupé), Seaborn nécessite souvent moins de lignes de code que Matplotlib.
> * **Esthétique par défaut :** Les styles par défaut de Seaborn sont généralement plus agréables visuellement et plus adaptés aux publications scientifiques.
> * **Intégration Pandas :** Seaborn est conçu pour fonctionner nativement avec les DataFrames Pandas, ce qui simplifie le mappage des colonnes aux axes ou aux propriétés visuelles (couleur, taille, etc.).
> * **Fonctionnalités statistiques :** Il intègre des fonctionnalités statistiques directement dans les graphiques (ex: l'estimation de densité de noyau (KDE) dans `histplot`, les intervalles de confiance dans `regplot`).
## Correction Exercice 4 : Visualisation Interactive avec Plotly Express
```python
import pandas as pd
import numpy as np
import plotly.express as px
# Création du DataFrame (comme dans l'énoncé)
np.random.seed(42)
data = {
'Heures_Etude': np.random.randint(5, 30, 50),
'Note_Examen': np.random.randint(40, 100, 50),
'Genre': np.random.choice(['Homme', 'Femme'], 50)
}
df_etudiants = pd.DataFrame(data)
# 1. Créez un nuage de points interactif
fig = px.scatter(df_etudiants,
x='Heures_Etude',
y='Note_Examen',
color='Genre', # Coloration par genre
title="Performance des Étudiants par Genre",
labels={'Heures_Etude': 'Heures d\'Étude par Semaine', 'Note_Examen': 'Note à l\'Examen (sur 100)'},
hover_name='Genre' # Informations affichées au survol
)
# 2. Affichez le graphique
fig.show()
```
> [!tip] Avantage clé de Plotly
> L'avantage clé de `plotly` (et `plotly.express`) est son **interactivité native**. Contrairement aux graphiques statiques de Matplotlib et Seaborn, les graphiques Plotly permettent aux utilisateurs de :
> * Zoomer et dézoomer.
> * Faire un panoramique.
> * Afficher des informations détaillées au survol (tooltips).
> * Activer/désactiver des traces de données dans la légende.
> Cette interactivité est cruciale pour l'exploration de données, la découverte de détails spécifiques et la présentation à des publics qui souhaitent interagir avec les données sans avoir à modifier le code.
## Correction Exercice 5 : Analyse Exploratoire Multivariée avec Matplotlib et Seaborn
```python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np # Pour np.round
iris = sns.load_dataset('iris')
# 1. Distribution des longueurs de pétales par espèce
fig, axes = plt.subplots(1, 3, figsize=(15, 5), sharey=True) # sharey=True pour avoir la même échelle Y
for i, species_name in enumerate(iris['species'].unique()):
axes[i].hist(iris[iris['species'] == species_name]['petal_length'], bins=10, edgecolor='black', alpha=0.7)
axes[i].set_title(f'Distribution de Petal Length pour {species_name}')
axes[i].set_xlabel('Petal Length (cm)')
if i == 0: # Seulement le premier sous-graphique a un label Y
axes[i].set_ylabel('Fréquence')
plt.tight_layout() # Ajuste automatiquement les paramètres des sous-graphiques
plt.show()
# 2. Relation entre longueur et largeur de sépales par espèce
plt.figure(figsize=(10, 7))
sns.scatterplot(x='sepal_length', y='sepal_width', hue='species', data=iris, s=100, alpha=0.8)
plt.title('Relation entre Longueur et Largeur de Sépales par Espèce')
plt.xlabel('Longueur du Sépale (cm)')
plt.ylabel('Largeur du Sépale (cm)')
plt.legend(title='Espèce')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()
# 3. Analyse des corrélations
correlation_matrix = iris.drop(columns=['species']).corr() # Exclure la colonne 'species' car non numérique
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f", linewidths=.5)
plt.title('Matrice de Corrélation des Caractéristiques Iris')
plt.show()
```
> [!note] Observations clés
>1. **Distribution des longueurs de pétales :**
>* L'espèce `setosa` a des longueurs de pétales nettement plus courtes que les autres.
>* Les espèces `versicolor` et `virginica` ont des longueurs de pétales plus longues et se chevauchent un peu, mais `virginica` tend à avoir les pétales les plus longs.
> 1. **Relation entre longueur et largeur de sépales par espèce :*** L'espèce `setosa` est bien séparée des deux autres, avec des sépales de longueur moyenne mais relativement larges.
>* `versicolor` et `virginica` se chevauchent davantage, mais `virginica` a tendance à avoir des sépales plus longs. `versicolor` se situe entre `setosa` et `virginica` en termes de longueur de sépale.
>* Ces observations suggèrent que la `species` est très bien distinguée par les caractéristiques des fleurs.
>2. **Matrice de Corrélation :**
> * Il existe une forte corrélation positive entre `petal_length` et `petal_width` (0.96).
>* `sepal_length` est également fortement corrélé avec `petal_length` (0.87) et `petal_width` (0.82).
>* `sepal_width` a une corrélation négative avec `petal_length` (-0.43) et `petal_width` (-0.37), et une faible corrélation positive avec `sepal_length` (-0.12).
>* Ces corrélations indiquent que les dimensions des pétales sont très liées, et que la longueur du sépale est également un bon indicateur de la taille générale de la fleur. La largeur du sépale semble être une caractéristique plus indépendante ou même inversément liée aux dimensions des pétales.
> [!theorem] Importance de l'EDA
> L'Analyse Exploratoire des Données (EDA) via la visualisation est fondamentale pour comprendre la structure des données, identifier les relations entre les variables, détecter les anomalies et formuler des hypothèses avant toute modélisation. Pour l'apprentissage supervisé, ces informations aident à choisir les bonnes caractéristiques (feature selection) et à comprendre la séparabilité des classes.
## Correction Exercice 6 : Détection d'Anomalies et Préparation à l'Apprentissage Supervisé
```python
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import plotly.express as px
# Création du dataset simulé (comme dans l'énoncé)
np.random.seed(42)
data = {
'Montant_Achat': np.random.normal(50, 15, 980),
'Frequence_Achats': np.random.normal(5, 2, 980)
}
df_transactions = pd.DataFrame(data)
anomalies = pd.DataFrame({
'Montant_Achat': [300, 250, 10, 5, 280],
'Frequence_Achats': [20, 18, 1, 0.5, 22]
})
df_transactions = pd.concat([df_transactions, anomalies], ignore_index=True)
df_transactions['Montant_Achat'] = df_transactions['Montant_Achat'].apply(lambda x: max(0, x))
df_transactions['Frequence_Achats'] = df_transactions['Frequence_Achats'].apply(lambda x: max(0, x)).astype(int)
# 1. Visualisation avec Seaborn
plt.figure(figsize=(10, 6))
sns.scatterplot(x='Montant_Achat', y='Frequence_Achats', data=df_transactions, alpha=0.7)
plt.title('Relation entre Montant d\'Achat et Fréquence d\'Achats (Seaborn)')
plt.xlabel('Montant d\'Achat (€)')
plt.ylabel('Fréquence d\'Achats (par mois)')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()
# 2. Visualisation interactive avec Plotly Express
fig = px.scatter(df_transactions,
x='Montant_Achat',
y='Frequence_Achats',
title='Relation entre Montant d\'Achat et Fréquence d\'Achats (Plotly)',
labels={'Montant_Achat': 'Montant d\'Achat (€)', 'Frequence_Achats': 'Fréquence d\'Achats (par mois)'},
hover_data=['Montant_Achat', 'Frequence_Achats'] # Afficher les valeurs au survol
)
fig.show()
```
> [!warning] Identification visuelle des anomalies
> Sur les deux graphiques, la grande majorité des points se regroupent dans une zone centrale (autour de 50€ pour le montant et 5 pour la fréquence). Cependant, quelques points sont très éloignés de ce groupe principal.
> * Les points avec des `Montant_Achat` très élevés (ex: 250€, 300€) et des `Frequence_Achats` élevées (ex: 18, 20, 22) sont des anomalies.
> * Les points avec des `Montant_Achat` très faibles (ex: 5€, 10€) et des `Frequence_Achats` faibles (ex: 0.5, 1) peuvent aussi être considérés comme des anomalies s'ils sont loin de la distribution normale.
> Ces points représentent des clients avec des comportements d'achat atypiques.
> [!note] Influence sur un futur modèle d'apprentissage supervisé
> Les anomalies (ou outliers) peuvent avoir un impact significatif sur les modèles d'apprentissage supervisé :
> * **Modèles sensibles aux distances (ex: K-Means, SVM, Régression Linéaire) :** Les outliers peuvent fausser le calcul des centroïdes, des frontières de décision ou des coefficients de régression, conduisant à un modèle moins performant et moins généralisable.
> * **Modèles basés sur des arbres (ex: Random Forest, Gradient Boosting) :** Moins sensibles aux outliers dans les caractéristiques, mais des outliers dans la variable cible peuvent tout de même affecter la performance.
> * **Détection d'anomalies elle-même :** Si l'objectif est de détecter des anomalies, ces points sont précisément ce que le modèle doit apprendre à identifier.
> * **Interprétabilité :** La présence d'outliers peut rendre l'interprétation des relations entre les variables plus difficile.
> [!tip] Stratégie de pré-traitement pour les anomalies
> Basé sur les pré-requis en pré-traitement :
> 1. **Identification :** Utiliser des méthodes statistiques (ex: score Z, IQR) ou des algorithmes spécifiques de détection d'anomalies (ex: Isolation Forest, One-Class SVM) en complément de la visualisation.
> 2. **Traitement :**
>* **Suppression :** Si les anomalies sont peu nombreuses et proviennent d'erreurs de mesure, elles peuvent être supprimées. Cependant, il faut être prudent car elles peuvent contenir des informations précieuses.
>* **Transformation :** Appliquer des transformations log ou racine carrée aux variables asymétriques pour réduire l'impact des valeurs extrêmes.
>* **Winsorisation/Troncation :** Remplacer les valeurs extrêmes par des seuils définis (par exemple, le 99e percentile pour les valeurs supérieures et le 1er percentile pour les valeurs inférieures).
>* **Modélisation spécifique :** Si les anomalies sont intéressantes (comme ici pour le marketing), elles peuvent être traitées comme une classe à part entière dans un modèle de classification ou utilisées pour entraîner un modèle de détection d'anomalies.
## Correction Exercice 7 : Conception d'un Tableau de Bord Simple pour le Data Mining
1. **Processus KDD pour l'analyse des ventes :**
1. **Sélection des Données :**
* **Action :** Récupérer les données de ventes de l'année écoulée, incluant `Date_Vente`, `Produit`, `Categorie_Produit`, `Montant_Vente`, `Quantite_Vendue`. Assurer l'accès aux bases de données ou fichiers CSV pertinents.
2. **Pré-traitement des Données :**
* **Action :**
* Gérer les valeurs manquantes (ex: montant de vente manquant).
* Corriger les erreurs de saisie (ex: noms de produits incohérents, dates mal formatées).
* Convertir les types de données (ex: `Date_Vente` en format datetime, `Montant_Vente` et `Quantite_Vendue` en numériques).
* Gérer les doublons.
3. **Transformation des Données :**
* **Action :**
* Créer des caractéristiques temporelles (ex: `Mois`, `Jour_Semaine`, `Saison`) à partir de `Date_Vente`.
* Calculer des agrégats (ex: `Ventes_Journalieres_Totales`, `Ventes_Par_Categorie`).
* Normaliser ou standardiser les `Montant_Vente` ou `Quantite_Vendue` si nécessaire pour certains modèles.
4. **Data Mining :**
* **Action :** Appliquer des algorithmes pour identifier des patterns. Ex:
* **Analyse de tendances :** Identifier les périodes de forte/faible vente.
* **Segmentation produit :** Regrouper les produits similaires.
* **Règles d'association :** Découvrir quels produits sont souvent achetés ensemble.
* **Prédiction :** Estimer les ventes futures.
5. **Évaluation et Interprétation des Motifs :**
* **Action :** Évaluer la pertinence des tendances, des segments ou des prédictions. Interpréter les résultats pour fournir des recommandations marketing ou opérationnelles (ex: "Les ventes de la catégorie 'Robes' augmentent en été, prévoir des stocks plus importants"). Visualiser les résultats pour une communication efficace.
2. **Visualisations Clés pour un Tableau de Bord :**
* **Visualisation 1 : Évolution des ventes totales par mois**
* **Objectif :** Identifier les tendances saisonnières et les pics de ventes sur l'année.
* **Variables :** `Date_Vente` (agrégée par mois), `Montant_Vente` (somme).
* **Bibliothèque/Graphique :** `plotly.express.line` (ou `seaborn.lineplot`).
* **Justification :** Un graphique linéaire est idéal pour montrer l'évolution d'une variable continue au fil du temps. Plotly est choisi pour son interactivité, permettant aux managers de survoler les points pour voir les chiffres exacts de chaque mois et de zoomer sur des périodes spécifiques. Seaborn serait une bonne alternative pour un graphique statique élégant.
* **Visualisation 2 : Top N Catégories de Produits par Montant de Vente**
* **Objectif :** Identifier les catégories de produits les plus rentables.
* **Variables :** `Categorie_Produit`, `Montant_Vente` (somme par catégorie).
* **Bibliothèque/Graphique :** `seaborn.barplot` (ou `matplotlib.pyplot.bar`).
* **Justification :** Un diagramme à barres est parfait pour comparer des valeurs entre différentes catégories discrètes. Seaborn offre une esthétique par défaut supérieure et facilite l'agrégation des données. C'est un graphique statique simple et direct, facile à interpréter rapidement par un comité de direction.
* **Visualisation 3 : Distribution du Montant de Vente par Produit**
* **Objectif :** Comprendre la variabilité des prix ou des paniers moyens par produit, et identifier des produits à forte ou faible valeur.
* **Variables :** `Produit`, `Montant_Vente`.
* **Bibliothèque/Graphique :** `seaborn.boxplot` ou `seaborn.violinplot`.
* **Justification :** Ces graphiques permettent de visualiser la distribution d'une variable numérique pour différentes catégories. Ils sont excellents pour identifier les médianes, les quartiles et les valeurs aberrantes pour chaque produit, offrant une vue plus nuancée que la simple somme. Utile pour les experts pour comprendre les gammes de prix.
3. **Préparation à l'apprentissage supervisé :**
Ces visualisations sont cruciales pour la préparation à l'apprentissage supervisé :
* **Feature Engineering :** Les tendances saisonnières (Visualisation 1) peuvent inspirer la création de caractéristiques temporelles (mois, saison, jour férié) pour un modèle de prédiction des ventes.
* **Sélection de Caractéristiques :** Identifier les catégories de produits les plus importantes (Visualisation 2) peut aider à se concentrer sur ces catégories pour des modèles spécifiques ou à créer des caractéristiques agrégées.
* **Détection d'Anomalies :** Des boxplots (Visualisation 3) peuvent révéler des ventes anormalement élevées ou faibles pour certains produits, qui pourraient être des erreurs de données ou des événements spéciaux à traiter avant l'entraînement d'un modèle.
* **Compréhension de la Cible :** Si la cible est `Montant_Vente` (régression), la visualisation de sa distribution aide à choisir les bonnes transformations ou les bons algorithmes. Si la cible est `Produit_Populaire` (classification), la visualisation des ventes par produit aide à définir cette popularité.