Skip to main content
All articles
Deep LearningMachine LearningStatistical Learning Theory7 min read

Analisi Dati Esplorativa (EDA) 1: Fondamenti e Esempi Pratici

Hai provato sulla tua pelle il fastidio provocato da una sbagliata preparazione dei dati? Vuoi evitare di perdere tempo a causa di problemi con i dati proprio nel mezzo del flusso creativo del tuo…

Written in Italian

On this page7
  1. Cos’è l’Analisi Dati Esplorativa (EDA)
  2. 1. Il Dataset
  3. 2. Investigare la Struttura dei Dati
  4. 3. Analisi dei Missing Values: Gestione delle Assenze
  5. 4. Analisi Statistica Univariata
  6. Fine parte 1 – Riepilogo step
  7. Resta sempre aggiornato

Hai provato sulla tua pelle il fastidio provocato da una sbagliata preparazione dei dati? Vuoi evitare di perdere tempo a causa di problemi con i dati proprio nel mezzo del flusso creativo del tuo modello? In questo articolo, esploreremo come strutturare un’Analisi Esplorativa dei Dati (EDA) efficace che spiani la strada per i passaggi successivi.

Nota: l’articolo è diviso in due parti (Parte 1 e Parte 2) e questa è la prima parte.

Conoscenze preliminari

Cos’è l’Analisi Dati Esplorativa (EDA)

L’Analisi Esplorativa dei Dati (EDA) è un passo cruciale nella fase iniziale di qualsiasi progetto di data science o machine learning. Consiste nell’esaminare e comprendere i dati per identificare pattern, tendenze e relazioni che possono guidare l’analisi e la modellazione dei dati. In questa fase il data scientist è come uno chef che studia gli ingredienti a disposizione per scegliere la ricetta da cucinare. Nell’articolo vedremo l’EDA sia dal punto di vista teorico che pratico, aiutandoci con degli esempi di codice python.

1. Il Dataset

Il Dataset che utilizzeremo è il Titanic Dataset, disponibile qui.
In fondo alla pagina è disponibile al download l’intero notebook con il codice usato come esempio durante l’articolo.

Caricamento del Dataset

Iniziamo con il caricarlo e visualizzare le prime righe. Questa operazione è già molto utile per capire il tipo di dati con cui stiamo lavorando, distinguendo tra variabili quantitative e qualitative.

Le variabili quantitative rappresentano valori numerici e possono essere soggette a operazioni matematiche come somma, media e deviazione standard. Le variabili qualitative (categoriche), d’altra parte, rappresentano categorie o classi e richiedono approcci analitici diversi, come l’utilizzo di grafici a barre o tabelle di frequenza per esplorarle. Comprendere la natura dei dati ci aiuta a scegliere gli strumenti e le tecniche più adatte per l’analisi.

Come vediamo dall’immagine, i dati sono presentati in forma tabellare. Ogni riga corrisponde ad un passeggero che nel gergo tecnico si chiama sample (o campione). Ogni colonna invece rappresenta una caratteristica specifica per quel passeggero.
Un esempio di dato qualitativo è la colonna ‘Survived’ che assume solo due valori {0, 1}.

Ipotizzando di voler prevedere tramite un modello se un passeggero sopravviverebbe all’incidente in base alle altre variabili disponibili, la colonna ‘Survived’ sarebbe il nostro target e i suoi valore prenderebbero il nome di classi. Il problema rientrebbe nella categoria classificazione del supervised machine learning.
Le variabili che vengono usate per predire il target vengono chiamate features.

La colonna ‘Fare’ presenta dati di tipo quantitativo. Degna di nota è la variabile ‘Sex’ che è di tipo qualitativo ma presenta valori letterari. Purtroppo ai computer piace lavorare solo con dati numerici quando si tratta di svolgere operazioni, dobbiamo quindi tradurre i valori in valori numerici preservando il loro significato. Ti interessa sapere come? Ne abbiamo parlato nell’articolo relativo al feature encoding.

