Last chance! 50% off DataCamp Premium
Sale ends in
Per quanto sofisticati siano i nostri algoritmi analitici o predittivi, la qualità dell’output dipende dai dati in input. In altre parole, "garbage in, garbage out".
Poiché i dati sono alla base di tutti questi processi, è importante dedicare il tempo necessario a garantirne un’adeguata raffinazione.
La pulizia dei dati è un processo fondamentale nel ciclo di vita della data science e il suo ruolo non può essere sottovalutato quando si cercano insight e risposte affidabili. Nel mondo reale i dati saranno spesso sporchi, e la pulizia non può essere completamente evitata.
In questo articolo tratteremo alcuni concetti importanti, come la gestione di valori mancanti, duplicati e outlier. Per istruzioni più complete, segui il nostro corso Cleaning Data in Python o Cleaning Data in R.
In poche parole, la pulizia dei dati (o data cleansing) è un processo necessario per prepararsi all’analisi. Può includere l’individuazione e rimozione di duplicati e record incompleti, e la modifica dei dati per correggere record imprecisi.
I dati non puliti o sporchi sono sempre stati un problema, e nell’ultimo decennio abbiamo visto un aumento esponenziale della generazione di dati. Nel solo 2020, il mondo ha generato più di 64 zettabyte di dati, equivalenti a 6,4 trilioni di gigabyte. Anche se meno del 2% di questi dati viene conservato, contribuisce comunque ad aggravare l’annoso problema dei "dati sporchi". Prima di poter pulire correttamente i dati, è importante capire come si sono sporcati. Le cause più comuni includono:
Conoscere la causa alla radice dei dati sporchi che intendiamo pulire pone le basi per imporre criteri di qualità che consentono di classificare i diversi problemi del nostro dataset.
Il processo di data cleaning è importante perché aiuta a creare un modello per pulire i dati di un’organizzazione. Come detto, in qualsiasi processo di analisi o data science vale la regola garbage in, garbage out. Se trascurata, porterà a risultati analitici errati e costosi, in termini di tempo, denaro e altre risorse impiegate.
La qualità dei dati è la misura qualitativa e/o quantitativa di quanto bene i nostri dati si adattino allo scopo che devono servire. Queste misure sono modelli pratici che possiamo usare per valutare l’idoneità dei dati agli obiettivi desiderati. Considera queste misure come test metrici che i nostri dati devono superare per essere adatti ai processi di data science.
È importante distinguere tra pulizia e trasformazione dei dati. La trasformazione è un insieme di processi che possono aiutarci a estrarre più insight dai dati. Questi processi tipicamente cambiano il formato grezzo dei dati in un altro formato; alcuni esempi:



Nota come, nella maggior parte dei processi di trasformazione, l’originaria rappresentazione dei dati venga alterata. Pur trattandosi degli stessi dati, si introducono tecniche per trasformarli in un formato utilizzabile per il machine learning o altri scopi.
È importante avere delle linee guida per ottenere dati di alta qualità. Queste linee guida costituiscono un flusso di lavoro di data cleaning e ci aiutano a considerare tutti i passaggi necessari. I processi inclusi sono:
L’esplorazione riguarda la comprensione profonda dei dati tramite l’analisi delle variabili presenti. Richiede tecniche visive e di aggregazione per individuare correttamente i problemi sottostanti. Per un’esplorazione efficace, ecco alcuni punti chiave:
Prima di pulire qualsiasi dato, dobbiamo comprenderne il contesto. Il contesto dei dati riguarda l’origine di tutte le entità contenute nei dati. Cattura le circostanze che circondano la raccolta dei dati; come vengono raccolti offre spunti su come possano essere usati e per quali scopi.
Questo fa da stella polare su ciò che è accettabile nella pulizia (e nell’analisi), così da ricavare i giusti insight. Una volta chiarito come i dati sono stati raccolti, dobbiamo quindi esplorarli.
L’analisi esplorativa dei dati è il processo critico di effettuare indagini iniziali sui dati per scoprire pattern, individuare anomalie, testare ipotesi e verificare assunzioni con l’aiuto di statistiche descrittive e rappresentazioni grafiche. Non c’è scoperta senza esplorazione. Se non esploriamo i dati, è difficile scoprire i vari problemi presenti.
Per esempio, abbiamo un dataset messo a disposizione qui. I file Rolling Sales del Department of Finance elencano le proprietà vendute nell’ultimo periodo di dodici mesi a New York City per le classi fiscali 1, 2 e 4. Scaricheremo e leggeremo i dati del Bronx forniti.
#pandas
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
#read excel file
df = pd.read_excel("rollingsales_bronx.xls")
#preview data
df.head()

