Limpieza de datos en Java
Dennis Lee
Software Engineer
| 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 |
import tech.tablesaw.api.Table;
import tech.tablesaw.api.DoubleColumn;
import tech.tablesaw.api.StringColumn;
// Cargar el CSV en una tabla de Tablesaw
Table books = Table.read().csv("bestsellers.csv");
// Info básica: nº de filas, nº de columnas, nombres de columnas
System.out.println("N.º de filas: " + books.rowCount());
System.out.println("N.º de columnas: " + books.columnCount());
System.out.println("Nombres de columnas: " + books.columnNames());
N.º de filas: 290
N.º de columnas: 6
Nombres de columnas: [Books, Authors, Language, First_Published, Sales_in_millions]
for (String columnName : books.columnNames()) {// Obtener la columna por nombre y contar valores perdidos (nulos) int missing = books.column(columnName).countMissing();System.out.println(columnName + " valores perdidos: " + missing); }
Books valores perdidos: 0
Authors valores perdidos: 0
Language valores perdidos: 0
First_Published valores perdidos: 0
Sales_in_millions valores perdidos: 2
Average_Price valores perdidos: 0
// countBy() crea una nueva tabla con valores únicos y sus frecuencias
Table languageCounts = books.countBy("Language");
System.out.println("Distribución de idiomas:\n");
// Imprime una tabla formateada con cada idioma y su recuento
System.out.println(languageCounts);
Distribución de idiomas:
| Idioma | Recuento |
|------------|----------|
| English | 210 |
| French | 10 |
| Chinese | 6 |
| Portuguese | 1 |
| Spanish | 3 |
| German | 6 |
| Italian | 5 |
// Obtener la columna numérica como DoubleColumn para operaciones estadísticas DoubleColumn sales = books.doubleColumn("Sales_in_millions");System.out.println("Estadísticas de ventas (millones de copias):\n"); // Valor mínimo de la columna System.out.println("Ventas mín.: " + sales.min() + " millones"); // Valor máximo de la columna System.out.println("Ventas máx.: " + sales.max() + " millones");// Media de todos los valores System.out.println("Ventas media: " + sales.mean() + " millones"); // Medida de dispersión (desviación estándar) System.out.println("Desv. estándar: " + sales.standardDeviation() + " millones");
Estadísticas de ventas (millones de copias):
Ventas mín.: 10.0 millones
Ventas máx.: 600.0 millones
Ventas media: 49.996875 millones
Desv. estándar: 64.6846320839116 millones
System.out.printf("Filas: %d, Columnas: %s", books.rowCount(), books.columnCount());
for (String colName : books.columnNames()) // Para cada columna
System.out.println(books.column(colName).countMissing()); // Contar nulos
StringColumn language = books.stringColumn("Language"); // Obtener columna de texto
Table langCounts = books.countBy("Language"); // Contar categorías
// Calcular estadísticas numéricas
DoubleColumn sales = books.doubleColumn("Sales_in_Millions"); // Obtener columna numérica
System.out.printf("Media: %.1f millones, Mín.: %.1f millones, Máx.: %.1f millones",
sales.mean(), sales.min(), sales.max());
Filas: 290, Columnas: 6
Books valores perdidos: 0
Authors valores perdidos: 0
| Language | Count |
|------------|-------|
| English | 210 |
| French | 10 |
Media: 50.0 millones, Mín.: 10.0 millones, Máx.: 600.0 millones
Limpieza de datos en Java