2. Investigare la Struttura dei Dati

La prima fase dell’EDA consiste nell’analizzare la struttura dei dati. Questo include la comprensione della struttura usata per rappresentarli, dei tipi di dati presenti nel dataset e le dimensioni complessive del dataset.

  • Struttura Dati
    Questa serve per identificare come sono organizzati i dati e come possiamo accedere alle informazioni in essi contenute. Diverse strutture presentano infatti diversi metodi per accedere ai loro elementi e diverse funzionalità. Una delle strutture più comuni in ambito Data Science è sicuramente il Data Frame, una struttura di dati tabellare fornita dalla libreria Pandas in Python. Questa struttura offre una vasta gamma di funzionalità per esplorare e analizzare i dati.

  • Dimensione
    La dimensione del dataset ci fornisce informazioni sul numero di record e colonne presenti. Questo ci aiuta a valutare la complessità dei dati e a pianificare l’analisi in base alla quantità di informazioni disponibili. In generale un dataset molto piccolo non si presta bene all’allenamento di modelli complessi (con molti parametri) in quanto non racchiude sufficiente informazione per un corretto apprendimento. Per capire meglio l’impatto della dimensione di un dataset puoi leggere l’articolo dedicato.

  • Tipologia di Dati
    Ciascuna colonna può contenere dati di diversa tipologia:
    – numerici: interi (‘int’), decimali (‘float’)
    – testuali: stringhe (‘str’)
    – genere misto: oggeti (‘object’)
    Conoscere la tipologia dei dati è fondamentale per comprendere come possiamo manipolarli e analizzarli.

Come vediamo dall’output del codice, i dati sono organizzati in un Data Frame, ovvero la struttura tabellare di cui abbiamo parlato in precedenza.

Riguardo alla dimensione abbiamo 891 campioni, ciascuno dei quali dispone di 12 features. Nelle fasi successive all’EDA andremo a compiere operazioni sui dati e verificare i cambiamenti nelle dimensioni può aiutare a individuare errori o a confermare la correttezza delle operazioni.

Infine la tipologia ci suggerisce di prestare attenzione e mantenere la colonna ‘Fare’ come tipo ‘float’ e non ‘int’, altrimenti perderemmo le informazioni sulla parte decimale e quindi precisione. Un’altra informazione utile è che la variabile ‘Age’ è salvata in un formato decimale che probabilmente non serve visto che l’età è un numero intero. Convertendola in ‘int’ potremmo risparmiare memoria. Questo è utile nel caso di dataset molto grandi.

3. Analisi dei Missing Values: Gestione delle Assenze

Questo è uno dei problemi più comuni quando si lavora con dataset reali. È essenziale comprendere la presenza e la distribuzione di eventuali valori mancanti e decidere come trattarli prima di procedere con l’analisi. In questo articolo vedremo brevemente come identificarli e alcune strategie per gestirli, ma il tema è molto più ampio e complesso. Stiamo lavorando ad un articolo apposito, nel frattempo per approfondire ti consigliamo di leggere questo articolo di Alwira Swalin.

Perché è Importante

Se hai già letto il nostro articolo su come funziona il supervised machine learning, avrai capito che tutta la conoscenza del modello è basata sui dati che gli forniamo. Se questi dati sono incompleti, il modello non sarà in grado di apprendere correttamente e di conseguenza non sarà in grado di fare previsioni accurate. Il vero problema è che molte volte l’output del modello presenta valori vero-simili, quindi non abbiamo segni evidenti che ci indichino che il modello non ha appreso correttamente. Per questo è importante gestire il problema dei missing values a monte.
Questo, purtroppo, è solo uno dei vari problemi che possono derivare dalla presenza di missing values, per questo la loro presenza può essere una discriminante per la scelta di un dataset piuttosto che un altro.

