Compare commits

...

6 Commits

Author SHA1 Message Date
af055bc176 End of TP1 2026-02-09 12:11:31 +01:00
cd13946041 Edit readme.md file 2026-02-09 11:54:33 +01:00
5b44bdcf1b Rename Time Series directory 2026-02-09 11:38:30 +01:00
d12efdede5 add coding agent description files 2026-02-09 11:36:41 +01:00
80f6ec8517 add lintr file 2026-02-09 11:36:30 +01:00
746f4fbc78 Add TP1 of time series 2026-02-09 11:36:24 +01:00
6 changed files with 672 additions and 49 deletions

83
.github/copilot-instructions.md vendored Normal file
View File

@@ -0,0 +1,83 @@
# Copilot Instructions for ArtStudies
Collection de travaux académiques en mathématiques (L3 → M2) utilisant **Python** et **R**.
## Architecture du Projet
```
L3/, M1/, M2/ # Niveaux académiques (Licence 3, Master 1 & 2)
└── <Nom du Cours>/ # Ex: "Deep Learning", "Linear Models"
├── TP{n}/ # Travaux pratiques numérotés
├── Project/ # Projets finaux
└── data/ # Données locales au TP
```
## Python - Conventions
- **Gestionnaire de packages** : `uv` (voir `pyproject.toml` racine)
- **Linter** : Ruff avec règles strictes (`select = ["ALL"]`)
- **Format des imports** : sections personnalisées définies dans `pyproject.toml` :
```python
# standard-library → third-party → data-science → ml → first-party
import numpy as np # data-science group
import pandas as pd
from sklearn import ... # ml group
```
- **Notebooks** : structures Jupyter avec cellules markdown descriptives + code
- **Reproductibilité** : utiliser `np.random.seed(42)` pour fixer les seeds
### Sous-projets avec dépendances isolées
Certains projets ont leur propre `pyproject.toml` (ex: `M2/Reinforcement Learning/project/`). Utiliser `uv` dans ces dossiers pour installer les dépendances spécifiques.
## R - Conventions
- **Projets R** : fichiers `.Rproj` dans chaque dossier TP/Projet
- **Gestion packages** : `renv` pour l'isolation (voir `.Rprofile`)
- **Script d'init** : `M2/Data Visualisation/init.R` installe les packages courants
- **Documents** : RMarkdown (`.Rmd`) pour les rapports reproductibles
- **Linting** : utiliser `lintr` pour l'analyse statique et `styler` pour le formatage (config: `.lintr` à la racine)
```r
# Vérifier le style d'un fichier
lintr::lint("script.R")
# Formater automatiquement
styler::style_file("script.R")
```
## SQL (M2/SQL)
Environnement Docker avec MySQL :
```bash
# Démarrer le conteneur
docker compose -f M2/SQL/docker-compose.yml up -d
# Exécuter les TPs via Make
make tp1 # Exécute scripts/TP1.sql
make tp2 # Exécute scripts/TP2.sql
make project # Exécute scripts/DANJOU_Arthur.sql
```
Logs générés dans `M2/SQL/logs/`.
## Nommage des Fichiers
| Type | Convention | Exemple |
|------|------------|---------|
| TP numérotés | `TP{n}.ipynb`, `TP{n}.Rmd` | `TP1.ipynb`, `TP2.Rmd` |
| Projets personnels | `DANJOU_Arthur.*` | `DANJOU_Arthur.sql` |
| Labs thématiques | Nom descriptif complet | `Lab 4 - Monte Carlo Control in Blackjack game.ipynb` |
## Stack Technique Principale
- **Data Science** : numpy, pandas, scipy, matplotlib, seaborn, plotly
- **ML** : scikit-learn, xgboost, catboost, tensorflow/keras, shap
- **LLM/RAG** : langchain, sentence-transformers, faiss-cpu
- **Géospatial** : geopandas, rasterio
- **R** : tidyverse, ggplot2, FactoMineR, caret, glmnet
## Bonnes Pratiques
1. Toujours vérifier si un `pyproject.toml` local existe avant d'ajouter des dépendances
2. Les notebooks contiennent souvent du texte explicatif en **français**
3. Utiliser Plotly pour les visualisations interactives, Matplotlib/Seaborn pour les exports
4. Les données volumineuses ne sont pas versionnées - télécharger via le code du notebook si nécessaire

