Limpeza e padronização de colunas

Limpeza de Dados em Java

Dennis Lee

Software Engineer

Conjunto de dados de vendas de livros

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
Limpeza de Dados em Java

Examinando tipos de dados

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()) {

// Imprime o nome da coluna e seu tipo System.out.println(colName + ": " + books.column(colName).type()); }
Limpeza de Dados em Java

Examinando tipos de dados: saídas

Books: STRING
Authors: STRING
Language: STRING
First_Published: INTEGER
Sales_in_Millions: INTEGER
Average_Price: DOUBLE
Limpeza de Dados em Java

Convertendo formatos numéricos

// Converte IntColumn para DoubleColumn, pois o Tablesaw inferiu como 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
// É possível converter uma DoubleColumn em IntColumn
IntColumn salesAsInt = sales.asIntColumn();
Limpeza de Dados em Java

Multiplicando colunas

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

// Calcula a receita total multiplicando duas colunas
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());
Limpeza de Dados em Java

Multiplicando colunas: saídas

Multiplicando duas colunas: Vendas * Preço = Receita

| Livros                              | Vendas_em_ | Preço     | Receita_Total_ |
|                                     | Milhões    | Médio     | Milhões        |
|-------------------------------------|------------|-----------|----------------|
| 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           |
Limpeza de Dados em Java

Regex para capturar parênteses

  • O padrão \\(.*\\) corresponde a parênteses
  • Exemplos: "(Organic)", "(2 pack)", "(Large)"
  • Resultado: "Apple (Organic)" vira "Apple"
\\(     // Casa parêntese de abertura (escapado com \)
.*      // Casa qualquer caractere (.) zero ou mais vezes (*)
\\)     // Casa parêntese de fechamento (escapado com \)
Limpeza de Dados em Java

Lidando com caracteres especiais

// Remove traduções entre parênteses dos títulos
StringColumn titlesNoParentheses = titles
        // Para cada título, remove parênteses e espaços ao redor
        .map(t -> t.replaceAll("\\(.*\\)", "").trim())
        // Define o novo nome da coluna
        .setName("Titles without parentheses");

System.out.println("Original: " + titles.get(1)); // Pega o primeiro item da coluna
System.out.println("Cleaned: " + titlesNoParentheses.get(1));
Original: The Little Prince (Le Petit Prince)
Cleaned: The Little Prince
Limpeza de Dados em Java

Combinando operações de string

// Combine remover parênteses e converter para minúsculas
StringColumn titlesCombinedCleaning =
        titles.map(t -> t.replaceAll("\\(.*\\)", "") // Remove parênteses

.trim() // Remove espaços ao redor
.toLowerCase()) // Converte para minúsculas .setName("Clean_Titles_Combined"); // Define o nome da coluna 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
Limpeza de Dados em Java

Juntando tudo

books.column(colName).type(); // Obtém o tipo da coluna
books.intColumn("Sales_in_Millions").asDoubleColumn(); // Converte o tipo
DoubleColumn totalRevenue = sales.multiply(averagePrice) // Multiplica colunas
    .setName("Total_Revenue_Millions"); // Nomeia a nova coluna
titles.map(String::toLowerCase) // Converte para minúsculas
    .setName("Lowercase_Titles"); // Nomeia a nova coluna
titles.map(t -> t.replaceAll("\\(.*\\)", "").trim()) // Remove parênteses
    .setName("Titles without parentheses"); // Nomeia a nova coluna
Limpeza de Dados em Java

Vamos praticar!

Limpeza de Dados em Java

Preparing Video For Download...