Accelera l'analisi esplorativa dei dati utilizzando la libreria di profilazione panda

Il primo passo quando si inizia a lavorare con un nuovo set di dati è comprenderlo. Per fare ciò è necessario, ad esempio, conoscere gli intervalli di valori accettati dalle variabili, i loro tipi e anche conoscere il numero di valori mancanti.

La libreria panda ci fornisce molti strumenti utili per eseguire analisi esplorative dei dati (EDA). Ma prima di usarli, di solito devi iniziare con funzioni più generali come df.describe(). Tuttavia, va notato che le capacità fornite da tali funzioni sono limitate e le fasi iniziali del lavoro con qualsiasi set di dati durante l'esecuzione dell'EDA sono molto spesso molto simili tra loro.

Accelera l'analisi esplorativa dei dati utilizzando la libreria di profilazione panda

L'autore del materiale che pubblichiamo oggi afferma di non essere un fan dell'esecuzione di azioni ripetitive. Di conseguenza, alla ricerca di strumenti per eseguire analisi esplorative dei dati in modo rapido ed efficiente, ha trovato la biblioteca panda-profiling. I risultati del suo lavoro non sono espressi sotto forma di alcuni indicatori individuali, ma sotto forma di un rapporto HTML abbastanza dettagliato contenente la maggior parte delle informazioni sui dati analizzati che potresti dover conoscere prima di iniziare a lavorarci più da vicino.

Qui esamineremo le funzionalità dell'utilizzo della libreria di profilazione dei panda utilizzando il set di dati Titanic come esempio.

Analisi esplorativa dei dati utilizzando i panda

Ho deciso di sperimentare la profilazione dei panda sul set di dati del Titanic a causa dei diversi tipi di dati in esso contenuti e della presenza di valori mancanti al suo interno. Credo che la libreria di profilazione dei panda sia particolarmente interessante nei casi in cui i dati non sono stati ancora ripuliti e richiedono un'ulteriore elaborazione a seconda delle loro caratteristiche. Per eseguire con successo tale elaborazione, è necessario sapere da dove iniziare e a cosa prestare attenzione. È qui che le funzionalità di profilazione dei panda tornano utili.

Innanzitutto, importiamo i dati e utilizziamo i panda per ottenere statistiche descrittive:

# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np

# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')

# вычисление показателей описательной статистики
df.describe()

Dopo aver eseguito questa parte di codice, otterrai quanto mostrato nella figura seguente.

Accelera l'analisi esplorativa dei dati utilizzando la libreria di profilazione panda
Statistiche descrittive ottenute utilizzando gli strumenti Panda standard

Sebbene qui siano presenti molte informazioni utili, non contiene tutto ciò che sarebbe interessante sapere sui dati in esame. Ad esempio, si potrebbe supporre che in un frame di dati, in una struttura DataFrame, ci sono 891 linee. Se è necessario verificarlo, è necessaria un'altra riga di codice per determinare la dimensione del frame. Anche se questi calcoli non richiedono particolarmente risorse, ripeterli continuamente è destinato a far perdere tempo che probabilmente potrebbe essere meglio impiegato per pulire i dati.

Analisi esplorativa dei dati utilizzando la profilazione dei panda

Ora facciamo lo stesso usando la profilazione panda:

pandas_profiling.ProfileReport(df)

L'esecuzione della riga di codice sopra genererà un report con indicatori di analisi esplorativa dei dati. Il codice mostrato sopra genererà i dati trovati, ma puoi fare in modo che generi un file HTML che puoi mostrare a qualcuno, ad esempio.

La prima parte del rapporto conterrà una sezione Panoramica, contenente le informazioni di base sui dati (numero di osservazioni, numero di variabili, ecc.). Conterrà anche un elenco di avvisi, notificando all'analista le cose a cui prestare particolare attenzione. Questi avvisi possono fornire indizi su dove concentrare gli sforzi di pulizia dei dati.

Accelera l'analisi esplorativa dei dati utilizzando la libreria di profilazione panda
Sezione del rapporto generale

Analisi esplorativa delle variabili

Sotto la sezione Panoramica del rapporto puoi trovare informazioni utili su ciascuna variabile. Includono, tra le altre cose, piccoli grafici che descrivono la distribuzione di ciascuna variabile.

Accelera l'analisi esplorativa dei dati utilizzando la libreria di profilazione panda
Informazioni sulla variabile numerica età

Come puoi vedere dall'esempio precedente, la profilazione dei panda ci fornisce diversi indicatori utili, come la percentuale e il numero di valori mancanti, nonché le misure statistiche descrittive che abbiamo già visto. Perché Age è una variabile numerica, la visualizzazione della sua distribuzione sotto forma di istogramma ci permette di concludere che abbiamo una distribuzione sbilanciata a destra.

Quando si considera una variabile categoriale, i risultati di output sono leggermente diversi da quelli trovati per una variabile numerica.

Accelera l'analisi esplorativa dei dati utilizzando la libreria di profilazione panda
Informazioni sulla variabile categoriale Sesso