39
.lintr Normal file
View File

@@ -0,0 +1,39 @@
linters: linters_with_defaults(
# Longueur de ligne - 120 caractères pour le code, 80 pour le texte
line_length_linter(120),
# Noms d'objets : snake_case recommandé, camelCase autorisé pour les packages
object_name_linter(styles = c("snake_case")),
# Interdire le code commenté (à la place, supprimer ou utiliser roxygen)
commented_code_linter(),
# Complexity cyclomatique - alerte au-dessus de 10
cyclocomp_linter(max = 10)
)
# Options de linters supplémentaires
objects:
# Éviter les noms trop courts (sauf dans les fonctions anonymes)
- exclude: "(^_.+$)|(^i$)|(^j$)|(^k$)"
linters: ["object_name_linter"]
# Autoriser les noms courts pour les boucles imbriquées
- exclude: ".*\\.funs$"
linters: ["object_name_linter"]
# Exclusions : répertoires virtuels ou générés automatiquement
exclusions: list(
# Dependencies renv (gérées séparément)
"renv/",
"packrat/",
# Données brutes (souvent des fichiers génériques)
"data/",
# Fichiers de configuration de projets R
"\\.Rproj\\.",
# Cache R
"\\.Rhistory",
"\\.RData",
"\\.Rprofile\\.exprs"
)
encoding: "UTF-8"
# Spécificité pour ce projet : autoriser le français dans les commentaires
# et les noms d'objets pour les projets académiques

67
CLAUDE.md Normal file
View File

@@ -0,0 +1,67 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Quick Commands
### Python Projects
- **Install dependencies**: `uv sync` (root) or `uv sync` in a subdirectory with its own `pyproject.toml`
- **Run linter**: `ruff check .` (includes all files via `extend-include`)
- **Auto-fix**: `ruff check . --fix`
- **Format imports**: `ruff format .`
### R Projects
- **Load project**: RStudio/.Rprofile uses `renv` for isolation
- **Check style**: `lintr::lint("script.R")`
- **Format code**: `styler::style_file("script.R")`
### SQL (M2/SQL)
```bash
docker compose -f M2/SQL/docker-compose.yml up -d
make tp1 # Execute TP1.sql
make tp2 # Execute TP2.sql
make tp3 # Execute TP3.sql
make project # Execute DANJOU_Arthur.sql
```
## Project Structure
```
L3/ # Bachelor's degree (3rd year)
M1/ # Master's degree (1st year)
M2/ # Master's degree (2nd year)
└── <Course>/ # e.g., "Deep Learning", "Data Visualisation"
├── TP{n}/ # Practical work (numbered)
├── Project/ # Final project
└── data/ # Course-specific data
```
## Python Conventions
- **Package manager**: `uv` (workspace configured at root)
- **Linting**: Ruff with strict rules (`select = ["ALL"]`)
- **Import ordering**: Custom sections in `pyproject.toml`:
- `data-science`: numpy, pandas, scipy, matplotlib, seaborn, plotly
- `ml`: tensorflow, keras, torch, sklearn, xgboost, catboost, shap
- **Reproducibility**: Use `np.random.seed(42)` for random seeds
- **Notebooks**: Jupyter with descriptive markdown cells
## R Conventions
- **Package management**: `renv` (autoloading via `.Rprofile`)
- **Linting**: `lintr` configured in `.lintr`
- **Documents**: RMarkdown (`.Rmd`) for reproducible reports
- **Visualization**: ggplot2, plotly, FactoMineR
## Key Technologies
- **Data Science**: numpy, pandas, scipy, matplotlib, seaborn, plotly, geopandas
- **Machine Learning**: scikit-learn, xgboost, catboost, tensorflow, keras, shap
- **LLM/RAG**: langchain, sentence-transformers, faiss-cpu
- **R**: tidyverse, ggplot2, FactoMineR, caret, glmnet, RShiny
## Notes
- Some subprojects (e.g., `M2/Reinforcement Learning/project/`) have isolated `pyproject.toml` files
- Large datasets are not versioned—download via notebook code when needed
- Course materials and documentation are primarily in French

