Skip to content

Commit 08598d5

Browse files
committed
visualisation donnees
1 parent 2fe873d commit 08598d5

2 files changed

Lines changed: 61 additions & 214 deletions

File tree

_quarto.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ website:
4242
text: "TP3 - Manipulation des données avec Numpy"
4343
- href: doc/tp/tp4.qmd
4444
text: "TP4 - Analyse de données avec Pandas"
45+
- href: doc/tp/tp5.qmd
46+
text: "TP5 - Visualisation des données avec Matplotlib et Seaborn"
4547
right:
4648
- href: doc/glossaire.qmd
4749
text: Glossaire

doc/tp/tp5.qmd

Lines changed: 59 additions & 214 deletions
Original file line numberDiff line numberDiff line change
@@ -12,239 +12,84 @@ number-sections: true
1212
number-depth: 3
1313
---
1414
# Visualisation des Données avec Matplotlib et Seaborn
15-
# Partie 1 : Analyse des Données Financières
1615

17-
Ce TP a pour objectif d'explorer et d'analyser les données financières de plusieurs grandes entreprises cotées en bourse : **NVIDIA, OpenAI, Amazon et Apple**. Nous allons récupérer ces données directement depuis **Yahoo Finance** et les manipuler avec **pandas**.
16+
## Exercice 1 : Courbe linéaire
17+
Tracez la courbe de la fonction $f(x) = x^2$ pour $x$ allant de 0 à 10. Utilisez 100 points pour $x$ afin d’obtenir une courbe lisse. Ajoutez un titre "Courbe parabole" et nommez les axes "x" et "f(x)".
1818

19-
---
20-
21-
## 1. Récupération et Exploration des Données
19+
## Exercice 2 : Nuage de points
20+
Générez deux listes de 50 valeurs aléatoires chacune entre 0 et 1. Affichez le nuage de points correspondant. Personnalisez les points avec une couleur et un style de votre choix.
2221

23-
### Téléchargement des données depuis Yahoo Finance
22+
## Exercice 3 : Histogramme
23+
Créez un tableau de 1000 valeurs aléatoires suivant une distribution normale de moyenne 5 et d’écart-type 2. Réalisez l’histogramme de ces données avec 30 bins et affichez un titre "Distribution normale simulée".
2424

25-
Nous allons utiliser la bibliothèque `yfinance` pour récupérer les prix historiques des actions de plusieurs entreprises technologiques.
25+
## Exercice 4 : Diagramme en barres
26+
On dispose du nombre d’élèves inscrits dans différents clubs d’une école. Créez un DataFrame avec ces données et affichez un diagramme en barres.
2627

2728
```python
2829
import pandas as pd
29-
import yfinance as yf
30-
31-
# Liste des tickers des entreprises étudiées
32-
tickers = ['NVDA', 'AAPL', 'AMZN', 'MSFT']
33-
34-
# Téléchargement des données de 2020 à 2024
35-
df = yf.download(tickers, start='2020-01-01', end='2024-01-01', group_by='ticker')
36-
37-
# Affichage des premières lignes du DataFrame
38-
print(df.head())
30+
import matplotlib.pyplot as plt
31+
32+
# Création du DataFrame
33+
df_clubs = pd.DataFrame({
34+
"Club": ["Théâtre", "Musique", "Sport", "Art"],
35+
"Nombre d'élèves": [25, 30, 15, 10]
36+
})
37+
38+
# Affichage du diagramme en barres
39+
plt.bar(df_clubs["Club"], df_clubs["Nombre d'élèves"], color='mediumseagreen')
40+
plt.xlabel("Clubs")
41+
plt.ylabel("Nombre d'élèves")
42+
plt.title("Inscriptions par club")
43+
plt.show()
3944
```
4045

41-
### Analyse exploratoire
46+
## Exercice 5 : Diagramme circulaire
47+
Reprenez les données de l’exercice précédent et représentez-les sous forme de camembert avec les pourcentages affichés.
4248

43-
📌 **Questions à traiter** :
49+
## Exercice 6 : Boxplot
50+
Simulez deux séries de 50 notes (sur 20) pour deux classes (classe A et classe B). Créez un DataFrame Pandas contenant ces données et réalisez un boxplot comparant les distributions.
4451

45-
1. **Quelles sont les colonnes disponibles dans le DataFrame ?**
46-
2. **Quel est le nombre total de lignes et de colonnes ?**
47-
3. **Y a-t-il des valeurs manquantes ? Comment les gérer ?**
52+
## Exercice 7 : Violin plot
53+
Reprenez le DataFrame de l’exercice précédent et tracez un violin plot comparatif des deux distributions.
4854

