Kolommen opschonen en standaardiseren

Data opschonen in Java

Dennis Lee

Software Engineer

Dataset met boekverkopen

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
Data opschonen in Java

Datatypes onderzoeken

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

// Print kolomnaam en type System.out.println(colName + ": " + books.column(colName).type()); }
Data opschonen in Java

Datatypes onderzoeken: output

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

Numerieke formaten converteren

// Zet IntColumn om naar DoubleColumn omdat Tablesaw het als INTEGER zag
DoubleColumn sales = books.intColumn("Sales_in_Millions")
      .asDoubleColumn();

System.out.println("Data type of sales column after conversion: " + sales.type());
Data type of sales column after conversion: DOUBLE
// Je kunt een DoubleColumn ook omzetten naar een IntColumn
IntColumn salesAsInt = sales.asIntColumn();
Data opschonen in Java

Kolommen vermenigvuldigen

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

// Bereken totale omzet door twee kolommen te vermenigvuldigen
DoubleColumn totalRevenue = sales.multiply(averagePrice)

.setName("Total_Revenue_Millions");
books.addColumns(totalRevenue); System.out.println("\nTwee kolommen vermenigvuldigen: Sales × Price = Revenue"); System.out.println(books.selectColumns("Books", "Sales_in_Millions", "Average_Price", "Total_Revenue_Millions") .first(4).print());
Data opschonen in Java

Kolommen vermenigvuldigen: output

Twee kolommen vermenigvuldigen: 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           |
Data opschonen in Java

Regex voor haakjes

  • Het patroon \\(.*\\) matcht tekst tussen haakjes
  • Voorbeelden: "(Organic)", "(2 pack)", "(Large)"
  • Resultaat: "Apple (Organic)" wordt "Apple"
\\(     // Openend haakje matchen (ge-escaped met \)
.*      // Match elk teken (.) nul of meer keer (*)
\\)     // Sluitend haakje matchen (ge-escaped met \)
Data opschonen in Java

Speciale tekens afhandelen

// Verwijder vertalingen tussen haakjes uit titels
StringColumn titlesNoParentheses = titles
        // Voor elke titel: verwijder haakjes en omliggende spaties
        .map(t -> t.replaceAll("\\(.*\\)", "").trim())
        // Stel de nieuwe kolomnaam in
        .setName("Titles without parentheses");

System.out.println("Original: " + titles.get(1)); // Pak het eerste item
System.out.println("Cleaned: " + titlesNoParentheses.get(1));
Original: The Little Prince (Le Petit Prince)
Cleaned: The Little Prince
Data opschonen in Java

Tekenbewerkingen combineren

// Combineer: haakjes verwijderen en naar lowercase
StringColumn titlesCombinedCleaning =
        titles.map(t -> t.replaceAll("\\(.*\\)", "") // Haakjes verwijderen

.trim() // Omliggende spatie weg
.toLowerCase()) // Naar lowercase .setName("Clean_Titles_Combined"); // Kolomnaam instellen 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
Data opschonen in Java

Alles combineren

books.column(colName).type(); // Haal kolomtype op
books.intColumn("Sales_in_Millions").asDoubleColumn(); // Type converteren
DoubleColumn totalRevenue = sales.multiply(averagePrice) // Kolommen vermenigvuldigen
    .setName("Total_Revenue_Millions"); // Nieuwe kolomnaam
titles.map(String::toLowerCase) // Naar lowercase
    .setName("Lowercase_Titles"); // Nieuwe kolomnaam
titles.map(t -> t.replaceAll("\\(.*\\)", "").trim()) // Haakjes verwijderen
    .setName("Titles without parentheses"); // Nieuwe kolomnaam
Data opschonen in Java

Laten we oefenen!

Data opschonen in Java

Preparing Video For Download...