# pip install category_encoders
import pandas as pd
from category_encoders import BinaryEncoder

# Creiamo un dataset di esempio con una variabile categoriale nominale
data = pd.DataFrame({'Colore': ['Rosso', 'Blu', 'Verde', 'Giallo', 'Viola']})
print("Dataset originale:")
print(data)
print()

# Inizializziamo il BinaryEncoder specificando esplicitamente la colonna da trasformare
# Questo evita trasformazioni indesiderate su altre colonne numeriche eventualmente presenti
binary_encoder = BinaryEncoder(cols=['Colore'])

# Addestriamo l'encoder sui dati e trasformiamo il dataset in un'unica operazione
# fit: assegna un codice intero progressivo a ogni categoria unica
# transform: converte il codice intero nella sua rappresentazione binaria distribuita su più colonne
encoded_data = binary_encoder.fit_transform(data)
print("Dataset codificato con BinaryEncoder:")
print(encoded_data)
print()

# Confrontiamo il numero di colonne generate dal BinaryEncoder
# con quelle che avrebbe generato un One-Hot Encoding sullo stesso dataset
numero_categorie = data['Colore'].nunique()
colonne_generate = len(encoded_data.columns)

print(f"Numero di categorie uniche: {numero_categorie}")
print(f"Colonne generate dal BinaryEncoder: {colonne_generate}")
print(f"Colonne che genererebbe il One-Hot Encoding: {numero_categorie}")