Préparer des données pour un organisme de santé

Introduction

Ce projet vise à préparer la base de données libre et ouverte d'Open Food Facts. Open Food Facts est un projet collaboratif dont le but est de constituer une base de données libre et ouverte sur les produits alimentaires commercialisés dans le monde entier.

L'objectif est ici de nettoyer et explorer les données, afin de pouvoir déterminer par la suite s'il serait envisageable de créer une application d'auto-complétion pour aider les usagers à remplir plus efficacement la base de données.

Les étapes suivantes seront réalisées :

  • Repérer les variables intéressantes.
  • Nettoyer le jeu de données en traitant les valeurs aberrantes et les valeurs manquantes.
  • Réaliser une analyse exploratoire des données.
  • Déterminer la faisabilité d'une application permettant de suggérer les valeurs manquantes pour une variable dont plus de 50% des valeurs sont manquantes.

Retrouvez tout le code de ce projet sur mon GitHub

Premier aperçu du dataset

Ce dataset comporte 320 772 lignes et 162 colonnes. 16 colonnes du dataset sont entièrement vides.

De nombreuses données sont manquantes :.



Premiers traitements

  • Suppression des colonnes avec plus de 90% de valeurs manquantes :
  • —  Sauf les colonnes : nutrition_grade_uk, allergens et traces.

  • Sélection des colonnes intéressantes :
  • —  Colonnes d'intérêt pour l'idée d'application (macronutriments, nutriscores…).
    —  Colonnes utilisées pour vérifications au cours du nettoyage (nom des produits, groupes d'aliment…).

  • Création d'une nouvelle colonne pays uniformisée.

  • Vérification des types des colonnes.


  • Valeurs aberrantes

  • Passage en revue des variables, en prenant en priorité le contexte métier :
  • —  Sel et Sodium quasiment identiques : je ne conserve que Sel.
    —  Cas où Glucides est vide alors que Sucre ne l'est pas.
    —  Macronutriments pour 100g supérieurs à 100 : suppression.
    —  Micronutriments supérieurs à 100 000 : suppression.
    —  Des valeurs élevées dans additives_n : atypiques, pas aberrantes.
    —  energy_100g : suppression des valeurs supérieures à 3700, qui est la valeur maximale en kJ pour 100g qu'un aliment peut avoir (lipide pur).

  • Légères différences entre nutriscores Fr et UK.

  • Traitement des valeurs négatives.


  • Imputation des valeurs manquantes

    Nous allons identifier les corrélations linéaires entre certaines variables. Cela nous aidera à choisir une méthode d'imputation adaptée.



    Imputation des macronutriments

  • Cas où toutes les variables sont manquantes :

  • Distribution non symétriques : imputation par la médiane.

  • Macronutriments : cas où seulement certaines variables sont manquantes :
  • Je considère que les aliments concernés n'en contiennent pas : imputation par 0.

    Colonnes nutriscore et nutrigrade

  • Pas assez d'éléments pour pouvoir calculer le nutriscore avec la formule : il nous manque la variable fruits-vegetables-nuts_100g et souvent le groupe alimentaire.
  • Forte corrélation linéaire du nutriscore avec energy_100g, fat_100g, saturated-fat_100g et sugars_100g : utilisation de IterativeImputer.
  • Maintenant que le nutriscore est imputé, nous pouvons imputer nutrigrade en suivant la règle suivante :



  • Autres colonnes

  • energy_100g : imputation par la médiane quand aucun macronutriments, sinon imputation par 0.
  • Imputation par 0 pour allergènes, traces, additifs et huile de palme.
  • trans-fat_100g et cholesterol_100g : utilisation de l'algorithme KNN Imputer.
  • vitamin-c_100g, vitamin-a_100g, calcium_100g et iron_100g : pas possible d'imputer correctement, suppression de ces variables.
  • Suppression des variables de vérification.


  • Exploration des données

    Le nombre d'entrées augmentait progressivement, avant une cassure en 2017 :



    Cette cassure provient de l'arrivée massive des produits Américains dans la base de données cette même année :



    Répartition des produits dans le monde :



    Nutrigrade :

    Les macronutriments influent sur le nutrigrade. Exemples :



    Nutriscore :



    Énergie :




    Macronutriments :





    Additifs :



    Analyse en composantes principales

    Nous allons réaliser une ACP sur les macronutriments et voir les liens entre ces variables et les composantes de l'ACP

    Composantes Variances captées
    n°1 31.01 %
    n°2 21.24 %
    n°3 16.64 %
    n°4 15.39 %
    n°5 9.94 %
    n°6 5.77 %
    100 %



    Analyse de la variance (ANOVA)

    Cette analyse nous permet d'identifier des corrélations entre des variables quantitatives et qualitatives.

    Entre nutriscore et nutrigrade :
    F = 99439
    p-value < 0,01
    Eta² = 0,554


    Il y a une corrélation entre nutriscore et nutrigrade, c'était attendu.

    ANOVA avec d'autres variables :
  • ANOVA entre nutriscore et de multiples variables.
  • À titre indicatif, car les distributions ne sont pas normales.



  • Faisabilité de l'application

  • Au cours du nettoyage, il a été possible d'imputer certaines variables qui contenaient beaucoup de valeurs manquantes : additifs, huile de palme, allergènes, traces, acides gras trans, cholestérol.
  • Il a été possible d'imputer une colonne entièrement vide : le nutrigrade UK.
  • D'autres colonnes un peu plus complètes ont pu être imputées : les macronutriments, les nutriscores et le nutrigrade Fr.
  • De nombreuses colonnes ne peuvent pas être imputées, à moins de procéder à des estimations hasardeuses.

  • EN CONCLUSION : ce type d'application est réalisable, mais pour un nombre limité de variables. La question à se poser est : pour quelle variable est-on prêt à perdre en qualité des données au profit d'un système de suggestion ?

    Perspectives

  • En amont, améliorer la qualité des données dès leur saisie :
  • —  Pour les pays, les groupes alimentaires : choix restreint par une liste déroulante.
    —  Forcer le remplissage des variables importantes comme les macronutriments.

  • Tester d'autres méthodes d'imputation :
  • —  Algorithmes de machine learning : par exemple utiliser un random forest pour imputer les variables de groupes alimentaires.

  • Faire des tests approfondis quant à la qualité des données imputées.
  • Retrouvez tout le code de ce projet sur mon GitHub