Workflow EDA e profilazione dei dati
df.info(), df.describe(), verifica dei valori mancanti, controllo dei tipi di dati e analisi della cardinalità.
Workflow EDA e profilazione dei dati è una lezione Learn AI with Python gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn AI with Python, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn AI with Python include 4 lezioni in totale.
Che cos'è l'analisi esplorativa dei dati?
Exploratory Data Analysis (EDA), ovvero l'analisi esplorativa dei dati, è il primo passo da compiere con qualsiasi dataset prima della modellazione. L'obiettivo è comprenderne la struttura, individuare i problemi e sviluppare un'intuizione sui dati.
Una checklist iniziale sistematica per l'EDA risponde a queste domande: quanto sono grandi i dati? Quali sono i tipi delle colonne? Dove si trovano i valori mancanti? Sono presenti duplicati? Come sono distribuiti i valori?
- Individuare tempestivamente i problemi di qualità dei dati
- Decidere quali feature devono essere ripulite
- Formulare ipotesi da verificare in seguito
Caricamento dei dati
Tutto inizia caricando un DataFrame e dando una rapida occhiata con head() e shape.
shape restituisce una tupla (rows, columns), così è possibile conoscere immediatamente la scala dei dati su cui si sta lavorando.
import pandas as pd
df = pd.read_csv("customers.csv")
print(df.shape) # (10000, 8)
print(df.head()) # first 5 rowsdf.info() — Tipi e conteggi dei valori non nulli
df.info() è il primo comando più utile in assoluto. Stampa il nome di ogni colonna, il relativo dtype e il numero di valori non nulli.
Se una colonna numerica viene visualizzata come object, c'è un problema (testo estraneo, virgole o simboli di valuta). Se il numero di valori non nulli varia tra le colonne, sono presenti dati mancanti.
df.info()
# <class pandas.DataFrame>
# RangeIndex: 10000 entries
# age 9800 non-null float64
# city 10000 non-null object
# income 9500 non-null float64df.describe() — Riepilogo dei dati numerici
df.describe() fornisce count, mean, std, min, quartili (25/50/75%) e max per ogni colonna numerica.
Esamini il risultato alla ricerca di segnali d'allarme: un min pari a -1 in una colonna dell'età, un max molto superiore al 75° percentile (outlier) o una media molto distante dalla mediana (asimmetria).
print(df.describe())
# Use include="all" to also summarize categorical columns
print(df.describe(include="all"))df.isnull().sum() — Conteggio dei valori mancanti
Combinare isnull() con sum() conta i valori mancanti per colonna. Aggiunga un altro .sum() per ottenere il totale complessivo.
Converta il risultato in percentuale per valutarne la gravità: potrebbe valere la pena eliminare una colonna con il 60% di valori mancanti, mentre il 2% è facile da imputare.
print(df.isnull().sum())
missing_pct = df.isnull().sum() / len(df) * 100
print(missing_pct.sort_values(ascending=False))df.duplicated().sum() — Individuazione delle righe duplicate
df.duplicated() restituisce una Series booleana che contrassegna le righe che sono copie esatte di una riga precedente. Sommandola si conta il numero di duplicati presenti.
È possibile limitare la ricerca dei duplicati alle colonne chiave con subset, utile quando un id dovrebbe essere univoco.
print(df.duplicated().sum()) # exact duplicate rows
print(df.duplicated(subset=["id"]).sum()) # duplicate ids
df = df.drop_duplicates()value_counts() — Frequenze delle categorie
value_counts() conta quante volte compare ogni valore univoco in una colonna. È lo strumento di riferimento per esaminare le variabili categoriche.
Utilizzi normalize=True per visualizzare le proporzioni invece dei conteggi grezzi e dropna=False per includere i valori mancanti nel conteggio.
print(df["city"].value_counts())
print(df["city"].value_counts(normalize=True))
print(df["city"].value_counts(dropna=False))Controllo della cardinalità
La cardinalità è il numero di valori distinti in una colonna, ottenibile con nunique().
- Bassa cardinalità (poche categorie) → adatta al one-hot encoding.
- Alta cardinalità (migliaia di stringhe univoche, ad esempio gli ID utente) → di solito non è una feature utile così com'è.
for col in df.select_dtypes("object").columns:
print(col, "->", df[col].nunique(), "unique")Individuazione delle colonne costanti e simili a ID
Durante la profilazione è opportuno segnalare due situazioni estreme:
- Colonne costanti (
nunique() == 1) non contengono informazioni: le elimini. - Colonne simili a ID (
nunique() == len(df)) hanno un valore univoco per ogni riga e, nella maggior parte dei modelli, non forniscono informazioni utili.
n = len(df)
for col in df.columns:
u = df[col].nunique()
if u == 1:
print(col, "is constant")
elif u == n:
print(col, "is ID-like")dtypes e utilizzo della memoria
Controlli df.dtypes per verificare che le colonne siano memorizzate correttamente e df.memory_usage(deep=True) per individuare quelle che occupano più memoria.
Il downcasting dei tipi numerici e la conversione delle stringhe con bassa cardinalità in category possono ridurre notevolmente l'utilizzo della memoria nei dataset di grandi dimensioni.
print(df.dtypes)
print(df.memory_usage(deep=True))
df["city"] = df["city"].astype("category")Uno snippet riutilizzabile per la profilazione
È possibile racchiudere l'intera checklist in un unico helper, così ogni nuovo dataset riceverà la stessa analisi iniziale.
Lo esegua subito dopo aver caricato un qualsiasi DataFrame, per evidenziare immediatamente dimensioni, tipi, valori mancanti, duplicati e cardinalità.
def profile(df):
print("Shape:", df.shape)
print(df.info())
print("Missing:\n", df.isnull().sum())
print("Dupes:", df.duplicated().sum())
for c in df.select_dtypes("object"):
print(c, df[c].nunique(), "unique")
profile(df)Verifica rapida: valori mancanti
Si desidera ottenere la percentuale di valori mancanti in ogni colonna.
Riepilogo: la checklist iniziale per l'EDA
Ora dispone di una procedura iniziale ripetibile per qualsiasi dataset:
shapeehead()per dimensioni e anteprimainfo()per dtype e conteggi dei valori non nullidescribe()per i riepiloghi numerici e gli indizi sugli outlierisnull().sum()per i valori mancantiduplicated().sum()per le righe duplicatevalue_counts()enunique()per le frequenze delle categorie e la cardinalità
Ora esamineremo le singole colonne con l'analisi univariata.
Domande Frequenti
La lezione «Workflow EDA e profilazione dei dati» è gratuita?
Sì — il testo completo di «Workflow EDA e profilazione dei dati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn AI with Python, passa a CoddyKit PRO. Il corso Learn AI with Python include 4 lezioni in totale.
Cosa imparerò in «Workflow EDA e profilazione dei dati»?
df.info(), df.describe(), verifica dei valori mancanti, controllo dei tipi di dati e analisi della cardinalità. Eserciti Learn AI with Python con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn AI with Python?
Non è richiesta alcuna esperienza precedente. Learn AI with Python su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Workflow EDA e profilazione dei dati»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn AI with Python?
Sì. Ogni lezione Learn AI with Python include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Workflow EDA e profilazione dei dati
- Analisi univariata
- Analisi bivariata e multivariata
- Distribuzione delle feature e analisi del target