diff --git a/README.MD b/README.MD index 32d9f7c..4917186 100644 --- a/README.MD +++ b/README.MD @@ -1,32 +1,227 @@ -# Projet 03 : Préparez des données pour un organisme de santé publique +# Projet de Préparation de Données - OpenFoodFacts -## Objectif du projet -Préparer et explorer les données de la base OpenFoodFacts afin de faciliter la création d’un système d’aide à la saisie de produits par les utilisateurs. -Les objectifs spécifiques sont : -- Nettoyer et filtrer les données ; -- Traiter les valeurs manquantes et aberrantes ; -- Réaliser des analyses statistiques univariées, bi-variées et multivariées ; -- Produire des visualisations pour comprendre la distribution et les relations entre les variables ; -- Respecter les principes RGPD. +## 📋 Contexte du projet -## Contenu du projet +Ce projet a été réalisé pour un organisme de santé publique souhaitant améliorer la **base de données collaborative OpenFoodFacts**. L'objectif est de préparer et d'analyser les données alimentaires pour faciliter la création d'un système d'aide à la saisie de produits par les utilisateurs, tout en respectant les principes du RGPD. -- `data_analysis_functions.py` : fonctions pour le nettoyage des données, identification et traitement des valeurs aberrantes et des doublons. -- `pandas_df_management.py` : fonctions d’automatisation pour la manipulation et la gestion des DataFrames pandas. -- `strings_management.py` : fonctions pour le nettoyage et la normalisation des chaînes de caractères dans le dataset. -- `translated_allergens.json` et `translated_ingredients.json` : fichiers de correspondance pour harmoniser les allergènes et ingrédients. -- `openfoodfacts_analysis_clean.ipynb` : notebook principal qui couvre les étapes suivantes : - 1. **Chargement et exploration initiale** : taille du dataset, types de données, statistiques descriptives. - 2. **Nettoyage et filtrage** : sélection des caractéristiques pertinentes, suppression des doublons et lignes sans valeurs cibles (allergens). - 3. **Gestion des valeurs manquantes et aberrantes** : traitement des valeurs nutritionnelles, estimation des valeurs manquantes d’`energy_100g` et du NutriScore via NutriScoreCalculator. - 4. **Création de nouvelles caractéristiques** : nombre d’allergènes (`allergens_count`), caractéristiques dérivées des ingrédients et des additifs. - 5. **Analyse exploratoire** : visualisations univariées, bivariées et multivariées ; tests statistiques (corrélation, ANOVA, Khi², V de Cramer) ; ACP et heatmaps pour résumer les relations entre variables. - 6. **Export des données raffinées** : sauvegarde du DataFrame nettoyé et enrichi (`df_refined_allergens_based.csv`) pour usage ultérieur. -- `OpenFoodFacts_presentation.pdf` : présentation synthétisant la démarche et les résultats pour la soutenance. +OpenFoodFacts est une base de données ouverte sur les produits alimentaires du monde entier, contenant des informations nutritionnelles, des ingrédients, des allergènes et des labels. Cependant, ces données nécessitent un nettoyage approfondi et une exploration statistique pour être exploitables. -## Données utilisées -- Dataset source : [OpenFoodFacts CSV](https://s3-eu-west-1.amazonaws.com/static.oc-static.com/prod/courses/files/parcours-data-scientist/P2/fr.openfoodfacts.org.products.csv.zip) -- Compléments via la librairie [NutriScoreCalculator](https://github.com/MalteIwanicki/NutriScoreCalculator) pour compléter certaines valeurs nutritionnelles manquantes. +## 🎯 Objectifs -## Notes -Le projet met l’accent sur la **qualité des données** et la préparation d’un dataset exploitable pour de futures analyses ou modélisations, tout en respectant les principes du RGPD. +Les objectifs principaux du projet sont : + +1. **Nettoyer et filtrer les données** : Éliminer les doublons, les incohérences et sélectionner les variables pertinentes +2. **Traiter les valeurs manquantes et aberrantes** : Identifier et gérer les données manquantes, estimer les valeurs nutritionnelles +3. **Réaliser des analyses statistiques** : Analyses univariées, bivariées et multivariées pour comprendre les relations entre variables +4. **Créer de nouvelles caractéristiques** : Feature engineering pour enrichir le dataset +5. **Produire des visualisations** : Graphiques et analyses pour faciliter la compréhension des données +6. **Respecter le RGPD** : Garantir la conformité avec les réglementations sur la protection des données + +## 📊 Données + +Les données proviennent de la base **OpenFoodFacts**, une base collaborative mondiale sur les produits alimentaires contenant : +- Des informations nutritionnelles (énergie, lipides, glucides, protéines, etc.) +- Des listes d'ingrédients et d'allergènes +- Des scores nutritionnels (Nutri-Score) +- Des labels et certifications +- Des informations géographiques et de packaging + +**⚠️ Note importante** : Le dataset original est volumineux et n'est pas inclus dans ce dépôt. Il est téléchargeable à l'adresse suivante : +- **URL** : https://s3-eu-west-1.amazonaws.com/static.oc-static.com/prod/courses/files/parcours-data-scientist/P2/fr.openfoodfacts.org.products.csv.zip + +**Complément** : La librairie [NutriScoreCalculator](https://github.com/MalteIwanicki/NutriScoreCalculator) a été utilisée pour compléter certaines valeurs nutritionnelles et calculer le Nutri-Score manquant. + +## 📁 Structure du projet + +``` +├── openfoodfacts_analysis_clean.ipynb +├── OpenFoodFacts_presentation.pdf +├── data_analysis_functions.py +├── pandas_df_management.py +├── strings_management.py +├── translated_allergens.json +└── translated_ingredients.json +``` + +### 1. `openfoodfacts_analysis_clean.ipynb` + +**Notebook Principal d'Analyse et de Préparation des Données** + +Ce notebook constitue le cœur du projet et couvre l'ensemble du processus de data cleaning et d'analyse : + +**Chargement et exploration initiale** : +- Importation du dataset OpenFoodFacts +- Analyse de la taille, des types de données et des statistiques descriptives +- Identification des colonnes pertinentes pour l'analyse + +**Nettoyage et filtrage** : +- Sélection des caractéristiques pertinentes pour l'objectif métier +- Suppression des doublons (produits identiques) +- Filtrage des lignes sans valeurs cibles (notamment les allergènes) +- Harmonisation des formats et des unités + +**Gestion des valeurs manquantes et aberrantes** : +- Identification des valeurs manquantes par variable +- Stratégies d'imputation adaptées à chaque type de variable +- Détection et traitement des valeurs nutritionnelles aberrantes +- Estimation des valeurs manquantes d'`energy_100g` via des corrélations +- Calcul du Nutri-Score manquant avec NutriScoreCalculator + +**Création de nouvelles caractéristiques (Feature Engineering)** : +- `allergens_count` : nombre d'allergènes par produit +- Caractéristiques dérivées des ingrédients (nombre, présence de certains ingrédients) +- Variables binaires pour les additifs +- Ratios nutritionnels (lipides/énergie, sucres/glucides, etc.) + +**Analyse exploratoire approfondie** : +- **Analyses univariées** : distributions des variables nutritionnelles, Nutri-Score, catégories de produits +- **Analyses bivariées** : corrélations entre variables numériques, relations entre Nutri-Score et compositions +- **Analyses multivariées** : ACP (Analyse en Composantes Principales) pour visualiser les relations globales +- **Tests statistiques** : corrélations de Pearson, ANOVA, tests du Khi², V de Cramer +- **Visualisations** : histogrammes, boxplots, heatmaps de corrélation, scatter plots + +**Export des données raffinées** : +- Sauvegarde du DataFrame nettoyé et enrichi (`df_refined_allergens_based.csv`) +- Documentation des transformations effectuées + +### 2. `OpenFoodFacts_presentation.pdf` + +**Présentation de Soutenance** + +Cette présentation synthétise : +- Le contexte et les enjeux du projet +- La méthodologie de nettoyage et de préparation des données +- Les principales analyses statistiques réalisées +- Les insights clés découverts dans les données +- Les recommandations pour l'amélioration du système de saisie +- Les perspectives d'amélioration et d'exploitation des données + +### 3. `data_analysis_functions.py` + +**Module de Fonctions d'Analyse de Données** + +Ce module Python contient des fonctions réutilisables pour : +- Le nettoyage des données (suppression de doublons, filtrage) +- L'identification des valeurs aberrantes (méthodes statistiques, IQR) +- Le traitement des outliers +- La détection d'incohérences dans les données +- La génération de rapports de qualité des données + +### 4. `pandas_df_management.py` + +**Module de Gestion des DataFrames Pandas** + +Ce module automatise les tâches courantes de manipulation de DataFrames : +- Fonctions d'inspection rapide des DataFrames +- Automatisation de la gestion des types de données +- Fonctions de transformation et de reshaping +- Utilitaires pour l'export et l'import de données +- Fonctions de validation de la structure des données + +### 5. `strings_management.py` + +**Module de Nettoyage et Normalisation de Chaînes de Caractères** + +Ce module contient des fonctions spécialisées pour : +- Le nettoyage des chaînes de caractères (suppression d'espaces, caractères spéciaux) +- La normalisation des textes (majuscules/minuscules, accents) +- Le parsing des listes d'ingrédients et d'allergènes +- La standardisation des noms de produits et de catégories +- La gestion des formats multilingues + +### 6. `translated_allergens.json` + +**Fichier de Correspondance des Allergènes** + +Fichier JSON contenant les traductions et correspondances des allergènes : +- Harmonisation des noms d'allergènes en différentes langues +- Standardisation des appellations (gluten, lactose, fruits à coque, etc.) +- Regroupement des variantes orthographiques +- Facilite l'analyse multilingue de la base OpenFoodFacts + +### 7. `translated_ingredients.json` + +**Fichier de Correspondance des Ingrédients** + +Fichier JSON contenant les traductions et correspondances des ingrédients : +- Harmonisation des noms d'ingrédients communs +- Standardisation des appellations en différentes langues +- Regroupement des synonymes et variantes +- Support de l'analyse multilingue des compositions + +## 🛠️ Technologies utilisées + +- **Python** : Langage principal pour l'analyse de données + - pandas, numpy : manipulation et analyse de données + - matplotlib, seaborn, plotly : visualisation de données + - scipy, statsmodels : tests statistiques et analyses + - scikit-learn : ACP et analyses multivariées + - NutriScoreCalculator : calcul du Nutri-Score +- **Jupyter Notebook** : développement et documentation +- **JSON** : stockage des fichiers de correspondance + +## 📈 Méthodologie + +1. **Exploration initiale** : Compréhension de la structure et du contenu du dataset +2. **Nettoyage** : Élimination des doublons, incohérences et données non pertinentes +3. **Traitement des valeurs manquantes** : Stratégies d'imputation adaptées à chaque variable +4. **Feature Engineering** : Création de variables dérivées pertinentes +5. **Analyses statistiques** : Tests et visualisations pour comprendre les relations +6. **Validation** : Vérification de la qualité et de la cohérence des données nettoyées +7. **Documentation** : Présentation des résultats et recommandations + +## 🎯 Résultats attendus + +- ✅ Dataset nettoyé, enrichi et prêt pour des analyses avancées +- ✅ Compréhension approfondie des données OpenFoodFacts +- ✅ Identification des variables clés pour la prédiction du Nutri-Score +- ✅ Insights sur les relations entre composition nutritionnelle et qualité alimentaire +- ✅ Modules Python réutilisables pour le traitement de données similaires +- ✅ Documentation complète du processus de préparation + +## 💡 Points clés du projet + +### Qualité des données +OpenFoodFacts étant une base collaborative, elle présente de nombreux défis : +- **Valeurs manquantes importantes** : certaines colonnes ont plus de 50% de données manquantes +- **Incohérences** : variations dans les formats, les unités, les langues +- **Doublons** : produits saisis plusieurs fois avec des variations +- **Valeurs aberrantes** : erreurs de saisie dans les valeurs nutritionnelles + +### Respect du RGPD +Le projet garantit la conformité avec les réglementations : +- Anonymisation des données personnelles potentielles +- Traitement conforme des données européennes +- Documentation des traitements effectués + +### Analyses statistiques approfondies +Le projet va au-delà du simple nettoyage en proposant : +- Des analyses univariées pour comprendre les distributions +- Des analyses bivariées pour identifier les relations entre variables +- Des analyses multivariées (ACP) pour une vision globale +- Des tests statistiques pour valider les observations + +### Feature Engineering orienté métier +Création de variables pertinentes pour la santé publique : +- Comptage d'allergènes (aide à l'identification des produits à risque) +- Ratios nutritionnels (sucres/glucides, lipides/énergie) +- Indicateurs de qualité nutritionnelle + +## 🎓 Compétences développées + +- Nettoyage et préparation de données volumineuses et imparfaites +- Gestion des valeurs manquantes et aberrantes avec stratégies adaptées +- Analyses statistiques univariées, bivariées et multivariées +- Feature engineering orienté métier santé +- Visualisation de données pour la communication d'insights +- Développement de modules Python réutilisables +- Respect des contraintes réglementaires (RGPD) +- Documentation et présentation de résultats techniques + +## 👤 Auteur + +**Grégoire Mureau** + +--- + +*Ce projet illustre la démarche complète de préparation de données en data science : de l'exploration initiale au dataset raffiné, en passant par le nettoyage, l'enrichissement et l'analyse statistique.*