Filtrado de columnas y agregación

Limpieza de datos en Java

Dennis Lee

Software Engineer

Conjunto de 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 para filtrar

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

// Condición para libros escritos en inglés Selection english = books.stringColumn("Language").isEqualTo("English");
// Condición para libros 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

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

// Filtra usando una Selection predefinida books.where(highSales);
// Combina 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"); // Ordena por Sales_in_Millions System.out.println("Modern high-revenue English books:\n"); System.out.println(modern.select("Books", "First_Published", "Total_Revenue"));
Limpieza de datos en Java

Filtrar según condiciones: resultados

Modern high-revenue English books:

| 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 con la media

// Importa la función para calcular la media
import static tech.tablesaw.aggregate.AggregateFunctions.mean;
Table overallMean = books.summarize("Sales_in_Millions", mean).apply();
System.out.println("\nOverall mean sales: \n" + overallMean);
Overall mean sales:

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

Agregar por grupos

// Calcula las ventas medias por cada grupo de idioma (p. ej., English, French, etc.)
Table salesByLanguage = 
        books.summarize("Sales_in_Millions", mean)  // Calcula medias

.by("Language"); // Divide por idioma // Muestra los 5 primeros grupos de idioma System.out.println("Average sales by language:\n"); System.out.println(salesByLanguage.first(5));
Limpieza de datos en Java

Agregar por grupos: resultados

Average sales by language:

| 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;
// Filtra y resume ventas por idioma
Table bestsellersByLanguage = books
        // Selecciona libros posteriores a 1950
        .where(books.intColumn("First_Published").isGreaterThan(1950))

// Calcula ventas totales .summarize("Sales_in_Millions", sum)
// Agrupa los resultados por idioma .by("Language"); System.out.println("Modern bestsellers (post-1950) by language:\n"); System.out.println(bestsellersByLanguage);
Limpieza de datos en Java

Combinar filtrado y agregación: resultados

Modern bestsellers (post-1950) by language:

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

Juntarlo todo

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

¡Vamos a practicar!

Limpieza de datos en Java

Preparing Video For Download...