Очищення та уніфікація стовпців

Очищення даних у 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.api.StringColumn;
import tech.tablesaw.api.DoubleColumn;
Table books = Table.read().csv("bestsellers.csv");

for (String colName : books.columnNames()) {

// Вивести назву стовпця та його тип System.out.println(colName + ": " + books.column(colName).type()); }
Очищення даних у Java

Перевірка типів даних: результати

Books: STRING
Authors: STRING
Language: STRING
First_Published: INTEGER
Sales_in_Millions: INTEGER
Average_Price: DOUBLE
Очищення даних у Java

Перетворення числових форматів

// Перетворіть IntColumn на DoubleColumn, оскільки Tablesaw розпізнав його як INTEGER
DoubleColumn sales = books.intColumn("Sales_in_Millions")
      .asDoubleColumn();

System.out.println("Data type of sales column after conversion: " + sales.type());
Data type of sales column after conversion: DOUBLE
// Можна перетворити DoubleColumn на IntColumn
IntColumn salesAsInt = sales.asIntColumn();
Очищення даних у Java

Множення стовпців

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

// Обчислити загальну виручку як добуток двох стовпців
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());
Очищення даних у Java

Множення стовпців: результати

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

Regex для пошуку дужок

  • Шаблон \\(.*\\) відповідає дужкам
  • Приклади збігів: "(Organic)", "(2 pack)", "(Large)"
  • Результат: "Apple (Organic)" стає "Apple"
\\(     // Збіг з відкривною дужкою (екрановано \)
.*      // Будь-який символ (.) нуль або більше разів (*)
\\)     // Збіг із закривною дужкою (екрановано \)
Очищення даних у Java

Обробка спеціальних символів

// Приберіть переклади в дужках із назв
StringColumn titlesNoParentheses = titles
        // Для кожної назви видаліть дужки та зайві пробіли
        .map(t -> t.replaceAll("\\(.*\\)", "").trim())
        // Встановити нову назву стовпця
        .setName("Titles without parentheses");

System.out.println("Original: " + titles.get(1)); // Отримати перший елемент стовпця
System.out.println("Cleaned: " + titlesNoParentheses.get(1));
Original: The Little Prince (Le Petit Prince)
Cleaned: The Little Prince
Очищення даних у Java

Комбінування операцій зі рядками

// Поєднайте видалення дужок і перетворення на нижній регістр
StringColumn titlesCombinedCleaning =
        titles.map(t -> t.replaceAll("\\(.*\\)", "") // Видалити дужки

.trim() // Прибрати зайві пробіли
.toLowerCase()) // Перетворити на нижній регістр .setName("Clean_Titles_Combined"); // Назва стовпця 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
Очищення даних у Java

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

books.column(colName).type(); // Отримати тип стовпця
books.intColumn("Sales_in_Millions").asDoubleColumn(); // Перетворити тип
DoubleColumn totalRevenue = sales.multiply(averagePrice) // Помножити стовпці
    .setName("Total_Revenue_Millions"); // Назвати новий стовпець
titles.map(String::toLowerCase) // Перетворити на нижній регістр
    .setName("Lowercase_Titles"); // Назвати новий стовпець
titles.map(t -> t.replaceAll("\\(.*\\)", "").trim()) // Видалити дужки
    .setName("Titles without parentheses"); // Назвати новий стовпець
Очищення даних у Java

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

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

Preparing Video For Download...