Filtrage de colonnes et agrégation

Nettoyer des données en Java

Dennis Lee

Software Engineer

Jeu de données des ventes de livres

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
Nettoyer des données en Java

Définir des conditions de filtrage

import tech.tablesaw.api.Table;
import tech.tablesaw.selection.Selection;
Table books = Table.read().csv("bestsellers.csv");
// Condition pour les livres avec plus de 70 M de ventes
Selection highSales = books.intColumn("Sales_in_Millions").isGreaterThan(70);

// Condition pour les livres en anglais Selection english = books.stringColumn("Language").isEqualTo("English");
// Condition pour les livres publiés après 1950 Selection recentlyPublished = books.intColumn("First_Published").isGreaterThan(1950);
// Similaires : .isLessThan(), .isLessThanOrEqualTo(), .isGreaterThanOrEqualTo()
Nettoyer des données en Java

Filtrer selon des conditions

// Filtrer avec une condition directe
books.where(books.intColumn("Sales_in_Millions").isGreaterThan(70));

// Filtrer avec une Selection prédéfinie books.where(highSales);
// Combiner plusieurs conditions avec .and() Table popular = books.where(highSales) // Ventes > 70 M .and(english) // Langue : anglais .and(recentlyPublished); // Après 1950 .sortDescendingOn("Sales_in_Millions"); // Trier par Sales_in_Millions System.out.println("Livres modernes à fortes ventes en anglais:\n"); System.out.println(modern.select("Books", "First_Published", "Total_Revenue"));
Nettoyer des données en Java

Filtrer selon des conditions : sorties

Livres modernes à fortes ventes en anglais :

| Book                                     | Sales_in_Millions | First_Published |
|------------------------------------------|-------------------|-----------------|
| Harry Potter and the Philosopher's Stone | 120               | 1997            |
| The Da Vinci Code                        | 80                | 2003            |
| Harry Potter and the Chamber of Secrets  | 77                | 1998            |
Nettoyer des données en Java

Résumer par la moyenne

// Importer la fonction de moyenne
import static tech.tablesaw.aggregate.AggregateFunctions.mean;
Table overallMean = books.summarize("Sales_in_Millions", mean).apply();
System.out.println("\nMoyenne globale des ventes : \n" + overallMean);
Moyenne globale des ventes :

| Mean [Sales_in_Millions]  |
|---------------------------|
|        73.03225806451614  |
Nettoyer des données en Java

Agrégation par groupes

// Calculer les ventes moyennes par langue (anglais, français, etc.)
Table salesByLanguage = 
        books.summarize("Sales_in_Millions", mean)  // Calculer la moyenne

.by("Language"); // Regrouper par langue // Afficher les 5 premières langues System.out.println("Ventes moyennes par langue:\n"); System.out.println(salesByLanguage.first(5));
Nettoyer des données en Java

Agrégation par groupes : sorties

Ventes moyennes par langue :

| Language   | Mean [Sales_in_Millions] |
|------------|--------------------------|
| English    | 69.96                    |
| French     | 200.0                    |
| Chinese    | 100.0                    |
| Portuguese | 65.0                     |
| Spanish    | 50.0                     |
Nettoyer des données en Java

Combiner filtrage et agrégation

import static tech.tablesaw.aggregate.AggregateFunctions.sum;
// Filtrer et résumer les ventes par langue
Table bestsellersByLanguage = books
        // Sélectionner les livres après 1950
        .where(books.intColumn("First_Published").isGreaterThan(1950))

// Calculer la somme des ventes .summarize("Sales_in_Millions", sum)
// Regrouper les résultats par langue .by("Language"); System.out.println("Best-sellers modernes (après 1950) par langue:\n"); System.out.println(bestsellersByLanguage);
Nettoyer des données en Java

Combiner filtrage et agrégation : sorties

Best-sellers modernes (après 1950) par langue :

| Language   | Sum [Sales_in_Millions] |
|------------|-------------------------|
| English    | 1071                    |
| Portuguese | 65                      |
| Spanish    | 50                      |
| Italian    | 50                      |
Nettoyer des données en Java

Tout assembler

books.where(sales.isGreaterThan(150)); // Filtrage simple avec une condition
books.where(highSales.and(english)); // Plusieurs conditions - combiner avec .and()
// Agrégation de base
books.summarize("Sales_in_Millions", mean)       // Calculer la moyenne
    .by("Language");                             // Regrouper par langue
// Opérations combinées
books.where(books.intColumn("First_Published").isGreaterThan(1950)) // Filtrer
    .summarize("Sales_in_Millions", mean) // Puis résumer
    .by("Language"); // Enfin regrouper
Nettoyer des données en Java

Passons à la pratique !

Nettoyer des données en Java

Preparing Video For Download...