Skip to content

La semaine de la facilité

Etl

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

Architecture


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

Workflow


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


Auteur

Ahmad Abo-Alola — Student Project (AI Developer Training)