Limpieza de datos en Java
Dennis Lee
Software Engineer
| Libros | Autores | Idioma | 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 |
import tech.tablesaw.api.Table;
import tech.tablesaw.api.StringColumn;
import tech.tablesaw.api.DoubleColumn;
Table books = Table.read().csv("bestsellers.csv"); for (String colName : books.columnNames()) {// Imprimir nombre de columna y su tipo System.out.println(colName + ": " + books.column(colName).type()); }
Books: STRING
Authors: STRING
Language: STRING
First_Published: INTEGER
Sales_in_Millions: INTEGER
Average_Price: DOUBLE
// Convertir IntColumn a DoubleColumn porque Tablesaw lo inferió como INTEGER
DoubleColumn sales = books.intColumn("Sales_in_Millions")
.asDoubleColumn();
System.out.println("Tipo de datos de la columna sales tras la conversión: " + sales.type());
Data type of sales column after conversion: DOUBLE
// Es posible convertir un DoubleColumn a un IntColumn
IntColumn salesAsInt = sales.asIntColumn();
DoubleColumn averagePrice = books.doubleColumn("Average_Price"); // Calcular ingresos totales multiplicando dos columnas DoubleColumn totalRevenue = sales.multiply(averagePrice).setName("Total_Revenue_Millions");books.addColumns(totalRevenue); System.out.println("\nMultiplicar dos columnas: Ventas × Precio = Ingresos"); System.out.println(books.selectColumns("Books", "Sales_in_Millions", "Average_Price", "Total_Revenue_Millions") .first(4).print());
Multiplicar dos columnas: Ventas * Precio = Ingresos
| Libros | Ventas_en_ | Precio | Ingresos_totales_ |
| | millones | promedio | millones |
|-------------------------------------|------------|-----------|-------------------|
| A Tale of Two Cities | 200 | 12.99 | 2598 |
| The Little Prince (Le Petit Prince) | 200 | 15.50 | 3100 |
| Harry Potter and | 120 | 19.99 | 2398.80 |
| the Philosopher's Stone | | | |
| And Then There Were None | 100 | 14.95 | 1495 |
\\(.*\\) coincide con paréntesis\\( // Abrir paréntesis (escapado con \)
.* // Cualquier carácter (.) cero o más veces (*)
\\) // Cerrar paréntesis (escapado con \)
// Quitar traducciones entre paréntesis de los títulos
StringColumn titlesNoParentheses = titles
// Para cada título, quitar paréntesis y espacios alrededor
.map(t -> t.replaceAll("\\(.*\\)", "").trim())
// Asignar nombre a la nueva columna
.setName("Titles without parentheses");
System.out.println("Original: " + titles.get(1)); // Primer elemento de la columna
System.out.println("Limpio: " + titlesNoParentheses.get(1));
Original: The Little Prince (Le Petit Prince)
Limpio: The Little Prince
// Combinar quitar paréntesis y convertir a minúsculas StringColumn titlesCombinedCleaning = titles.map(t -> t.replaceAll("\\(.*\\)", "") // Quitar paréntesis.trim() // Quitar espacios alrededor.toLowerCase()) // Convertir a minúsculas .setName("Clean_Titles_Combined"); // Nombre de la columna System.out.println("Título original: " + titles.get(1)); System.out.println("Título tras limpieza: " + titlesCombinedCleaning.get(1));
Título original: The Little Prince (Le Petit Prince)
Título tras limpieza: the little prince
books.column(colName).type(); // Obtener el tipo de columna
books.intColumn("Sales_in_Millions").asDoubleColumn(); // Convertir tipo
DoubleColumn totalRevenue = sales.multiply(averagePrice) // Multiplicar columnas
.setName("Total_Revenue_Millions"); // Nombrar la nueva columna
titles.map(String::toLowerCase) // Convertir a minúsculas
.setName("Lowercase_Titles"); // Nombrar la nueva columna
titles.map(t -> t.replaceAll("\\(.*\\)", "").trim()) // Quitar paréntesis
.setName("Titles without parentheses"); // Nombrar la nueva columna
Limpieza de datos en Java