Kategorileri standartlaştırma

Java'da Veri Temizleme

Dennis Lee

Software Engineer

Neden kategorileri standartla?

  • Tutarsız kategori adları: veriyi gruplamaz
  • "Fruits & Vegetables" yazmanın farklı yolları
  • Çözüm: kategorileri standartlaştır

 

 

Ham Kategori Miktar
Fruits & Vegetables 10
fruits & veg 20
Fruits&Veg 30
Java'da Veri Temizleme

Standartlaştırma adımları

  1. Standart kategorileri tanımla
    FRUITS_AND_VEGETABLES
    DAIRY
    UNCATEGORIZED
    
  2. Varyasyonları standart kategorilere eşleştir
    Fruits & Vegetables -> FRUITS_AND_VEGETABLES
    fruits & veg -> FRUITS_AND_VEGETABLES
    Fruits&Veg -> FRUITS_AND_VEGETABLES
    
  3. Analiz yap - örn., FRUITS_AND_VEGETABLES gibi kategorileri say
Java'da Veri Temizleme

Enum ile standart kategorileri tanımla

// Standart kategorileri tanımla
public enum ProductCategory {
    FRUITS_AND_VEGETABLES,
    DAIRY,
    UNCATEGORIZED;
}

// Örnek kategori
System.out.println(ProductCategory.FRUITS_AND_VEGETABLES);
FRUITS_AND_VEGETABLES
Java'da Veri Temizleme

Ham kategorileri standartlara eşleştir

import java.util.HashMap;
import java.util.Map;
// Ham kategori varyasyonlarını standart kategorilere eşleştir
Map<String, ProductCategory> rawCategories = new HashMap<>();
// Varyasyon 1: Fruits & Vegetables
rawCategories.put("Fruits & Vegetables", ProductCategory.FRUITS_AND_VEGETABLES);
// Varyasyon 2: fruits & veg
rawCategories.put("fruits & veg", ProductCategory.FRUITS_AND_VEGETABLES);
// Varyasyon 3: Fruits&Veg
rawCategories.put("Fruits&Veg", ProductCategory.FRUITS_AND_VEGETABLES);
Java'da Veri Temizleme

Varyasyonları standartlara eşleştir: çıktılar

System.out.println(rawCategories.get("fruits & veg")); // Standart kategoriyi al
FRUITS_AND_VEGETABLES

 

rawCategories: sadece görselleştirme için; sütunlar Map içindeki anahtar-değer çiftlerini gösterir

Ham Kategori Standart Kategori
Fruits & Vegetables FRUITS_AND_VEGETABLES
fruits & veg FRUITS_AND_VEGETABLES
Fruits&Veg FRUITS_AND_VEGETABLES
Java'da Veri Temizleme

Bilinmeyen kategorileri ele alma

String unknownCategory = "Mystery Category";

// Kategori rawCategories içinde yoksa UNCATEGORIZED döndür
ProductCategory category = rawCategories.getOrDefault(
        unknownCategory, ProductCategory.UNCATEGORIZED);

System.out.println("Unknown: " + category);
Mystery Category: UNCATEGORIZED
Ham Kategori Standart Kategori
Mystery Category UNCATEGORIZED
Java'da Veri Temizleme

Eşlemeyi değiştirilemez yapmak

import java.util.Collections;
Map<String, ProductCategory> categories =
        Collections.unmodifiableMap(rawCategories); // Değiştirilemez görünüm oluştur

try { categories.put("new", ProductCategory.DAIRY); // Hata fırlatır } catch (UnsupportedOperationException e) { System.out.println("Değiştirilemez map değiştirilemez"); }
Cannot modify immutable map
Java'da Veri Temizleme

Veri kümemizden kategorileri çıkar

// Market envanteri veri kümemizden kategori ve miktarı çıkar
Map<String, Integer> rawData = 
        Map.of("Fruits & Vegetables", 10, 
               "fruits & veg", 20,
               "Fruits&Veg", 30);

rawData: Market envanteri veri kümemize göre çıkarılan eşleme

Ham Kategori Miktar
Fruits & Vegetables 10
fruits & veg 20
Fruits&Veg 30
Java'da Veri Temizleme

Standart kategoriyi bulma

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

rawData.forEach((raw, quantity) -> // Standart kategoriyi categories içinde bul ve miktarları topla stockByCategory.merge(categories.get(raw), quantity, Integer::sum));

categories: Standart kategori bakmak için kullanılan eşleme

Ham Kategori Standart Kategori
Fruits & Vegetables FRUITS_AND_VEGETABLES
fruits & veg FRUITS_AND_VEGETABLES
Fruits&Veg FRUITS_AND_VEGETABLES
Java'da Veri Temizleme

Standart kategoriye göre topla

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

 

stockByCategory: rawDatayı categoryMap içinde aradıktan sonraki eşleme

Standart Kategori Miktar
FRUITS_AND_VEGETABLES 60
Java'da Veri Temizleme

Standart kategoriye göre gruplama: özet

1) Veri kümemizden kategori/miktar rawData map'ini çıkar (aşağıda parça)

Ham Kategori Miktar
Fruits & Vegetables 10

2) Standart kategorileri aramak için categories oluştur (aşağıda parça)

Ham Kategori Standart Kategori
Fruits & Vegetables FRUITS_AND_VEGETABLES

3) rawDatayı categories içinde arayıp stockByCategory hesapla (aşağıda parça)

Standart Kategori Miktar
FRUITS_AND_VEGETABLES 60
Java'da Veri Temizleme

Hepsini bir araya getirelim

Temel İçe Aktarımlar

import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
  • Standart kategoriler için bir enum oluştur
  • HashMap ile bir kategori eşlemesi kur
  • Collections.unmodifiableMap ile eşlemeyi değiştirilemez yap
  • .getOrDefault() ile bilinmeyenleri ele al
  • .merge() ile standartlaştırılmış kategorilere göre grupla
Java'da Veri Temizleme

Hadi pratik yapalım!

Java'da Veri Temizleme

Preparing Video For Download...