I problemi più evidenti in questo data frame includono:
Tuttavia, esplorando il file Excel si nota che la tabella vera e propria inizia alla quarta riga. Pertanto, rileggere i dati impostando alcuni parametri ci permette di indicare quali righe saltare e quale riga usare come intestazione:
#we read the data in again but skill 3 rows this time
df = pd.read_excel("rollingsales_bronx.xls", skiprows = 4, header = [0])
df.head()

L’aspetto dei dati cambia in modo significativo. Anche se avremmo potuto pulire il primo import, l’esplorazione ci ha fatto risparmiare tempo con poche modifiche alla funzione di import in Python.
L’esplorazione dei dati è come entrare sulla scena di un crimine da investigatore, dove osserviamo passivamente ciò che è fuori posto; la pulizia è il processo attivo di risolvere il crimine.
L’esplorazione dei dati va tipicamente di pari passo con la pulizia. Una volta individuati i problemi tramite mezzi visivi, di aggregazione o statistici, dobbiamo correggerli. In questa fase, i dati verranno rimossi, corretti o imputati.
Un esempio tipico è un form in cui si chiede di inserire il genere. Possiamo avere formati diversi che rappresentano la stessa cosa, ad es. "M", "m", "Male" o "MALE"; e questo mese abbiamo venduto "aples", "apples" o "APPLES"? Il modo migliore per individuarli è con un grafico di frequenza o mostrando i valori distinti della colonna. Alcune operazioni sui record incoerenti includono:
Esempio in Python: Usando il dataset importato in precedenza, nota come i nomi delle colonne siano scritti in modo incoerente:

Anche se non sembra grave, è importante rendere i nomi di colonna coerenti e accessibili. Ad esempio, EASE-MENT ha un trattino (-) tra le parole, mentre le altre solo spazi.
Parte della pulizia è garantire la coerenza. Proviamo a sistemare in due passaggi:
# Extract columns
cols = df.columns
# Create empty list for new column names
new_cols = []
# Iterate over each column name to fix issues
for column in cols:
# Convert column name to title case
proper_cols = column.title()
# Replace spaces and hyphens with underscores
proper_cols_hyphen = proper_cols.replace(" ", "_")
clean_col = proper_cols_hyphen.replace("-", "_")
# Append the cleaned column name to the list
new_cols.append(clean_col)
# Display the transformed column names
new_cols
# Replace existing columns in the dataframe with the cleaned list
df.columns = new_cols
# Preview the updated dataframe
df.head()

Il tipo di dato è il modo in cui i dati sono rappresentati e indica al compilatore come usarli. La rappresentazione determina le operazioni possibili. Vediamo i tipi di dato di ciascuna colonna del nostro dataframe dei dati del Bronx.
#data types
df.dtypes

NB: Nota come ora possiamo selezionare facilmente i nomi delle colonne con la dot notation (df.Year_Built).
Tutti i tipi appaiono corretti tranne la colonna Year_Built, che dovrebbe essere categoriale. Anche se non è cruciale, quando aggreghiamo queste colonne è probabile che Year_Built venga inclusa.
#Fix Year_Built column
df.Year_Built = df.Year_Built.astype("str")
#Check
df.dtypes

A volte ci sono osservazioni (righe) con dati mancanti e talvolta intere colonne completamente vuote. Cosa fare in questi casi? Ignorare il problema? È come avere un tetto che perde: quando piove, gocciola.
I valori mancanti hanno rappresentazioni diverse a seconda degli strumenti: NULL, stringhe vuote, NaN, NA, #NA, ecc. Il contesto dei dati è importante per gestire i mancanti, e capire perché mancano è cruciale. Esistono due metodi principali:
Prima di decidere quale metodo usare, bisogna esaminare i pattern di valori mancanti nelle colonne. Useremo tecniche visive e descrittive per valutarli.
#extract the column names
cols = df.columns
#plot a heatmap of missing values with seaborn
plt.figure(figsize = (10,5))
sns.heatmap(df[cols].isnull())