291
M2/Time Series/TD1.Rmd Normal file
View File

@@ -0,0 +1,291 @@
# Import des données
```{r}
library(tseries)
data = read.csv2('./data/TD1.csv')
data_series = ts(data)
```
# Graphique
```{r}
plot(
data_series,
main = "Exemple de série temporelle",
ylab = "Valeurs",
xlab = "Temps",
col = "blue",
type = "o"
)
acf(data, main = "Fonction d'Autocorrélation (ACF)")
```
## 1. Analyse de la série temporelle (Time Plot)
- Tendance : Il y a une tendance linéaire croissante extrêmement claire et forte sur toute la période (de `t=0` à `t=100`). La moyenne de la série augmente de façon constante, ce qui confirme une non-stationnarité pure.
- Saisonnalité : Nous observons des oscillations très régulières en forme de "dents de scie". La répétition systématique de ces motifs indique une composante saisonnière forte.
- Variabilité : L'amplitude des oscillations semble ici rester constante par rapport à la tendance (modèle additif).
## 2. Analyse de la Fonction d'Autocorrélation (ACF)
- Profil de Non-Stationnarité : Nous observons une décroissance très lente et linéaire des pics. Même au lag 20, la corrélation reste très élevée (environ `0.4`), bien au-dessus de la zone de significativité bleue. C'est la signature typique d'une série avec une tendance non traitée.
- Saisonnalité de période 2 : les retards pairs (2,4,6...) sont systématiquement plus élevés que les retards impairs (1,3,5...).
- Le pic au lag 2 est particulièrement fort, presque au même niveau que le lag 1.
- Cela confirme que la valeur à l'instant `t` est très fortement corrélée à la valeur à `t2`.
# Lag plot
```{r}
lag.plot(
data_series,
lags = 4,
do.lines = FALSE,
main = "Lag-Plot"
)
```
## 1. Analyse par retard (Lag)
- Lag 2 et Lag 4 (Forte corrélation positive) : Les nuages de points pour les retards pairs sont extrêmement resserrés autour de la première bissectrice (la ligne pointillée). Cela signifie que la valeur à l'instant `t` est presque parfaitement prédite par la valeur à `t2` et `t4`. Cela confirme la saisonnalité de péridoe `2`.
- Lag 1 et Lag 3 (Dispersion organisée) : Pour les retards impairs, nous observons deux "nuages" ou une dispersion plus large. Cela traduit l'oscillation "haut-bas" : une valeur haute est suivie d'une valeur basse, créant cet écart par rapport à la ligne d'identité.
## 2. Relation avec la tendance
L'alignement global de tous les lags le long d'une diagonale ascendante confirme la tendance déterministe. Même avec le "bruit" saisonnier, la valeur globale `Y_t` augmente proportionnellement à `Y_{tk}`. C'est ce qui expliquait la p-value de `0.581` à l'ADF : la série ne revient jamais vers une moyenne centrale, elle "s'échappe" vers le haut.
# Saisonnalité
```{r}
kpss_test_result <- kpss.test(data_series)
print(kpss_test_result)
adf_test_result <- adf.test(data_series)
print(adf_test_result)
```
## 1. Analyse du test ADF (Augmented Dickey-Fuller)
- Hypothèse nulle (`H0`) : La série est non stationnaire.
- Résultat : La p-value est de `0.581`.
- Interprétation : Étant donné que la p-value est très supérieure au seuil classique de `0.05`, nous conservons `H0`. La série est donc considérée comme non stationnaire par l'ADF.
## 2. Analyse du test KPSS
- Hypothèse nulle (`H0`) : La série est stationnaire.
- Résultat : La statistique de test est très élevée (`2.0282`) et la p-value est de `0.01`.
- Interprétation : La p-value est inférieure à `0.05`, nous rejetons donc l'hypothèse de stationnarité. Le test KPSS confirme que la série n'est pas stationnaire.
## Conclusion croisée
| Test | Hypothèse Nulle (`H0`) | Résultat | Conclusion statistique |
|------------------|------------------|------------------|------------------|
| ADF | Non stationnaire | Non rejetée (`p=0.58`) | La série n'est pas stationnaire |
| KPS | Stationnaire | Rejetée (`p=0.01`) | La série n'est pas stationnaire. |
# Correction de la saisonnalité
## Lag 1
```{r}
serie_diff = diff(data_series)
plot(serie_diff, type = "l")
acf(serie_diff, main = "ACF de la série différenciée lag 1")
```
### Pourquoi la différenciation d=1 a "échoué" ?
Le graphique ACF de la série différenciée montre des pics à `-0.9` (lag 1) et `+0.85` (lag 2). Le Lag-Plot explique pourquoi : en faisant `Y_tY_{t1}`, la pente est supprimée, mais l'oscillation `S=2` est transformée en une alternance de signes massive.
**Verdict final** : Pour modéliser proprement cette série, nous ne pouvons pas nous contenter d'un modèle ARIMA classique. Nous devons utiliser la différence saisonnière : diff(data_series, lag = 2).
## Lag 2
```{r}
serie_diff_2 <- diff(data_series, lag = 2)
plot(serie_diff_2, type = "l")
acf(serie_diff_2, main = "ACF de la série différenciée lag 2")
```
### 1. Disparition de la non-stationnarité
- Observation : Contrairement aux ACF précédentes qui affichaient des pics massifs et persistants, celle-ci chute immédiatement vers zéro dès le premier retard.
- Conclusion : La série résultante est désormais stationnaire. La moyenne et la variance sont stabilisées.
### 2. Élimination de la structure saisonnière `S=2`
- Observation : L'alternance parfaite "haut-bas" (pics à `+0.8`/`-0.9`) que nous voyions après la différenciation classique (`diff(x)`) a totalement disparu.
- Interprétation : En appliquant `diff(x, lag = 2)`, nous avons retiré à chaque point sa valeur correspondante au cycle précédent. Cela a "neutralisé" l'oscillation déterministe de période 2.
### 3. Identification des résidus (Bruit Blanc ?)
- Pic au Lag 2 : Nous observons un pic négatif significatif au lag 2. Cela suggère qu'il reste une petite dépendance de type `MA(1)` saisonnier ou `MA(2)`.
- Reste du graphique : Pour tous les autres retards, les pics sont situés à l'intérieur des bandes de confiance bleues.
- Conclusion : La série est maintenant très proche d'un bruit blanc. Les résidus sont quasi-indépendants, ce qui est l'objectif ultime avant de valider un modèle de prévision.
## Moyenne
```{r}
t.max = length(data_series)
serie_moy = ts((data_series[1:(t.max - 1)] + data_series[2:t.max]) / 2)
plot(serie_moy, type = "l")
acf(serie_moy, main = "ACF de la série moyenne")
```
### 1. Analyse de la série temporelle (serie_moy)
- Lissage de la saisonnalité : L'effet le plus frappant est la disparition presque totale des dents de scie (l'oscillation "haut-bas" de période 2). En moyennant deux points consécutifs, nous avons annulé les variations saisonnières de court terme pour ne laisser apparaître que la composante de tendance.
- Allure de la tendance : La série montre une croissance qui n'est pas strictement linéaire mais légèrement curviligne (quadratique). On observe une accélération de la pente à mesure que le temps progresse.
- Stationnarité : La série n'est toujours pas stationnaire. La moyenne augmente de façon continue avec le temps (environ de 100 à 1100).
### 2. Analyse de l'ACF de la série moyenne
- Disparition de l'alternance : On ne voit plus l'oscillation caractéristique (pics positifs/négatifs) tous les deux lags. Cela prouve mathématiquement que la saisonnalité de période 2 a été filtrée avec succès par la moyenne mobile.
- Profil de "Trend" pur : L'ACF décroît de manière très lente, régulière et presque linéaire. C'est la signature typique d'une série dont la seule source de non-stationnarité restante est la tendance.
- Persistance : Même au lag 15, l'autocorrélation reste très élevée (\>0.5). Cela confirme que la série a une "mémoire" longue induite par sa dérive déterministe.
## Synthèse des corrections
| Caractéristique | Série Brute | Différenciation Lag 1 (`diff(x)`) | Différenciation Lag 2 (`diff(x, 2)`) | Série Moyenne (`serie_moy`) |
|:--------------|:--------------|:--------------|:--------------|:--------------|
| **Allure Visuelle** | Tendance ascendante forte + oscillations en "dents de scie". | Moyenne stabilisée mais oscillations "haut-bas" amplifiées. | Série stationnaire, ressemble à un bruit blanc avec peu de structure. | Courbe lisse montrant la tendance (sans les oscillations). |
| **Stationnarité** | **Non** (moyenne mobile dans le temps). | **Partielle** (moyenne stable mais forte dépendance cyclique). | **Oui** (la plus proche de la stationnarité complète). | **Non** (la tendance est toujours présente). |
| **Profil ACF** | Décroissance linéaire très lente. | Alternance parfaite de pics positifs/négatifs ($S=2$). | Chute immédiate vers 0 après le lag 2. | Décroissance lisse et très lente. |
| **Saisonnalité** | Présente (période 2) mais masquée par la tendance. | **Exacerbée** : l'alternance devient la structure dominante. | **Éliminée** : le cycle de période 2 est neutralisé. | **Filtrée** : les variations de court terme sont lissées. |
| **Usage Typique** | Observation initiale des données. | Suppression d'une tendance linéaire simple. | Traitement d'une tendance + saisonnalité de période 2. | Isolation de la tendance pour une régression polynomiale. |
# Régression polynomiale
```{r}
n <- length(data_series)
time <- 1:n
data_deseas <- (data_series[2:n] + data_series[1:(n - 1)]) / 2
time_deseas <- time[2:n]
model_poly <- lm(data_deseas ~ time_deseas + I(time_deseas^2))
summary(model_poly)
plot(
time,
data_series,
type = "l",
col = "gray",
lty = 2,
main = "Ajustement Polynomial (d=2)",
xlab = "Temps",
ylab = "Valeurs"
)
lines(time_deseas, data_deseas, col = "blue", lwd = 2)
lines(time_deseas, fitted(model_poly), col = "red", lwd = 2)
plot(
time_deseas,
resid(model_poly),
type = "l",
col = "darkred",
main = "Résidus du modèle",
xlab = "Temps",
ylab = "Résidus"
)
abline(h = 0, col = "black", lty = 2)
```
# Résidus
```{r}
residus <- residuals(model_poly)
plot(
time_deseas,
residus,
type = "l",
col = "darkgreen",
main = "Série des résidus",
xlab = "Temps",
ylab = "Résidus"
)
abline(h = 0, col = "red", lty = 2)
acf(residus, main = "ACF des résidus")
```
## Série des résidus
Ce graphique représente l'erreur de prédiction (`e_t=y_ty^t`) au cours du temps.
- Comportement : La série oscille de manière erratique autour de la ligne horizontale rouge pointillée (l'ordonnée 0).
- Moyenne : Le fait que les résidus soient centrés sur zéro indique que votre régression polynomiale de degré 2 a correctement capturé la tendance globale de la série.
- Variance : L'amplitude des fluctuations semble rester dans un tunnel constant (approximativement entre `-60` et `+70`), ce qui suggère une certaine stabilité de la variance (homoscédasticité).
- Saisonnalité : On ne distingue plus le motif en "dents de scie" très marqué de la série brute, ce qui confirme l'efficacité du filtrage par la série moyenne.
## ACF des résidus
Ce graphique (la fonction d'autocorrélation) mesure la corrélation des résidus avec leurs propres valeurs passées.
- Pic au Lag 0 : Il est toujours égal à `1.0` (corrélation parfaite d'une valeur avec elle-même), on ne l'interprète pas pour le diagnostic.
- Le pic au Lag 1 : On observe une barre verticale qui dépasse nettement la ligne pointillée bleue supérieure. Cela indique une autocorrélation positive significative au premier retard.
- Signification statistique : Les lignes pointillées bleues représentent l'intervalle de confiance à 95 % pour un bruit blanc. Puisque le pic au retard 1 sort de cet intervalle, vos résidus ne sont pas encore totalement indépendants (ce n'est pas encore un "bruit blanc" pur).
- Lags supérieurs : Au-delà du premier retard, les autres pics (2, 3, etc.) rentrent dans la zone de non-significativité, ce qui montre que la dépendance est à très court terme.
# Stationnarité des résidus
```{r}
kpss_test_result <- kpss.test(residus)
print(kpss_test_result)
adf_test_result <- adf.test(residus)
print(adf_test_result)
```
## 1. Test ADF (Augmented Dickey-Fuller)
- Hypothèse nulle (`H0`) : La série est non stationnaire.
- Résultat : La p-value est de `0.01` (indiquée comme inférieure à la valeur affichée par le warning).
- Interprétation : On rejette `H0`. Il y a des preuves statistiques fortes que la série des résidus est stationnaire.
## 2. Test KPSS
- Hypothèse nulle (`H0`) : La série est stationnaire.
- Résultat : La p-value est de `0.1`.
- Interprétation : On ne rejette pas `H0`. Le test conclut que la série est stationnaire.
## Synthèse
| Test | Hypothèse nulle ($H_0$) | p-value | Décision |
| :--- | :--- | :--- | :--- |
| **ADF** | Non stationnaire | 0.01 | Rejet de $H_0$ |
| **KPSS** | Stationnaire | 0.10 | Échec du rejet de $H_0$ |

101
M2/Time Series/data/TD1.csv Normal file
View File

@@ -0,0 +1,101 @@
"x"
-29,2226905371166
213,582166211104
-34,8814306205024
289,36404010689
28,975388590768
174,576580794099
43,2714526214243
259,316235256461
54,8890675826746
214,730580642182
109,689058422542
257,892161820572
11,8379709729098
136,865005641125
108,746545907155
255,353319549238
62,0904868450527
315,591810534265
115,161059754904
309,695066060875
132,048868580411
331,506815036553
102,62824916826
206,132415206831
143,491287394736
316,79356302355
119,110224664734
260,862380805036
118,192497244569
370,897078009985
226,033977576452
361,26061363285
194,283580577968
380,909747970855
123,64702215857
380,850271835016
191,185502314483
417,434330164441
285,101268599194
478,158787422877
241,873820187321
447,731915993175
305,748168770237
509,433159933683
258,062215272524
468,225242151894
333,129098106841
564,826646225771
332,482689392489
594,055386322711
382,005294018353
543,798680337462
403,955984571221
543,13184519596
484,151185085052
724,619994925293
420,538926176675
600,193268684174
494,585981372121
673,247269805959
614,180888025239
706,437999863342
557,386968122539
739,000107939033
515,33633955588
777,039614975717
492,652068555448
871,677743078144
621,762666910595
938,630583518108
669,875476444983
826,902678453909
709,436317674453
848,895118417787
649,818329988045
944,172311775873
724,735406339078
964,455267581581
785,817066207583
970,523952690596
789,666563359075
1029,64106924381
913,80434982866
997,421659978512
922,197309381421
1128,24751856068
984,054991863818
1135,19080381829
988,600940495814
1203,35493953861
982,973998450418
1290,79339029916
1108,92013078475
1306,61068247575
1171,84167272704
1341,52432127827
1071,0703895771
1327,73672928816
1116,86936925508
1376,32996817803
1 x
2 -29 2226905371166
3 213 582166211104
4 -34 8814306205024
5 289 36404010689
6 28 975388590768
7 174 576580794099
8 43 2714526214243
9 259 316235256461
10 54 8890675826746
11 214 730580642182
12 109 689058422542
13 257 892161820572
14 11 8379709729098
15 136 865005641125
16 108 746545907155
17 255 353319549238
18 62 0904868450527
19 315 591810534265
20 115 161059754904
21 309 695066060875
22 132 048868580411
23 331 506815036553
24 102 62824916826
25 206 132415206831
26 143 491287394736
27 316 79356302355
28 119 110224664734
29 260 862380805036
30 118 192497244569
31 370 897078009985
32 226 033977576452
33 361 26061363285
34 194 283580577968
35 380 909747970855
36 123 64702215857
37 380 850271835016
38 191 185502314483
39 417 434330164441
40 285 101268599194
41 478 158787422877
42 241 873820187321
43 447 731915993175
44 305 748168770237
45 509 433159933683
46 258 062215272524
47 468 225242151894
48 333 129098106841
49 564 826646225771
50 332 482689392489
51 594 055386322711
52 382 005294018353
53 543 798680337462
54 403 955984571221
55 543 13184519596
56 484 151185085052
57 724 619994925293
58 420 538926176675
59 600 193268684174
60 494 585981372121
61 673 247269805959
62 614 180888025239
63 706 437999863342
64 557 386968122539
65 739 000107939033
66 515 33633955588
67 777 039614975717
68 492 652068555448
69 871 677743078144
70 621 762666910595
71 938 630583518108
72 669 875476444983
73 826 902678453909
74 709 436317674453
75 848 895118417787
76 649 818329988045
77 944 172311775873
78 724 735406339078
79 964 455267581581
80 785 817066207583
81 970 523952690596
82 789 666563359075
83 1029 64106924381
84 913 80434982866
85 997 421659978512
86 922 197309381421
87 1128 24751856068
88 984 054991863818
89 1135 19080381829
90 988 600940495814
91 1203 35493953861
92 982 973998450418
93 1290 79339029916
94 1108 92013078475
95 1306 61068247575
96 1171 84167272704
97 1341 52432127827
98 1071 0703895771
99 1327 73672928816
100 1116 86936925508
101 1376 32996817803

140
README.md
View File

@@ -2,63 +2,105 @@
[ArtStudies Projects](https://github.com/ArthurDanjou/artstudies) is a curated collection of academic projects completed throughout my mathematics studies. The repository showcases work in both _Python_ and _R_, focusing on mathematical modeling, data analysis, and numerical methods.
The projects are organized into two main sections:
- **L3** Third year of the Bachelor's degree in Mathematics
- **M1** First year of the Master's degree in Mathematics
- **M2** Second year of the Master's degree in Mathematics
## 📁 File Structure
## 📁 Project Structure
- `L3`
- `Analyse Matricielle`
- `Analyse Multidimensionnelle`
- `Calculs Numériques`
- `Équations Différentielles`
- `Méthodes Numériques`
- `Probabilités`
- `Projet Numérique`
- `Statistiques`
### L3 - Bachelor's Degree
- `M1`
- `Data Analysis`
- `General Linear Models`
- `Monte Carlo Methods`
- `Numerical Methods`
- `Numerical Optimization`
- `Portfolio Management`
- `Statistical Learning`
| Course | Description |
|--------|-------------|
| `Analyse Matricielle` | Matrix analysis and numerical linear algebra |
| `Analyse Multidimensionnelle` | Multivariate data analysis (PCA, MCA, CA) |
| `Calculs Numériques` | Numerical computation methods |
| `Equations Différentielles` | Differential equations solving |
| `Méthodes Numériques` | Numerical methods implementation |
| `Projet Numérique` | Numerical project |
| `Statistiques` | Applied statistics |
- `M2`
- `Clustering In Practice`
- `Data Visualisation`
- `Deep Learning`
- `Generative AI`
- `Linear Models`
- `Machine Learning`
- `Reinforcement Learning`
- `SQL`
- `Statistiques Non Paramétrique`
- `Unsupervised Learning`
- `VBA`
### M1 - Master's Degree 1st Year
| Course | Description |
|--------|-------------|
| `Data Analysis` | Exploratory data analysis and visualization |
| `General Linear Models` | Regression and ANOVA models |
| `Monte Carlo Methods` | Statistical simulation techniques |
| `Numerical Methods` | Numerical algorithms implementation |
| `Numerical Optimisation` | Optimization algorithms |
| `Portfolio Management` | Financial portfolio optimization |
| `Statistical Learning` | Machine learning fundamentals |
### M2 - Master's Degree 2nd Year
| Course | Description |
|--------|-------------|
| `Advanced Machine Learning` | Advanced ML techniques |
| `Classification and Regression` | Supervised learning methods |
| `Clustering In Practice` | Unsupervised learning and clustering |
| `Data Visualisation` | Data visualization principles and tools |
| `Deep Learning` | Neural networks and deep architectures |
| `Enjeux Climatiques` | Climate issues and data analysis |
| `Generative AI` | Generative models (LLMs, diffusion) |
| `Linear Models` | Linear modeling techniques |
| `Machine Learning` | Core machine learning algorithms |
| `Reinforcement Learning` | Reinforcement learning algorithms |
| `SQL` | Database and SQL queries |
| `Statistiques Non Paramétrique` | Non-parametric statistics |
| `Time Series` | Time series analysis and forecasting |
| `Unsupervised Learning` | Unsupervised learning methods |
| `VBA` | Visual Basic for Applications |
## 🛠️ Technologies & Tools
- [Python](https://www.python.org): A high-level, interpreted programming language, widely used for data science, machine learning, and scientific computing.
- [R](https://www.r-project.org): A statistical computing environment, perfect for data analysis and visualization.
- [Jupyter](https://jupyter.org): Interactive notebooks combining code, results, and rich text for reproducible research.
- [Pandas](https://pandas.pydata.org): A data manipulation library providing data structures and operations for manipulating numerical tables and time series.
- [NumPy](https://numpy.org): Core package for numerical computing with support for large, multi-dimensional arrays and matrices.
- [SciPy](https://www.scipy.org): A library for advanced scientific computations including optimization, integration, and signal processing.
- [Scikit-learn](https://scikit-learn.org): A robust library offering simple and efficient tools for machine learning and statistical modeling, including classification, regression, and clustering.
- [TensorFlow](https://www.tensorflow.org): A comprehensive open-source framework for building and deploying machine learning and deep learning models.
- [Keras](https://keras.io): A high-level neural networks API, running on top of TensorFlow, designed for fast experimentation.
- [Matplotlib](https://matplotlib.org): A versatile plotting library for creating high-quality static, animated, and interactive visualizations in Python.
- [Plotly](https://plotly.com): An interactive graphing library for creating dynamic visualizations in Python and R.
- [Seaborn](https://seaborn.pydata.org): A statistical data visualization library built on top of Matplotlib, providing a high-level interface for drawing attractive and informative graphics.
- [RMarkdown](https://rmarkdown.rstudio.com): A dynamic tool for combining code, results, and narrative into high-quality documents and presentations.
- [FactoMineR](https://factominer.free.fr/): An R package focused on multivariate exploratory data analysis (e.g., PCA, MCA, CA).
- [ggplot2](https://ggplot2.tidyverse.org): A grammar-based graphics package for creating complex and elegant visualizations in R.
- [RShiny](https://shiny.rstudio.com): A web application framework for building interactive web apps directly from R.
- [LangChain](https://langchain.com): A framework for developing applications powered by language models.
- and my 🧠.
### Python
- **Data Science**: `numpy`, `pandas`, `scipy`, `matplotlib`, `seaborn`, `plotly`, `geopandas`
- **Machine Learning**: `scikit-learn`, `xgboost`, `catboost`, `shap`, `umap-learn`, `imblearn`
- **Deep Learning**: `tensorflow`, `keras`, `torch`, `accelerate`
- **LLM/RAG**: `langchain`, `langchain-community`, `sentence-transformers`, `faiss-cpu`
- **Other**: `statsmodels`, `plotly`, `polars`, `requests`, `openpyxl`
### R
- **Core**: tidyverse, ggplot2, FactoMineR, caret, glmnet
- **Shiny**: RShiny for interactive web applications
- **Reporting**: RMarkdown for reproducible reports
### Tools
- **Jupyter** Interactive notebooks for reproducible research
- **RStudio** R development environment
- **uv** Fast Python package manager and virtual environment
- **ruff** Python linter and formatter
- **lintr** R linter
## 🚀 Getting Started
1. Clone the repository:
```bash
git clone <repository-url>
cd studies
```
2. Set up the Python environment:
```bash
uv sync
```
3. Run the linter:
```bash
ruff check .
```
4. Format code:
```bash
ruff format .
```
## 📝 Notes
- Some subprojects have isolated `pyproject.toml` files (e.g., `M2/Reinforcement Learning/project/`)
- Large datasets are not versioned—download via notebook code when needed
- Course materials and documentation are primarily in French