Nettoyage et normalisation des colonnes

Nettoyer des données en Java

Dennis Lee

Software Engineer

Ensemble sur les ventes de livres

Livres Auteures et auteurs Langue Première_parution Ventes_en_millions Prix_moyen
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
Nettoyer des données en Java

Examiner les types de données

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

// Afficher le nom de la colonne et son type System.out.println(colName + ": " + books.column(colName).type()); }
Nettoyer des données en Java

Types de données : résultats

Books: STRING
Authors: STRING
Language: STRING
First_Published: INTEGER
Sales_in_Millions: INTEGER
Average_Price: DOUBLE
Nettoyer des données en Java

Convertir des formats numériques

// Convertir IntColumn en DoubleColumn car Tablesaw l'a inférée comme INTEGER
DoubleColumn sales = books.intColumn("Sales_in_Millions")
      .asDoubleColumn();

System.out.println("Type de la colonne sales après conversion: " + sales.type());
Data type of sales column after conversion: DOUBLE
// Il est possible de convertir une DoubleColumn en IntColumn
IntColumn salesAsInt = sales.asIntColumn();
Nettoyer des données en Java

Multiplier des colonnes

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

// Calculer les revenus totaux en multipliant deux colonnes
DoubleColumn totalRevenue = sales.multiply(averagePrice)

.setName("Total_Revenue_Millions");
books.addColumns(totalRevenue); System.out.println("\nMultiplier deux colonnes : Ventes × Prix = Revenus"); System.out.println(books.selectColumns("Books", "Sales_in_Millions", "Average_Price", "Total_Revenue_Millions") .first(4).print());
Nettoyer des données en Java

Multiplier des colonnes : résultats

Multiplying two columns: 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           |
Nettoyer des données en Java

Regex pour repérer les parenthèses

  • Le motif \\(.*\\) correspond à des parenthèses
  • Exemples correspondants : "(Organic)", "(2 pack)", "(Large)"
  • Résultat : "Apple (Organic)" devient "Apple"
\\(     // Faire correspondre la parenthèse ouvrante (échappée avec \)
.*      // Faire correspondre tout caractère (.) zéro fois ou plus (*)
\\)     // Faire correspondre la parenthèse fermante (échappée avec \)
Nettoyer des données en Java

Gérer les caractères spéciaux

// Retirer les traductions entre parenthèses des titres
StringColumn titlesNoParentheses = titles
        // Pour chaque titre, enlever les parenthèses et les espaces adjacents
        .map(t -> t.replaceAll("\\(.*\\)", "").trim())
        // Définir le nouveau nom de colonne
        .setName("Titles without parentheses");

System.out.println("Original: " + titles.get(1)); // Obtenir le premier élément de la colonne
System.out.println("Nettoyé: " + titlesNoParentheses.get(1));
Original: The Little Prince (Le Petit Prince)
Cleaned: The Little Prince
Nettoyer des données en Java

Combiner des opérations sur les chaînes

// Combiner le retrait des parenthèses et la conversion en minuscules
StringColumn titlesCombinedCleaning =
        titles.map(t -> t.replaceAll("\\(.*\\)", "") // Retirer les parenthèses

.trim() // Retirer les espaces adjacents
.toLowerCase()) // Convertir en minuscules .setName("Clean_Titles_Combined"); // Nommer la colonne System.out.println("Titre original: " + titles.get(1)); System.out.println("Titre après nettoyage: " + titlesCombinedCleaning.get(1));
Original title: The Little Prince (Le Petit Prince)
Title after cleaning: the little prince
Nettoyer des données en Java

Tout rassembler

books.column(colName).type(); // Obtenir le type de la colonne
books.intColumn("Sales_in_Millions").asDoubleColumn(); // Convertir le type
DoubleColumn totalRevenue = sales.multiply(averagePrice) // Multiplier des colonnes
    .setName("Total_Revenue_Millions"); // Nommer la nouvelle colonne
titles.map(String::toLowerCase) // Convertir en minuscules
    .setName("Lowercase_Titles"); // Nommer la nouvelle colonne
titles.map(t -> t.replaceAll("\\(.*\\)", "").trim()) // Retirer les parenthèses
    .setName("Titles without parentheses"); // Nommer la nouvelle colonne
Nettoyer des données en Java

Passons à la pratique !

Nettoyer des données en Java

Preparing Video For Download...