Vale a dire, invece di trovare la media, il minimo e il massimo, la libreria di profilazione dei panda ha trovato il numero di classi. Perché Sex — una variabile binaria, i suoi valori sono rappresentati da due classi.

Se ti piace esaminare il codice come faccio io, potresti essere interessato a come esattamente la libreria di profilazione panda calcola queste metriche. Scoprirlo, visto che il codice della libreria è aperto e disponibile su GitHub, non è così difficile. Dato che non sono un grande fan dell'uso delle scatole nere nei miei progetti, ho dato un'occhiata al codice sorgente della libreria. Ad esempio, questo è l'aspetto del meccanismo per l'elaborazione delle variabili numeriche, rappresentato dalla funzione descrivere_numeric_1d:

def describe_numeric_1d(series, **kwargs):
    """Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series).
    Also create histograms (mini an full) of its distribution.
    Parameters
    ----------
    series : Series
        The variable to describe.
    Returns
    -------
    Series
        The description of the variable as a Series with index being stats keys.
    """
    # Format a number as a percentage. For example 0.25 will be turned to 25%.
    _percentile_format = "{:.0%}"
    stats = dict()
    stats['type'] = base.TYPE_NUM
    stats['mean'] = series.mean()
    stats['std'] = series.std()
    stats['variance'] = series.var()
    stats['min'] = series.min()
    stats['max'] = series.max()
    stats['range'] = stats['max'] - stats['min']
    # To avoid to compute it several times
    _series_no_na = series.dropna()
    for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
        # The dropna() is a workaround for https://github.com/pydata/pandas/issues/13098
        stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)
    stats['iqr'] = stats['75%'] - stats['25%']
    stats['kurtosis'] = series.kurt()
    stats['skewness'] = series.skew()
    stats['sum'] = series.sum()
    stats['mad'] = series.mad()
    stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN
    stats['n_zeros'] = (len(series) - np.count_nonzero(series))
    stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)
    # Histograms
    stats['histogram'] = histogram(series, **kwargs)
    stats['mini_histogram'] = mini_histogram(series, **kwargs)
    return pd.Series(stats, name=series.name)

Sebbene questa parte di codice possa sembrare piuttosto grande e complessa, in realtà è molto semplice da capire. Il punto è che nel codice sorgente della libreria c'è una funzione che determina i tipi di variabili. Se risulta che la libreria ha riscontrato una variabile numerica, la funzione precedente troverà le metriche che stavamo esaminando. Questa funzione utilizza le operazioni Panda standard per lavorare con oggetti di tipo Series, Piace series.mean(). I risultati dei calcoli vengono memorizzati in un dizionario stats. Gli istogrammi vengono generati utilizzando una versione adattata della funzione matplotlib.pyplot.hist. L'adattamento ha lo scopo di garantire che la funzione possa funzionare con diversi tipi di set di dati.

Indicatori di correlazione e dati campione studiati

Dopo i risultati dell'analisi delle variabili, pandas-profiling, nella sezione Correlazioni, visualizzerà le matrici di correlazione di Pearson e Spearman.

Accelera l'analisi esplorativa dei dati utilizzando la libreria di profilazione panda
Matrice di correlazione di Pearson

Se necessario è possibile, nella riga di codice che attiva la generazione del report, impostare gli indicatori dei valori soglia utilizzati nel calcolo della correlazione. In questo modo è possibile specificare quale forza di correlazione è considerata importante per l'analisi.

Infine, il report di profilazione dei panda, nella sezione Esempio, mostra, come esempio, un dato prelevato dall'inizio del set di dati. Questo approccio può portare a spiacevoli sorprese, poiché le prime osservazioni potrebbero rappresentare un campione che non riflette le caratteristiche dell’intero data set.

Accelera l'analisi esplorativa dei dati utilizzando la libreria di profilazione panda
Sezione contenente i dati campione in studio

Di conseguenza, non consiglio di prestare attenzione a quest'ultima sezione. Invece è meglio usare il comando df.sample(5), che selezionerà casualmente 5 osservazioni dal set di dati.

Risultati di

In sintesi, la libreria di profilazione Panda offre all'analista alcune funzionalità utili che torneranno utili nei casi in cui è necessario farsi rapidamente un'idea approssimativa dei dati o trasmettere a qualcuno un rapporto di analisi di intelligence. Allo stesso tempo, il lavoro reale con i dati, tenendo conto delle loro caratteristiche, viene eseguito manualmente, come senza utilizzare la profilazione dei panda.

Se vuoi dare un'occhiata a come appaiono tutte le analisi dei dati di intelligence in un notebook Jupyter, dai un'occhiata a questo il mio progetto creato utilizzando nbviewer. E dentro Questo Puoi trovare il codice corrispondente nei repository GitHub.

Cari lettori! Da dove iniziare ad analizzare nuovi set di dati?

Accelera l'analisi esplorativa dei dati utilizzando la libreria di profilazione panda

Fonte: habr.com

Aggiungi un commento