Come Individuarli

Ci sono funzioni già implementate in Python che ci permettono di individuare i missing values in un dataset. Una di queste è il metodo isnull()di Pandas, che restituisce un Data Frame di valori booleani indicando la presenza di valori nulli. Usando sull’output booleano la funzione sum() possiamo contare il numero di valori nulli per colonna.

Dall’esempio vediamo come il nostro dataset presenti valori mancanti nella colonna ‘Age’, ma soprattutto nella colonna ‘Cabin’, dove su 891 valori ne mancano ben 687. In questo caso abbiamo due strade:

  • se la feature è poco importante e mancano molti valori possiamo eliminare l’intera colonna perchè sarebbe poco utile.
  • se la feature è poco importante e mancano pochi valori possiamo eliminare tutti i campioni per i quali il valore della feature non è presente.
  • se la feature è importante invece possiamo cercare di stimare il suo valore usando altre informazioni.

Come Gestire i Missing Values

Esistono diverse strategie per gestire i valori mancanti, tra cui:

  • Rimozione dei record (righe o campioni) contenenti valori mancanti.
  • Rimozione dell’intera colonna con i valori mancanti.
  • Imputazione dei valori mancanti utilizzando la media, la mediana o altri metodi di stima.

Se vuoi comprendere nel dettaglio le diverse tecniche ti rimandiamo nuovamente all’articolo dedicato.
In questo useremo la prima strategia, rimuovere i record con valori mancanti per mostrare le sue conseguenze.

Come ci aspettavamo non ci sono più valori mancanti ma il prezzo da pagare è presentato dalla nuova dimensione del dataset. In questo caso abbiamo drasticamente ridotto il numero di campioni e potrebbero non essere più sufficienti per un corretto allenamento del modello. Una soluzione sarebbe quella di provare altre strategie di gestione dei missing values.

4. Analisi Statistica Univariata

L’analisi statistica univariata ci permette di esaminare le caratteristiche di ciascuna variabile nel dataset in modo indipendente. Questo ci fornisce informazioni dettagliate sulle distribuzioni, i valori centrali e la variazione delle variabili.

Parametri Statistici Fondamentali

Durante l’analisi univariata, è comune calcolare e interpretare diversi parametri statistici fondamentali:

  • Media: Rappresenta il valore medio della variabile.
  • Mediana: È il valore centrale della distribuzione dei dati.
  • Moda: È il valore che compare più frequentemente nei dati.
  • Varianza e Deviazione Standard: Misurano la dispersione dei dati intorno alla media.

La funzione describe() filtra in automatico i valori numerici e ne calcola varie statistiche descrittive. Questo mostra l’importanza del verificare che ogni dato venga caricato con il corretto tipo, usando il metodo che abbiamo indicato all’inizio dell’articolo. Partendo dalla tabella si possono iniziare a tratte una serie di conclusioni statistiche, che non sono però lo scopo di questo articolo.

Distribuzione Grafica delle Variabili

Esplorare la distribuzione delle variabili ci permette di comprendere meglio la forma e la variabilità dei dati. Possiamo utilizzare Seaborn per visualizzare le distribuzioni delle variabili con grafici come displot, histplot o kdeplot.

Si può notare che la distribuzione della feature ‘Age’ può essere approssimata da una Gaussiana e se interessati possiamo procedere con la sua analisi di conseguenza.

Fine parte 1 – Riepilogo step

Parte 1:

  • Caricare il Dataset
  • Investigare la Struttura
  • Gestione dei Missing Values
  • Analisi Univariata

Parte 2:

  • Analisi della Correlazione
  • Gestione Outliers
  • Analisi Composizione Classi (in problemi di classificazione)

Sei a buon punto !60

Hai superato la metà, ti manca solo l’ultima parte.

Leggi ora la parte 2

Scarica il Notebook Completo

📎 EDA.ipynb_


Resta sempre aggiornato