Validación de rangos

Limpieza de datos en Java

Dennis Lee

Software Engineer

Dataset de ventas de chocolate

  • Trabajamos con un dataset de ventas de chocolate a lo largo del capítulo
  • Modificamos columnas como importe y fecha para ilustrar la validación de datos

 

Vendedor/a País Producto Fecha Importe Cajas enviadas
James Rudeforth UK Mint Chip Choco 4-Jan-22 $5,320 180
Van Tuxwell India 85% Dark Bars 1-Aug-22 $7,896 94
Gigi Bohling India Peanut Butter Cubes 7-Jul-22 $4,501 91
Jan Morforth Australia Peanut Butter Cubes 27-Apr-22 $12,726 342
Jehu Fischer UK Peanut Butter Cubes 24-Feb-22 $13,685 184
Limpieza de datos en Java

Por qué necesitamos validar rangos

// Extraímos estos importes y fechas del dataset
List<Double> salesAmounts = Arrays.asList(5320.0, 7896.0, 4501.0,
                                          12726.0, 13685.0);
List<String> saleDates = Arrays.asList("4-Jan-22", "1-Aug-22", "7-Jul-22", 
                                       "27-Apr-22", "24-Feb-22");

System.out.println("Sales amounts: " + salesAmounts);
System.out.println("Sale dates: " + saleDates);
Sales amounts: [5320.0, 7896.0, 4501.0, 12726.0, 13685.0]
Sale dates: [4-Jan-22, 1-Aug-22, 7-Jul-22, 27-Apr-22, 24-Feb-22]
Limpieza de datos en Java

Encontrar límites del rango

// Obtener el importe mínimo
Double minSale = Collections.min(salesAmounts);
// Obtener el importe máximo
Double maxSale = Collections.max(salesAmounts);

System.out.println("Range: $" + minSale + " - $" + maxSale);
Range: $4501.0 - $13685.0
Limpieza de datos en Java

Definir un rango válido

// El importe no debe ser menor que 0.0
Double lowerThreshold = 0.0;
// El importe no debe ser mayor que 15000.0
Double upperThreshold = 15000.0;

for (Double amount : salesAmounts) { // Verifica que cada importe esté en el rango if (amount >= lowerThreshold && amount <= upperThreshold) { System.out.println(amount + " is within range"); } }
Limpieza de datos en Java

Definir un rango válido: salidas

5320.0 is within range
7896.0 is within range
4501.0 is within range
12726.0 is within range
13685.0 is within range
Limpieza de datos en Java

Definir categorías por rango

import org.apache.commons.lang3.Range;
// Categoría de ventas bajas: $0 - $5000
Range<Double> lowSales = Range.between(0.0, 5000.0);
// Categoría de ventas medias: $5000 - $10000
Range<Double> mediumSales = Range.between(5000.0, 10000.0);
// Categoría de ventas altas: $10000 - $15000
Range<Double> highSales = Range.between(10000.0, 15000.0);
Limpieza de datos en Java

Comprobar categorías por rango

for (Double amount : salesAmounts) {
    if (lowSales.contains(amount)) { // ¿Está en ventas bajas?
        System.out.println("$" + amount + " - Ventas bajas");
    } else if (mediumSales.contains(amount)) { // ¿Está en ventas medias?
        System.out.println("$" + amount + " - Ventas medias");
    } else if (highSales.contains(amount)) { // ¿Está en ventas altas?
        System.out.println("$" + amount + " - Ventas altas");
    } else { // ¿Fuera del rango esperado?
        System.out.println("$" + amount + " - Fuera del rango esperado");
    }
}
Limpieza de datos en Java

Comprobar categorías: salidas

Categorización de ventas:
$5320.0 - Ventas medias
$7896.0 - Ventas medias
$4501.0 - Ventas bajas
$12726.0 - Ventas altas
$13685.0 - Ventas altas
Limpieza de datos en Java

Validar fechas

// d-MMM-yy: día del mes (d), mes abreviado (MMM), año de dos dígitos (yy)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d-MMM-yy");
LocalDate startDate = LocalDate.of(2022, 1, 1); // Inicio de 2022
LocalDate endDate = LocalDate.of(2022, 12, 31); // Fin de 2022

for (String dateStr : saleDates) { LocalDate saleDate = LocalDate.parse(dateStr, formatter);
// Fechas válidas: después de startDate y antes de endDate boolean isValid = saleDate.isAfter(startDate) && saleDate.isBefore(endDate); System.out.println(dateStr + " is valid: " + isValid); }
Limpieza de datos en Java

Validar fechas: salidas

4-Jan-22 is valid: true
1-Aug-22 is valid: true
7-Jul-22 is valid: true
27-Apr-22 is valid: true
24-Feb-22 is valid: true
Limpieza de datos en Java

Resumen

  • Import clave: org.apache.commons.lang3.Range
  • Obtener mínimo y máximo: Collections.min(salesAmounts), Collections.max(salesAmounts)
  • Definir categorías por rango: Range.between(0.0, 5000.0)
  • Comprobar categorías: lowSales.contains(amount)
  • Validar fechas: saleDate.isAfter(startDate), saleDate.isBefore(endDate)
Limpieza de datos en Java

¡Vamos a practicar!

Limpieza de datos en Java

Preparing Video For Download...