การทำให้หมวดหมู่เป็นมาตรฐาน

การทำความสะอาดข้อมูลใน Java

Dennis Lee

Software Engineer

ทำไมต้องทำให้หมวดหมู่เป็นมาตรฐาน?

  • ชื่อหมวดหมู่ไม่สอดคล้องกัน: จัดกลุ่มข้อมูลไม่ได้
  • วิธีเขียน "Fruits & Vegetables" ที่แตกต่างกัน
  • วิธีแก้: ทำให้หมวดหมู่เป็นมาตรฐาน

 

 

Raw Category Quantity
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: แสดงเพื่อการอธิบายเท่านั้น โดยแต่ละคอลัมน์แทนคู่ key-value ใน Map

Raw Category Standard Category
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
Raw Category Standard Category
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: การแมปที่ดึงมาจากชุดข้อมูลสินค้าในร้านของเรา

Raw Category Quantity
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: การแมปที่ใช้ค้นหาหมวดหมู่มาตรฐาน

Raw Category Standard Category
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

Standard Category Quantity
FRUITS_AND_VEGETABLES 60
การทำความสะอาดข้อมูลใน Java

การจัดกลุ่มตามหมวดหมู่มาตรฐาน: สรุป

1) ดึง rawData ของหมวดหมู่/ปริมาณจากชุดข้อมูล (ตัวอย่างด้านล่าง)

Raw Category Quantity
Fruits & Vegetables 10

2) สร้าง categories เพื่อค้นหาหมวดหมู่มาตรฐาน (ตัวอย่างด้านล่าง)

Raw Category Standard Category
Fruits & Vegetables FRUITS_AND_VEGETABLES

3) คำนวณ stockByCategory โดยค้นหา rawData ใน categories (ตัวอย่างด้านล่าง)

Standard Category Quantity
FRUITS_AND_VEGETABLES 60
การทำความสะอาดข้อมูลใน Java

สรุปทุกอย่างเข้าด้วยกัน

การ import หลัก

import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
  • สร้าง enum สำหรับหมวดหมู่มาตรฐาน
  • สร้างการแมปหมวดหมู่ด้วย HashMap
  • ทำให้การแมปไม่สามารถแก้ไขได้ด้วย Collections.unmodifiableMap
  • จัดการหมวดหมู่ที่ไม่รู้จักด้วย .getOrDefault()
  • จัดกลุ่มตามหมวดหมู่มาตรฐานด้วย .merge()
การทำความสะอาดข้อมูลใน Java

มาฝึกกันเถอะ!

การทำความสะอาดข้อมูลใน Java

Preparing Video For Download...