49-
---
50-
51-
## 2. Nettoyage et Préparation des Données
55+
## Exercice 8 : Pairplot (analyse multivariée)
56+
Utilisez le dataset Iris (`sns.load_dataset("iris")`). Réalisez un pairplot de l’ensemble des variables en utilisant "species" pour la couleur.
5257

53-
📌 **Questions à traiter** :
58+
## Exercice 9 : Heatmap de corrélation
59+
Toujours avec le dataset Iris, calculez la matrice de corrélation et affichez une heatmap de cette matrice avec les valeurs annotées.
5460

55-
1. **Supprimez les lignes contenant des valeurs manquantes.**
56-
2. **Définissez la colonne Date comme index du DataFrame.**
57-
3. **Vérifiez les types de données des colonnes et convertissez-les si nécessaire.**
58-
59-
---
61+
## Exercice 10 : Analyse univariée
62+
Utilisez la base de données [Credit Risk Dataset](https://www.kaggle.com/datasets/laotse/credit-risk-dataset?resource=download).
63+
- Chargez les données et affichez les premières lignes.
64+
- Faites une analyse univariée des variables `person_age`, `person_income`, et `loan_amnt` en utilisant des histogrammes et des boxplots.
65+
- Identifiez les valeurs aberrantes dans `loan_int_rate`.
6066

61-
## 3. Analyse des Tendances du Marché
67+
## Exercice 11 : Analyse bivariée
68+
- Étudiez la relation entre `person_income` et `loan_amnt` à l’aide d’un scatter plot (quanti-quanti).
69+
- Étudiez l’influence de `person_home_ownership` sur `loan_amnt` via un boxplot (quanti-quali).
70+
- Étudiez la relation entre `loan_intent` et `loan_grade` via un countplot (quali-quali).
6271

63-
### Calcul du rendement journalier
72+
## Exercice 12 : Tests statistiques en Python
73+
- Testez s’il y a une différence significative de revenu (`person_income`) entre les propriétaires et non-propriétaires (`person_home_ownership`) avec un test t de Student.
74+
- Testez si la distribution des taux d’intérêt (`loan_int_rate`) suit une loi normale.
75+
- Testez l’indépendance entre `loan_intent` et `loan_status` avec un test du chi².
76+
- Réalisez une ANOVA pour comparer le revenu (`person_income`) entre plusieurs catégories de but du prêt (`loan_intent`).
6477

65-
Le rendement journalier d'une action est donné par la formule :
78+
## Exercice 13 : Organisation en subplots
79+
Créez une figure comportant 4 subplots organisés en 2 lignes × 2 colonnes contenant :
80+
- Un graphique linéaire représentant une fonction de votre choix.
81+
- Un scatter plot illustrant une relation entre deux variables quantitatives.
82+
- Un histogramme d’une variable de votre choix.
83+
- Un camembert illustrant la répartition d’une variable catégorielle.
6684

67-
\[
68-
R_t = \frac{P_t - P_{t-1}}{P_{t-1}} \times 100
69-
\]
85+
Ajoutez un titre à chaque subplot et ajustez la disposition pour éviter le chevauchement.
7086

71-
📌 **Questions à traiter** :
72-
73-
1. **Quelle est la tendance des prix des actions pour chaque entreprise ?**
74-
2. **Quel jour chaque action a-t-elle atteint son plus haut prix ?**
75-
3. **Calculez le rendement quotidien de chaque action et affichez sa moyenne.**
76-
77-
---
78-
79-
## 4. Comparaison des Performances
80-
81-
📌 **Questions à traiter** :
82-
83-
1. **Quelle entreprise a eu la meilleure croissance sur la période analysée ?**
84-
2. **Quel est le rendement moyen mensuel de chaque action ?**
85-
3. **Comparez la volatilité des différentes actions.**
86-
87-
---
88-
89-
## Conclusion
90-
91-
- Quelle entreprise a eu la meilleure croissance sur la période ?
92-
- Quel titre a offert le rendement moyen le plus élevé ?
93-
- Quelle action était la plus volatile, indiquant un risque plus élevé ?
94-
- Discussion sur les facteurs pouvant expliquer ces résultats (ex. crise, innovations, changements dans l’industrie).
95-
96-
---
97-
98-
## Résumé des principales manipulations avec pandas
99-
100-
| Opération | Commande Pandas |
101-
|-----------|----------------|
102-
| Télécharger des données financières | `yfinance.download()` |
103-
| Afficher les colonnes disponibles | `df.columns` |
104-
| Vérifier la présence de valeurs manquantes | `df.isnull().sum()` |
105-
| Supprimer les valeurs manquantes | `df.dropna()` |
106-
| Définir un index de type datetime | `df.index = pd.to_datetime(df.index)` |
107-
| Calculer le rendement journalier | `.pct_change()` |
108-
| Calculer la volatilité | `.std()` |
109-
| Trouver la date du prix maximum | `.idxmax()` |
110-
| Agréger les données par mois | `.resample('M').mean()` |
111-
112-
---
113-
114-
## Partie 2 : Analyse du Risque de Défaut
115-
116-
Nous allons maintenant utiliser une base de données de crédit pour analyser les facteurs influençant le risque de défaut.
117-
118-
La base de données est disponible ici: https://www.kaggle.com/datasets/laotse/credit-risk-dataset?resource=download
119-
### Description des Colonnes de la Base de Données
120-
121-
| **Nom de la Colonne** | **Description** |
122-
|-----------------------------------|-----------------------------------------|
123-
| `person_age` | Âge |
124-
| `person_income` | Revenu annuel |
125-
| `person_home_ownership` | Type de propriété |
126-
| `person_emp_length` | Ancienneté professionnelle (années) |
127-
| `loan_intent` | But du prêt |
128-
| `loan_grade` | Grade du prêt |
129-
| `loan_amnt` | Montant du prêt |
130-
| `loan_int_rate` | Taux d'intérêt |
131-
| `loan_status` | Statut du prêt (0: non défaut, 1: défaut) |
132-
| `loan_percent_income` | Pourcentage du revenu |
133-
| `cb_person_default_on_file` | Historique de défaut |
134-
| `cb_person_cred_hist_length` | Longueur de l'historique de crédit |
135-
136-
### 1. Chargement et Exploration des Données
137-
138-
```python
139-
df_credit = pd.read_csv('credit_risk_data.csv')
140-
print(df_credit.head())
141-
df_credit.info()
142-
df_credit.describe()
143-
```
87+
## Exercice 14 : Tests statistiques avancés
88+
- Effectuez un test de corrélation de Pearson et de Spearman entre `person_income` et `loan_amnt` (quanti-quanti).
89+
- Réalisez un test du chi² pour tester l’indépendance entre `cb_person_default_on_file` et `loan_status` (quali-quali).
90+
- Effectuez une comparaison de moyennes (`t-test indépendant`) entre `loan_int_rate` pour les individus ayant un historique de défaut (`cb_person_default_on_file`) et ceux qui n’en ont pas.
91+
- Effectuez une ANOVA pour comparer `loan_amnt` entre plusieurs catégories (`loan_grade`).
14492

145-
📌 **Questions** :
146-
1. Quelles sont les variables disponibles pour l’analyse du risque de défaut ?
147-
2. Quelle est la répartition des clients en défaut et non en défaut ?
148-
3. Identifiez les valeurs manquantes et proposez une méthode de traitement.
93+
**Bonus** : Expérimentez avec d'autres types de graphiques et tests statistiques pour approfondir l'analyse.
14994

150-
### 2. Nettoyage et Préparation des Données
151-
152-
📌 **Questions** :
153-
1. Convertissez les variables catégoriques en variables numériques.
154-
2. Séparez le dataset en deux groupes : clients en défaut et non en défaut.
155-
156-
### 3. Analyse des Facteurs de Risque
157-
158-
📌 **Questions** :
159-
Dans cette section, nous allons explorer les facteurs influençant le risque de défaut en manipulant **pandas** et en réalisant des analyses numériques.
160-
161-
## Objectifs
162-
- Manipuler des **DataFrames pandas** pour explorer les relations entre les variables.
163-
- Utiliser des statistiques descriptives et des mesures de corrélation.
164-
- Comprendre comment les facteurs influencent le risque de défaut et interpréter les résultats.
165-
166-
## Questions et Analyses
167-
168-
### 1. Impact du revenu annuel sur le risque de défaut
169-
170-
**Analyse numérique**
171-
- Afficher les statistiques descriptives du revenu annuel en fonction du statut de défaut.
172-
- Comparer les moyennes et médianes des revenus des clients en défaut et non en défaut.
173-
- Calculer l'écart-type et la variance du revenu annuel pour chaque groupe.
174-
175-
**Étapes**
176-
1. Charger les données dans un DataFrame pandas.
177-
2. Utiliser `.describe()` pour obtenir des statistiques globales sur le revenu annuel.
178-
3. Utiliser `.groupby('Défaut')` et `.agg(['mean', 'median', 'std', 'var'])` pour comparer les groupes.
179-
4. Interpréter les résultats et voir si une tendance se dégage.
180-
181-
---
182-
183-
### 2. Influence de l’historique des paiements sur le risque de défaut
184-
185-
**Analyse numérique**
186-
- Calculer le nombre moyen de paiements en retard pour chaque statut de défaut.
187-
- Analyser la médiane et l'écart-type du nombre de paiements en retard.
188-
- Déterminer si les clients en défaut ont un historique de paiements significativement différent des autres.
189-
190-
**Étapes**
191-
1. Utiliser `.groupby('Défaut')['Nb_Paiements_Retard'].agg(['mean', 'median', 'std'])`.
192-
2. Comparer les valeurs moyennes et médianes pour identifier les différences entre les groupes.
193-
3. Vérifier si la dispersion des retards de paiement est plus élevée chez les clients en défaut.
194-
195-
---
196-
197-
### 3. Identification des facteurs les plus corrélés au risque de défaut
198-
199-
**Analyse numérique**
200-
- Calculer la matrice de corrélation entre les variables.
201-
- Identifier les trois facteurs les plus corrélés avec le risque de défaut.
202-
- Vérifier si ces corrélations sont significatives.
203-
204-
**Étapes**
205-
1. Utiliser `.corr()` pour calculer la matrice de corrélation du DataFrame.
206-
2. Extraire les valeurs de corrélation associées à la colonne "Défaut".
207-
3. Trier ces valeurs par ordre décroissant et sélectionner les trois variables les plus influentes.
208-
4. Interpréter les résultats et vérifier si ces facteurs sont cohérents avec les analyses précédentes.
209-
210-
### Synthèse
211-
Dans cette section, nous allons approfondir l’étude des facteurs influençant le risque de défaut en réalisant des analyses numériques sur la répartition des âges et l'impact du statut d’emploi.
212-
213-
## Objectifs
214-
- Analyser la distribution des âges des clients à l'aide de statistiques descriptives.
215-
- Examiner l'influence du statut d'emploi sur le risque de défaut à travers des mesures numériques.
216-
- Synthétiser les résultats obtenus et proposer des interprétations.
217-
218-
## Questions et Analyses
219-
220-
### Analyse de la distribution des âges des clients
221-
222-
**Analyse numérique**
223-
- Calculer les statistiques descriptives générales sur l'âge des clients.
224-
- Identifier l'âge moyen, la médiane, l'écart-type et les valeurs minimales/maximales.
225-
- Déterminer s'il y a des valeurs aberrantes en comparant l’écart interquartile.
226-
227-
**Étapes**
228-
1. Utiliser `.describe()` sur la colonne **Âge** pour obtenir les principales statistiques.
229-
2. Vérifier les bornes des quartiles avec `.quantile([0.25, 0.5, 0.75])`.
230-
3. Déterminer les valeurs aberrantes potentielles en utilisant la règle des **1,5 IQR** (Interquartile Range).
231-
4. Comparer ces statistiques avec celles d’autres variables pour voir si certaines tranches d’âge sont plus représentées parmi les clients en défaut.
232-
233-
---
234-
235-
### Influence du statut d’emploi sur le risque de défaut
236-
237-
**Analyse numérique**
238-
- Compter le nombre de clients par catégorie de statut d'emploi.
239-
- Calculer la proportion de clients en défaut dans chaque catégorie de statut d'emploi.
240-
- Identifier si certaines catégories ont un taux de défaut significativement plus élevé.
241-
242-
**Étapes**
243-
1. Utiliser `.value_counts()` sur la colonne **Statut_Emploi** pour connaître la répartition des clients par catégorie.
244-
2. Grouper les données par **Statut_Emploi** et calculer le **taux de défaut** dans chaque groupe avec `.groupby('Statut_Emploi')['Défaut'].mean()`.
245-
3. Comparer ces taux et identifier les catégories ayant une probabilité plus élevée de défaut.
246-
4. Interpréter les résultats en lien avec les analyses précédentes (ex. une catégorie d’emploi avec des revenus plus faibles pourrait avoir un taux de défaut plus élevé).
247-
248-
249-
---
25095

0 commit comments

Comments
 (0)