Стандартизація категорій

Очищення даних у Java

Dennis Lee

Software Engineer

Навіщо стандартизувати категорії?

  • Непослідовні назви категорій: неможливо згрупувати дані
  • Різні варіанти написання "Fruits & Vegetables"
  • Рішення: стандартизувати категорії

 

 

Сира категорія Кількість
Fruits & Vegetables 10
fruits & veg 20
Fruits&Veg 30
Очищення даних у Java

Кроки стандартизації

  1. Визначте стандартні категорії
    FRUITS_AND_VEGETABLES
    DAIRY
    UNCATEGORIZED
    
  2. Зіставте варіації зі стандартними категоріями
    Fruits & Vegetables -> FRUITS_AND_VEGETABLES
    fruits & veg -> FRUITS_AND_VEGETABLES
    Fruits&Veg -> FRUITS_AND_VEGETABLES
    
  3. Виконайте аналіз — напр., порахуйте категорії на кшталт FRUITS_AND_VEGETABLES
Очищення даних у Java

Визначення стандартних категорій через enum

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

// Example category
System.out.println(ProductCategory.FRUITS_AND_VEGETABLES);
FRUITS_AND_VEGETABLES
Очищення даних у Java

Зіставте сирі категорії зі стандартними

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);
Очищення даних у Java

Зіставлення варіацій зі стандартом: результати

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

 

rawCategories: лише для візуалізації; стовпці показують пари ключ-значення в Map

Сира категорія Стандартна категорія
Fruits & Vegetables FRUITS_AND_VEGETABLES
fruits & veg FRUITS_AND_VEGETABLES
Fruits&Veg FRUITS_AND_VEGETABLES
Очищення даних у Java

Обробка невідомих категорій

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
Сира категорія Стандартна категорія
Mystery Category UNCATEGORIZED
Очищення даних у Java

Робимо зіставлення незмінним

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
Очищення даних у Java

Витягніть категорії з нашого набору даних

// 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: зіставлення, витягнуте з нашого набору даних запасів продуктів

Сира категорія Кількість
Fruits & Vegetables 10
fruits & veg 20
Fruits&Veg 30
Очищення даних у Java

Пошук стандартної категорії

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: зіставлення для пошуку стандартної категорії

Сира категорія Стандартна категорія
Fruits & Vegetables FRUITS_AND_VEGETABLES
fruits & veg FRUITS_AND_VEGETABLES
Fruits&Veg FRUITS_AND_VEGETABLES
Очищення даних у Java

Сума за стандартною категорією

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

 

stockByCategory: зіставлення після пошуку rawData в categoryMap

Стандартна категорія Кількість
FRUITS_AND_VEGETABLES 60
Очищення даних у Java

Групування за стандартною категорією: підсумок

1) Витягніть мапу rawData категорія/кількість з нашого набору даних (фрагмент нижче)

Сира категорія Кількість
Fruits & Vegetables 10

2) Створіть categories для пошуку стандартних категорій (фрагмент нижче)

Сира категорія Стандартна категорія
Fruits & Vegetables FRUITS_AND_VEGETABLES

3) Обчисліть stockByCategory, шукаючи rawData в categories (фрагмент нижче)

Стандартна категорія Кількість
FRUITS_AND_VEGETABLES 60
Очищення даних у Java

Поєднуємо все разом

Ключові імпорти

import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
  • Створіть enum для стандартних категорій
  • Побудуйте зіставлення категорій за допомогою HashMap
  • Зробіть зіставлення незмінним через Collections.unmodifiableMap
  • Обробляйте невідомі категорії методом .getOrDefault()
  • Групуйте за стандартизованими категоріями методом .merge()
Очищення даних у Java

Давайте потренуємось!

Очищення даних у Java

Preparing Video For Download...