Le pipeline utilise les APIs suivantes :
- OpenFoodFacts (produits alimentaires) : source principale
- API Adresse (Base Adresse Nationale) : géocodage des points de vente pour enrichissement
Les données finales sont stockées en Parquet, avec génération automatique d’un rapport de qualité.
À l’issue du TP, le pipeline permet de :
- Interroger plusieurs APIs REST
- Enrichir les données en croisant plusieurs sources
- Gérer pagination, erreurs et rate limiting
- Calculer un scoring de qualité automatique
- Nettoyer et transformer les données avec des règles métier
- Stocker les données au format Parquet
- Générer un rapport Markdown complet
- Tester et valider la couverture du code
open-data2_bis/
├── .env
├── pyproject.toml
├── README.md
├── pipeline/
│ ├── init.py
│ ├── config.py
│ ├── models.py
│ ├── fetchers/
│ │ ├── init.py
│ │ ├── base.py
│ │ ├── openfoodfacts.py
│ │ └── adresse.py
│ ├── enricher.py
│ ├── transformer.py
│ ├── quality.py
│ ├── storage.py
│ └── main.py
├── tests/
│ ├── init.py
│ ├── test_fetchers.py
│ ├── test_transformer.py
│ └── test_others.py
├── data/
│ ├── raw/
│ ├── processed/
│ └── reports/
└── notebooks/
└── exploration.ipynbuv add httpx pandas duckdb litellm python-dotenv tenacity tqdm pyarrow pydantic pytest matplotlib seabornLes principaux paramètres sont centralisés dans pipeline/config.py :
- OPENFOODFACTS_CONFIG et ADRESSE_CONFIG : paramètres API
- MAX_ITEMS, BATCH_SIZE : limites d’acquisition
- QUALITY_THRESHOLDS : seuils pour la qualité
- RAW_DIR, PROCESSED_DIR, REPORTS_DIR : dossiers de stockage
Test pour quelques valeurs (car type chocolats), ignore la partie Enrichissement
python -m pipeline.main --category chocolats --max-items 100 --verboseTest pour de nombreuses valeurs, inclue la partie Enrichissement
python -m pipeline.main --category "orange juice" --max-items 500 --verboseOptions : --category, -c : catégorie de produits OpenFoodFacts --max-items, -m : nombre maximum de produits à récupérer --skip-enrichment, -s : ignorer l’étape de géocodage --verbose, -v : afficher la progression
Données brutes JSON : data/raw/ Données transformées Parquet : data/processed/ Rapport de qualité Markdown : data/reports/
Acquisition : fetchers/ Récupération des données avec gestion du rate limiting, pagination et retry automatique.
Enrichissement : enricher.py Extraction des adresses depuis stores, géocodage via API Adresse, enrichissement des produits avec coordonnées.
Transformation : transformer.py Suppression des doublons Gestion des valeurs manquantes Normalisation texte Ajout de colonnes dérivées (sugar_category, is_geocoded)
Qualité : quality.py Calcul des métriques : complétude, doublons, géocodage, valeurs nulles. Génération d’un rapport Markdown avec recommandations IA simulées.
Stockage : storage.py Sauvegarde JSON pour les données brutes et Parquet pour les données traitées.
pytest tests/ -v --cov=pipeline --cov-report=htmlGénère un rapport HTML dans htmlcov/index.html
- Tests unitaires pour les fetchers (test_fetchers.py)
- Tests pour le transformer (test_transformer.py)
- Tests pour enricher, quality et storage (test_others.py)
- Python 3.10+
- httpx pour les requêtes API
- pandas pour le traitement de données
- pydantic v2 pour les modèles et validation
- pytest et pytest-cov pour les tests et couverture
- tqdm pour la barre de progression
- litellm pour la génération de recommandations IA (simulée dans les tests)