Filtrage de colonnes et agrégation

Nettoyer des données en Java

Dennis Lee

Software Engineer

Ensemble de données sur les ventes de livres

Livres 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

Définir des conditions de filtrage

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

// Condition : livres écrits en anglais Selection english = books.stringColumn("Language").isEqualTo("English");
// Condition : 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 seule condition directement
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("Modern high-revenue English books:\n"); System.out.println(modern.select("Books", "First_Published", "Total_Revenue"));
Nettoyer des données en Java

Filtrer selon des conditions : résultats

Modern high-revenue English books:

| 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 calcul de la moyenne
import static tech.tablesaw.aggregate.AggregateFunctions.mean;
Table overallMean = books.summarize("Sales_in_Millions", mean).apply();
System.out.println("\nMoyenne générale des ventes : \n" + overallMean);
Overall mean sales:

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

Agrégation par groupes

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

.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 : résultats

Average sales by language:

| 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("Succès de librairie modernes (après 1950) par langue :\n"); System.out.println(bestsellersByLanguage);
Nettoyer des données en Java

Combiner filtrage et agrégation : résultats

Modern bestsellers (post-1950) by language:

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

Mettre le tout ensemble

books.where(sales.isGreaterThan(150)); // Filtrage de base avec une seule condition
books.where(highSales.and(english)); // Plusieurs conditions : combiner avec .and()
// Agrégation de base
books.summarize("Sales_in_Millions", mean)       // Calculer les moyennes
    .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...