Spalten bereinigen und standardisieren

Datenbereinigung in Java

Dennis Lee

Software Engineer

Datensatz: Buchverkäufe

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
Datenbereinigung in Java

Datentypen prüfen

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()) {

// Spaltenname und Typ ausgeben System.out.println(colName + ": " + books.column(colName).type()); }
Datenbereinigung in Java

Datentypen prüfen: Ausgabe

Books: STRING
Authors: STRING
Language: STRING
First_Published: INTEGER
Sales_in_Millions: INTEGER
Average_Price: DOUBLE
Datenbereinigung in Java

Zahlenformate konvertieren

// IntColumn in DoubleColumn konvertieren, da Tablesaw INTEGER erkannt hat
DoubleColumn sales = books.intColumn("Sales_in_Millions")
      .asDoubleColumn();

System.out.println("Datentyp der Spalte sales nach Konvertierung: " + sales.type());
Data type of sales column after conversion: DOUBLE
// Eine DoubleColumn kann auch in eine IntColumn konvertiert werden
IntColumn salesAsInt = sales.asIntColumn();
Datenbereinigung in Java

Spalten multiplizieren

DoubleColumn averagePrice = books.doubleColumn("Average_Price");

// Gesamterlös berechnen, indem zwei Spalten multipliziert werden
DoubleColumn totalRevenue = sales.multiply(averagePrice)

.setName("Total_Revenue_Millions");
books.addColumns(totalRevenue); System.out.println("\nZwei Spalten multiplizieren: Sales × Price = Revenue"); System.out.println(books.selectColumns("Books", "Sales_in_Millions", "Average_Price", "Total_Revenue_Millions") .first(4).print());
Datenbereinigung in Java

Spalten multiplizieren: Ausgabe

Zwei Spalten multiplizieren: Sales * Price = Revenue

| Books                               | Sales_in_  | Average_  | Total_Revenue_ |
|                                     | Millions   | Price     | Millions       |
|-------------------------------------|------------|-----------|----------------|
| 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           |
Datenbereinigung in Java

Regex für Klammern

  • Das Muster \\(.*\\) findet Klammern
  • Beispiele: "(Organic)", "(2 pack)", "(Large)"
  • Ergebnis: Aus "Apple (Organic)" wird "Apple"
\\(     // Öffnende Klammer matchen (mit \ escapen)
.*      // Beliebiges Zeichen (.) null- oder mehrmals (*)
\\)     // Schließende Klammer matchen (mit \ escapen)
Datenbereinigung in Java

Sonderzeichen behandeln

// Übersetzungen in Klammern aus Titeln entfernen
StringColumn titlesNoParentheses = titles
        // Für jeden Titel Klammern und umgebende Leerzeichen entfernen
        .map(t -> t.replaceAll("\\(.*\\)", "").trim())
        // Neuen Spaltennamen setzen
        .setName("Titles without parentheses");

System.out.println("Original: " + titles.get(1)); // Erstes Spaltenelement holen
System.out.println("Bereinigt: " + titlesNoParentheses.get(1));
Original: The Little Prince (Le Petit Prince)
Bereinigt: The Little Prince
Datenbereinigung in Java

String-Operationen kombinieren

// Klammern entfernen und in Kleinbuchstaben umwandeln kombinieren
StringColumn titlesCombinedCleaning =
        titles.map(t -> t.replaceAll("\\(.*\\)", "") // Klammern entfernen

.trim() // Umgebende Leerzeichen entfernen
.toLowerCase()) // In Kleinbuchstaben umwandeln .setName("Clean_Titles_Combined"); // Spaltenname setzen System.out.println("Original title: " + titles.get(1)); System.out.println("Title after cleaning: " + titlesCombinedCleaning.get(1));
Original title: The Little Prince (Le Petit Prince)
Title after cleaning: the little prince
Datenbereinigung in Java

Alles zusammenführen

books.column(colName).type(); // Spaltentyp abrufen
books.intColumn("Sales_in_Millions").asDoubleColumn(); // Typ konvertieren
DoubleColumn totalRevenue = sales.multiply(averagePrice) // Spalten multiplizieren
    .setName("Total_Revenue_Millions"); // Neue Spalte benennen
titles.map(String::toLowerCase) // In Kleinbuchstaben umwandeln
    .setName("Lowercase_Titles"); // Neue Spalte benennen
titles.map(t -> t.replaceAll("\\(.*\\)", "").trim()) // Klammern entfernen
    .setName("Titles without parentheses"); // Neue Spalte benennen
Datenbereinigung in Java

Lass uns üben!

Datenbereinigung in Java

Preparing Video For Download...