Фільтрування стовпців і агрегація

Очищення даних у Java

Dennis Lee

Software Engineer

Набір даних про продажі книжок

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
Очищення даних у Java

Визначення умов для фільтрування

import tech.tablesaw.api.Table;
import tech.tablesaw.selection.Selection;
Table books = Table.read().csv("bestsellers.csv");
// Умова для книжок із продажами понад 70 млн
Selection highSales = books.intColumn("Sales_in_Millions").isGreaterThan(70);

// Умова для книжок англійською мовою Selection english = books.stringColumn("Language").isEqualTo("English");
// Умова для книжок, виданих після 1950 року Selection recentlyPublished = books.intColumn("First_Published").isGreaterThan(1950);
// Подібні: .isLessThan(), .isLessThanOrEqualTo(), .isGreaterThanOrEqualTo()
Очищення даних у Java

Фільтрування за умовами

// Фільтрування однією умовою безпосередньо
books.where(books.intColumn("Sales_in_Millions").isGreaterThan(70));

// Фільтрування за заздалегідь створеним Selection books.where(highSales);
// Поєднання кількох умов за допомогою .and() Table popular = books.where(highSales) // Sales > 70M .and(english) // English language .and(recentlyPublished); // After 1950 .sortDescendingOn("Sales_in_Millions"); // Sort by Sales_in_Millions System.out.println("Modern high-revenue English books:\n"); System.out.println(modern.select("Books", "First_Published", "Total_Revenue"));
Очищення даних у Java

Фільтрування за умовами: результати

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            |
Очищення даних у Java

Підсумовування за середнім

// Імпорт функції обчислення середнього
import static tech.tablesaw.aggregate.AggregateFunctions.mean;
Table overallMean = books.summarize("Sales_in_Millions", mean).apply();
System.out.println("\nOverall mean sales: \n" + overallMean);
Overall mean sales:

| Mean [Sales_in_Millions]  |
|---------------------------|
|        73.03225806451614  |
Очищення даних у Java

Агрегація за групами

// Обчисліть середні продажі для кожної мовної групи (наприклад, English, French тощо)
Table salesByLanguage = 
        books.summarize("Sales_in_Millions", mean)  // Обчислити середні

.by("Language"); // Розбити за мовою // Показати перші 5 мовних груп System.out.println("Average sales by language:\n"); System.out.println(salesByLanguage.first(5));
Очищення даних у Java

Агрегація за групами: результати

Average sales by language:

| Language   | Mean [Sales_in_Millions] |
|------------|--------------------------|
| English    | 69.96                    |
| French     | 200.0                    |
| Chinese    | 100.0                    |
| Portuguese | 65.0                     |
| Spanish    | 50.0                     |
Очищення даних у Java

Поєднання фільтрування й агрегації

import static tech.tablesaw.aggregate.AggregateFunctions.sum;
// Відфільтруйте та підсумуйте продажі за мовою
Table bestsellersByLanguage = books
        // Вибрати книжки після 1950 року
        .where(books.intColumn("First_Published").isGreaterThan(1950))

// Обчислити суму продажів .summarize("Sales_in_Millions", sum)
// Згрупувати результати за мовою .by("Language"); System.out.println("Modern bestsellers (post-1950) by language:\n"); System.out.println(bestsellersByLanguage);
Очищення даних у Java

Поєднання фільтрування й агрегації: результати

Modern bestsellers (post-1950) by language:

| Language   | Sum [Sales_in_Millions] |
|------------|-------------------------|
| English    | 1071                    |
| Portuguese | 65                      |
| Spanish    | 50                      |
| Italian    | 50                      |
Очищення даних у Java

Підсумуємо все разом

books.where(sales.isGreaterThan(150)); // Базове фільтрування однією умовою
books.where(highSales.and(english)); // Кілька умов — поєднуйте через .and()
// Базова агрегація
books.summarize("Sales_in_Millions", mean)       // Обчислити середні
    .by("Language");                             // Групувати за мовою
// Комбіновані операції
books.where(books.intColumn("First_Published").isGreaterThan(1950)) // Фільтрувати
    .summarize("Sales_in_Millions", mean) // Потім підсумувати
    .by("Language"); // Насамкінець згрупувати
Очищення даних у Java

Давайте потренуємось!

Очищення даних у Java

Preparing Video For Download...