Filtrado de columnas y agregación

Limpieza de datos en Java

Dennis Lee

Software Engineer

Datos de ventas de libros

Books Authors Language First_Published Sales_in_Millions Average_Price
A Tale of Two Cities Charles Dickens English 1859 200.0 12.99
The Little Prince (Le Petit Prince) Antoine de Saint-Exupéry French 1943 200.0 15.50
Harry Potter and the Philosopher's Stone J. K. Rowling English 1997 120.0 19.99
And Then There Were None Agatha Christie English 1939 100.0 14.95
Limpieza de datos en Java

Definir condiciones de filtrado

import tech.tablesaw.api.Table;
import tech.tablesaw.selection.Selection;
Table books = Table.read().csv("bestsellers.csv");
// Condición: libros con ventas > 70M
Selection highSales = books.intColumn("Sales_in_Millions").isGreaterThan(70);

// Condición: libros en inglés Selection english = books.stringColumn("Language").isEqualTo("English");
// Condición: publicados después de 1950 Selection recentlyPublished = books.intColumn("First_Published").isGreaterThan(1950);
// Similar: .isLessThan(), .isLessThanOrEqualTo(), .isGreaterThanOrEqualTo()
Limpieza de datos en Java

Filtrar según condiciones

// Filtrar con una única condición directamente
books.where(books.intColumn("Sales_in_Millions").isGreaterThan(70));

// Filtrar con una Selection predefinida books.where(highSales);
// Combinar varias condiciones con .and() Table popular = books.where(highSales) // Ventas > 70M .and(english) // Idioma: inglés .and(recentlyPublished); // Después de 1950 .sortDescendingOn("Sales_in_Millions"); // Ordenar por Sales_in_Millions System.out.println("Libros modernos de alto ingreso en inglés:\n"); System.out.println(modern.select("Books", "First_Published", "Total_Revenue"));
Limpieza de datos en Java

Filtrar según condiciones: salidas

Libros modernos de alto ingreso en inglés:

| Book                                     | Sales_in_Millions | First_Published |
|------------------------------------------|-------------------|-----------------|
| Harry Potter and the Philosopher's Stone | 120               | 1997            |
| The Da Vinci Code                        | 80                | 2003            |
| Harry Potter and the Chamber of Secrets  | 77                | 1998            |
Limpieza de datos en Java

Resumir por media

// Importar la función de media
import static tech.tablesaw.aggregate.AggregateFunctions.mean;
Table overallMean = books.summarize("Sales_in_Millions", mean).apply();
System.out.println("\nMedia global de ventas: \n" + overallMean);
Media global de ventas:

| Mean [Sales_in_Millions]  |
|---------------------------|
|        73.03225806451614  |
Limpieza de datos en Java

Agregación por grupos

// Calcular ventas medias por idioma (inglés, francés, etc.)
Table salesByLanguage = 
        books.summarize("Sales_in_Millions", mean)  // Calcular medias

.by("Language"); // Agrupar por idioma // Mostrar los 5 primeros idiomas System.out.println("Ventas medias por idioma:\n"); System.out.println(salesByLanguage.first(5));
Limpieza de datos en Java

Agregación por grupos: salidas

Ventas medias por idioma:

| Language   | Mean [Sales_in_Millions] |
|------------|--------------------------|
| English    | 69.96                    |
| French     | 200.0                    |
| Chinese    | 100.0                    |
| Portuguese | 65.0                     |
| Spanish    | 50.0                     |
Limpieza de datos en Java

Combinar filtrado y agregación

import static tech.tablesaw.aggregate.AggregateFunctions.sum;
// Filtrar y resumir ventas por idioma
Table bestsellersByLanguage = books
        // Seleccionar libros posteriores a 1950
        .where(books.intColumn("First_Published").isGreaterThan(1950))

// Calcular ventas totales .summarize("Sales_in_Millions", sum)
// Agrupar resultados por idioma .by("Language"); System.out.println("Superventas modernos (post-1950) por idioma:\n"); System.out.println(bestsellersByLanguage);
Limpieza de datos en Java

Combinar filtrado y agregación: salidas

Superventas modernos (post-1950) por idioma:

| Language   | Sum [Sales_in_Millions] |
|------------|-------------------------|
| English    | 1071                    |
| Portuguese | 65                      |
| Spanish    | 50                      |
| Italian    | 50                      |
Limpieza de datos en Java

Todo junto

books.where(sales.isGreaterThan(150)); // Filtrado básico con una condición
books.where(highSales.and(english)); // Varias condiciones: combina con .and()
// Agregación básica
books.summarize("Sales_in_Millions", mean)       // Calcular medias
    .by("Language");                             // Agrupar por idioma
// Operaciones combinadas
books.where(books.intColumn("First_Published").isGreaterThan(1950)) // Filtrar
    .summarize("Sales_in_Millions", mean) // Luego resumir
    .by("Language"); // Finalmente agrupar
Limpieza de datos en Java

¡Vamos a practicar!

Limpieza de datos en Java

Preparing Video For Download...