Nettoyage et standardisation des colonnes

Nettoyer des données en Java

Dennis Lee

Software Engineer

Jeu de données des ventes de livres

Livres Auteurs Langue 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
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

Examiner les types de données : sorties

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 en 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 le revenu total en multipliant deux colonnes
DoubleColumn totalRevenue = sales.multiply(averagePrice)

.setName("Total_Revenue_Millions");
books.addColumns(totalRevenue); System.out.println("\nMultiplying two columns: Sales × Price = Revenue"); System.out.println(books.selectColumns("Books", "Sales_in_Millions", "Average_Price", "Total_Revenue_Millions") .first(4).print());
Nettoyer des données en Java

Multiplication de colonnes : sorties

Multiplier deux colonnes : Ventes * Prix = Revenu

| Livres                              | Ventes_en_ | Prix_moyen | Revenu_total_  |
|                                     | millions   |            | 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 aux parenthèses
  • Exemples : "(Organic)", "(2 pack)", "(Large)"
  • Résultat : "Apple (Organic)" devient "Apple"
\\(     // Correspond à la parenthèse ouvrante (échappée avec \)
.*      // Correspond à tout caractère (.) zéro ou plusieurs fois (*)
\\)     // Correspond à la parenthèse fermante (échappée avec \)
Nettoyer des données en Java

Gérer les caractères spéciaux

// Supprimer les traductions entre parenthèses des titres
StringColumn titlesNoParentheses = titles
        // Pour chaque titre, supprimer les parenthèses et les espaces autour
        .map(t -> t.replaceAll("\\(.*\\)", "").trim())
        // Définir le nom de la nouvelle colonne
        .setName("Titres sans parenthèses");

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

Combiner des opérations sur chaînes

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

.trim() // Supprimer les espaces autour
.toLowerCase()) // Convertir en minuscules .setName("Clean_Titles_Combined"); // Nom de colonne 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
Nettoyer des données en Java

Tout rassembler

books.column(colName).type(); // Obtenir le type de 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()) // Supprimer les parenthèses
    .setName("Titres sans parenthèses"); // Nommer la nouvelle colonne
Nettoyer des données en Java

Passons à la pratique !

Nettoyer des données en Java

Preparing Video For Download...