Standardisation des catégories

Nettoyer des données en Java

Dennis Lee

Software Engineer

Pourquoi standardiser les catégories ?

  • Noms de catégories incohérents : impossible de regrouper
  • Plusieurs écritures de « Fruits & Vegetables »
  • Solution : standardiser les catégories

 

 

Catégorie brute Quantité
Fruits & Vegetables 10
fruits & veg 20
Fruits&Veg 30
Nettoyer des données en Java

Étapes de standardisation

  1. Définir les catégories standard
    FRUITS_AND_VEGETABLES
    DAIRY
    UNCATEGORIZED
    
  2. Faire correspondre les variantes aux catégories standard
    Fruits & Vegetables -> FRUITS_AND_VEGETABLES
    fruits & veg -> FRUITS_AND_VEGETABLES
    Fruits&Veg -> FRUITS_AND_VEGETABLES
    
  3. Analyser, p. ex. compter FRUITS_AND_VEGETABLES
Nettoyer des données en Java

Définir des catégories standard avec enum

// Define standard categories
public enum ProductCategory {
    FRUITS_AND_VEGETABLES,
    DAIRY,
    UNCATEGORIZED;
}

// Example category
System.out.println(ProductCategory.FRUITS_AND_VEGETABLES);
FRUITS_AND_VEGETABLES
Nettoyer des données en Java

Mapper les catégories brutes vers les catégories standard

import java.util.HashMap;
import java.util.Map;
// Define map of raw category variations to standard categories
Map<String, ProductCategory> rawCategories = new HashMap<>();
// Variation 1: Fruits & Vegetables
rawCategories.put("Fruits & Vegetables", ProductCategory.FRUITS_AND_VEGETABLES);
// Variation 2: fruits & veg
rawCategories.put("fruits & veg", ProductCategory.FRUITS_AND_VEGETABLES);
// Variation 3: Fruits&Veg
rawCategories.put("Fruits&Veg", ProductCategory.FRUITS_AND_VEGETABLES);
Nettoyer des données en Java

Mapper les variantes vers les catégories standard : sorties

System.out.println(rawCategories.get("fruits & veg")); // Get standard category
FRUITS_AND_VEGETABLES

 

rawCategories : à titre illustratif ; les colonnes représentent les paires clé-valeur de la Map

Catégorie brute Catégorie standard
Fruits & Vegetables FRUITS_AND_VEGETABLES
fruits & veg FRUITS_AND_VEGETABLES
Fruits&Veg FRUITS_AND_VEGETABLES
Nettoyer des données en Java

Gérer les catégories inconnues

String unknownCategory = "Mystery Category";

// Return UNCATEGORIZED if category not found in rawCategories
ProductCategory category = rawCategories.getOrDefault(
        unknownCategory, ProductCategory.UNCATEGORIZED);

System.out.println("Unknown: " + category);
Mystery Category: UNCATEGORIZED
Catégorie brute Catégorie standard
Mystery Category UNCATEGORIZED
Nettoyer des données en Java

Rendre le mapping immuable

import java.util.Collections;
Map<String, ProductCategory> categories =
        Collections.unmodifiableMap(rawCategories); // Create immutable view

try { categories.put("new", ProductCategory.DAIRY); // Will throw exception } catch (UnsupportedOperationException e) { System.out.println("Cannot modify immutable map"); }
Cannot modify immutable map
Nettoyer des données en Java

Extraire les catégories du jeu de données

// Extract category and quantity from our grocery inventory dataset
Map<String, Integer> rawData = 
        Map.of("Fruits & Vegetables", 10, 
               "fruits & veg", 20,
               "Fruits&Veg", 30);

rawData : mapping extrait de notre jeu de données d’inventaire

Catégorie brute Quantité
Fruits & Vegetables 10
fruits & veg 20
Fruits&Veg 30
Nettoyer des données en Java

Faire correspondre la catégorie standard

Map<ProductCategory, Integer> stockByCategory =
        new EnumMap<ProductCategory, Integer>(ProductCategory.class);

rawData.forEach((raw, quantity) -> // Lookup standard category in categories and sum quantities stockByCategory.merge(categories.get(raw), quantity, Integer::sum));

categories : mapping utilisé pour retrouver la catégorie standard

Catégorie brute Catégorie standard
Fruits & Vegetables FRUITS_AND_VEGETABLES
fruits & veg FRUITS_AND_VEGETABLES
Fruits&Veg FRUITS_AND_VEGETABLES
Nettoyer des données en Java

Sommer par catégorie standard

System.out.println(stockByCategory);
{FRUITS_AND_VEGETABLES=60}

 

stockByCategory : mapping après recherche de rawData dans categoryMap

Catégorie standard Quantité
FRUITS_AND_VEGETABLES 60
Nettoyer des données en Java

Regrouper par catégorie standard : résumé

1) Extraire la map rawData catégorie/quantité du jeu de données (extrait ci-dessous)

Catégorie brute Quantité
Fruits & Vegetables 10

2) Créer categories pour retrouver les catégories standard (extrait ci-dessous)

Catégorie brute Catégorie standard
Fruits & Vegetables FRUITS_AND_VEGETABLES

3) Calculer stockByCategory en recherchant rawData dans categories (extrait ci-dessous)

Catégorie standard Quantité
FRUITS_AND_VEGETABLES 60
Nettoyer des données en Java

Assembler le tout

Imports clés

import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
  • Créer un enum pour les catégories standard
  • Construire un mapping avec HashMap
  • Rendre un mapping immuable avec Collections.unmodifiableMap
  • Gérer l’inconnu avec .getOrDefault()
  • Regrouper par catégories standard avec .merge()
Nettoyer des données en Java

Passons à la pratique !

Nettoyer des données en Java

Preparing Video For Download...