La semaine de la facilité

Projet réalisé en 5 jours pour construire une application complète autour d’un pipeline ETL, d’une API, d’une interface web éditable et d’un module de Machine Learning.
Jour 1 — ETL Pipeline
Objectif
Créer un pipeline ETL capable de lire un fichier, extraire les données et les enregistrer dans une base SQLite.
Fonctionnalités
- Création automatique de la base SQLite
- Création des tables
source,column_info,data - Import des fichiers CSV, Excel, HTML et TXT
- Nettoyage simple des noms de colonnes
- Insertion des données dans SQLite
Jour 2 — API FastAPI
Objectif
Créer une API permettant de manipuler les données enregistrées dans SQLite.
Fonctionnalités
- Upload d’un fichier depuis l’API
- Sauvegarde du fichier dans
uploads/ - Import automatique dans SQLite
- CRUD sur les données
- Export JSON ou CSV
Routes principales
POST /upload
GET /sources/{source_id}
GET /sources/{source_id}/rows/{row_id}
PUT /sources/{source_id}/rows/{row_id}/cells/{column_name}
PUT /sources/{source_id}/rows/{row_id}
POST /sources/{source_id}/rows
DELETE /sources/{source_id}/rows/{row_id}
GET /sources/{source_id}/export

Jour 3 — Interface web
Objectif
Créer une interface permettant d’afficher et modifier une source depuis l’API.
Fonctionnalités
- Choisir une source
- Uploader un fichier
- Afficher les données dans un tableau éditable
- Filtrer et trier les données
- Modifier une cellule
- Ajouter une ligne
- Supprimer une ligne
- Sauvegarder l’ordre des lignes
- Créer une source vide avec des colonnes
Jour 4 — Entraînement de modèle
Objectif
Créer une fonction d’entraînement qui utilise les données stockées dans SQLite.
La fonction prend en entrée :
- l’identifiant d’une source
- une ou plusieurs colonnes X
- une colonne cible Y
Fonctionnement
- Récupération de la source depuis SQLite
- Reconstruction du DataFrame
- Nettoyage des valeurs numériques
- Préparation de X et Y
- Détection du type de problème : régression ou classification
- Encodage des colonnes textuelles
- Découpage train/test
- Test de plusieurs modèles
- Sélection du meilleur modèle
- Sauvegarde du modèle dans
models/ - Retour du score du modèle
Modèles utilisés
Régression
- LinearRegression
- RandomForestRegressor
Classification
- LogisticRegression
- RandomForestClassifier
Jour 5 — Prédicteur depuis l’interface
Objectif
Ajouter une user story complète permettant à l’utilisateur de créer un prédicteur depuis l’interface.
Fonctionnalités
- L’utilisateur choisit une colonne cible Y
- L’utilisateur choisit une ou plusieurs colonnes X
- Le front envoie X, Y et la source au back
- Le back entraîne un modèle
- Le back retourne l’accuracy
- Le front affiche l’accuracy
- Le front affiche les modèles disponibles pour la source
- Pour chaque colonne avec un modèle, un bouton permet de prédire les valeurs vides
- Les prédictions sont enregistrées dans SQLite
- Le tableau est mis à jour après la prédiction
Routes ajoutées
POST /train
GET /sources/{source_id}/models
POST /sources/{source_id}/predict/{target_column}
Table ajoutée
Table model
- id
- source_id
- target_column
- x_columns
- model_name
- accuracy
- model_path

Installation
pip install -r requirements.txt
Lancer le projet
uvicorn main:app --reload
Swagger
http://127.0.0.1:8000/docs
Interface web
http://127.0.0.1:8000
Structure du projet
.
├── db.py
├── import_file.py
├── main.py
├── requirements.txt
├── routers/
│ ├── jour2.py
│ ├── jour3.py
│ └── jour5.py
├── training/
│ └── train_model.py
├── frontend/
│ ├── index.html
│ ├── style.css
│ └── script.js
├── uploads/
├── database/
└── models/
Notes
Les dossiers suivants ne sont pas versionnés :
venv/
database/
uploads/
models/
__pycache__/
Ces dossiers contiennent des fichiers générés localement.
Liens
-
Dépôt GitLab :
https://gitlab.com/ahmad-training-2026/semaine-facilite -
Portfolio :
https://ahmadaboalola.com/
Auteur
Ahmad Abo-Alola — Student Project (AI Developer Training)