Dal grafico si vede che:
#Get the percentage of missing values in each column
missing_pct = round(df.isnull().sum()/len(df) * 100, 1)
print(missing_pct)

Elimineremo le colonne Ease_Ment e Apartment_Number e poi sostituiremo i valori mancanti nelle restanti colonne.
#columns with more than 30% missing values
drop_cols = missing_pct[missing_pct > 30].index
#We can drop these columns with greater than 30 percent missing values
df_new = df.drop(columns = drop_cols)
#Extract columns with mising values between 1 and 30%
replace_cols = missing_pct[(missing_pct > 0) & (missing_pct < 30)].index
#Iterate to replace missing values
for col in replace_cols:
#if column is year built we replace with median otherwise the mean
if col == "Year_Built":
df_new.fillna(df_new[col].median(), inplace = True)
else:
mean_value = df_new[col].mean()
df_new.fillna(mean_value, inplace = True)
df_new.isnull().sum() #preview for missing values

Ovviamente, c’è molto altro nella gestione dei valori mancanti, come trattato in questo corso Datacamp su Dealing with Missing Values in Python. Dataset, tipologie e strutture diverse hanno esigenze differenti; quindi la gestione dei mancanti non è un processo lineare e identico per tutti i casi. L’immagine sotto mostra diversi scenari in cui applicare tecniche di eliminazione o di imputazione.

Dobbiamo assicurarci di avere un’unica fonte di verità per ogni osservazione. Ci sono scenari in cui abbiamo osservazioni multiple sullo stesso cliente, per esempio a causa di un doppio invio del form da parte dell’utente o di errori in fase di inserimento. Indipendentemente dalla causa, dobbiamo sviluppare una versione unica e completa della verità. Questo aiuta le aziende a garantire che:
Gli outlier sono punti dati estremi. Di solito sono valori molto bassi o molto alti che non seguono il resto del pattern nei dati, ad esempio:
Identificazione degli outlier Esistono diverse tecniche per identificarli, sia visive sia statistiche
Ordinare il dataset: Ordinando i dati si possono individuare facilmente outlier in un dataset o nelle variabili di interesse. Tuttavia, questa tecnica fallisce su dataset grandi ed è difficile esaminare tutti i valori a colpo d’occhio.
Visualizzazione: Tecniche come boxplot, istogrammi e scatter plot rendono più facile rilevare gli outlier.
Uso degli Z-score: Tecnica statistica per quantificare l’eccezionalità di un valore osservato assumendo una distribuzione normale. Indica di quante deviazioni standard un valore si discosta dalla media.
Trattamento degli outlier Il trattamento consiste nella rimozione o sostituzione degli outlier presenti nei dati:
Se l’outlier non cambia i risultati dell’analisi, si può eliminare. Questo vale anche quando il numero di outlier è ridotto rispetto al totale dei dati.
Sostituire gli outlier: Comporta la sostituzione dei valori estremi con media, mediana o moda. Se il numero di outlier è considerevole rispetto ai dati, rimuoverli non funziona. Nota: La media è sensibile agli outlier. È quindi consigliabile considerare mediana o moda per la sostituzione.
Una volta conclusa la pulizia, è importante rivalutare la qualità dei dati tramite l’esplorazione. Serve a verificare correttezza e completezza del processo, sia per assicurarci di non aver omesso passaggi, sia per restare allineati al contesto dei dati.
Il reporting consiste nel documentare lo stato di salute dei dati dopo la pulizia e i passaggi eseguiti. Garantisce una guida per esigenze future simili (riproducibilità), così che il processo possa essere automatizzato quando servirà di nuovo.
L’automazione serve ad assicurare la riproducibilità della pulizia. Gran parte del processo è composto da script riutilizzabili che possono essere impiegati con poche modifiche, se necessario.
Abbiamo discusso in profondità la pulizia dei dati e tutti i componenti da considerare per un progetto di data cleaning di successo. È una fase dispendiosa in termini di tempo, a cui i professionisti dedicano in media il 60% dell’intero progetto di data science. È una base che determina in larga misura l’esito di un progetto. Dati diversi da fonti diverse hanno esigenze differenti: dovrai adattare i processi al tuo caso d’uso.
Risorse:
Impara il Data Cleaning con DataCamp
Corso
Corso
Corso
blog
Tim Lu
12 min

blog
Abid Ali Awan
10 min

blog
Abid Ali Awan
15 min