Accelera l'anàlisi exploratòria de dades mitjançant la biblioteca de perfils de pandas

El primer pas per començar a treballar amb un nou conjunt de dades és entendre'l. Per fer-ho, cal, per exemple, conèixer els intervals de valors acceptats per les variables, els seus tipus, i també conèixer el nombre de valors que falten.

La biblioteca pandas ens proporciona moltes eines útils per realitzar anàlisis exploratòries de dades (EDA). Però abans d'utilitzar-los, normalment cal començar amb funcions més generals com ara df.describe(). Tanmateix, cal tenir en compte que les capacitats que ofereixen aquestes funcions són limitades i que les etapes inicials de treball amb qualsevol conjunt de dades quan es realitza EDA sovint són molt semblants entre si.

Accelera l'anàlisi exploratòria de dades mitjançant la biblioteca de perfils de pandas

L'autor del material que publiquem avui diu que no és aficionat a fer accions repetitives. Com a resultat, a la recerca d'eines per realitzar de manera ràpida i eficient l'anàlisi exploratòria de dades, va trobar la biblioteca perfils de pandes. Els resultats del seu treball s'expressen no en forma de determinats indicadors individuals, sinó en forma d'un informe HTML força detallat que conté la major part de la informació sobre les dades analitzades que potser necessiteu conèixer abans de començar a treballar-hi més de prop.

Aquí veurem les característiques d'utilitzar la biblioteca de perfils de pandes utilitzant el conjunt de dades del Titanic com a exemple.

Anàlisi exploratòria de dades amb pandes

Vaig decidir experimentar amb el perfil de pandes al conjunt de dades del Titanic a causa dels diferents tipus de dades que conté i la presència de valors que hi falten. Crec que la biblioteca de perfils de pandas és especialment interessant en els casos en què les dades encara no s'han netejat i requereixen un processament posterior en funció de les seves característiques. Per dur a terme amb èxit aquest processament, cal saber per on començar i a què cal prestar atenció. Aquí és on les capacitats de perfil de pandas són útils.

Primer, importem les dades i fem servir pandas per obtenir estadístiques descriptives:

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

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

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

Després d'executar aquest fragment de codi, obtindreu el que es mostra a la figura següent.

Accelera l'anàlisi exploratòria de dades mitjançant la biblioteca de perfils de pandas
Estadístiques descriptives obtingudes mitjançant eines estàndard pandas

Tot i que aquí hi ha molta informació útil, no conté tot el que seria interessant saber sobre les dades en estudi. Per exemple, es podria suposar que en un marc de dades, en una estructura DataFrame, hi ha 891 files. Si cal comprovar-ho, cal una altra línia de codi per determinar la mida del marc. Tot i que aquests càlculs no són especialment intensius en recursos, repetir-los tot el temps suposarà perdre temps que probablement es podria dedicar millor a netejar les dades.

Anàlisi exploratòria de dades mitjançant l'elaboració de perfils de pandas

Ara fem el mateix utilitzant Pandas-profiling:

pandas_profiling.ProfileReport(df)

L'execució de la línia de codi anterior generarà un informe amb indicadors exploratoris d'anàlisi de dades. El codi que es mostra a dalt mostrarà les dades trobades, però podeu fer que emeti un fitxer HTML que podeu mostrar a algú, per exemple.

La primera part de l'informe inclourà un apartat de Visió general, que ofereix informació bàsica sobre les dades (nombre d'observacions, nombre de variables, etc.). També contindrà una llista d'alertes, notificant a l'analista les coses a les quals cal prestar especial atenció. Aquestes alertes poden proporcionar pistes sobre on podeu centrar els vostres esforços de neteja de dades.

Accelera l'anàlisi exploratòria de dades mitjançant la biblioteca de perfils de pandas
Secció d'informe de visió general

Anàlisi de variables exploratòries

A sota de la secció Visió general de l'informe podeu trobar informació útil sobre cada variable. Inclouen, entre altres coses, petits gràfics que descriuen la distribució de cada variable.

Accelera l'anàlisi exploratòria de dades mitjançant la biblioteca de perfils de pandas
Sobre la variable numèrica d'edat

Com podeu veure a l'exemple anterior, el perfil de pandas ens ofereix diversos indicadors útils, com ara el percentatge i el nombre de valors que falten, així com les mesures estadístiques descriptives que ja hem vist. Perquè Age és una variable numèrica, la visualització de la seva distribució en forma d'histograma ens permet concloure que tenim una distribució esbiaixada cap a la dreta.

Quan es considera una variable categòrica, els resultats de sortida són lleugerament diferents dels trobats per a una variable numèrica.

Accelera l'anàlisi exploratòria de dades mitjançant la biblioteca de perfils de pandas
Sobre la variable categòrica Sexe

És a dir, en comptes de trobar la mitjana, mínima i màxima, la biblioteca de perfils de pandes va trobar el nombre de classes. Perquè Sex — una variable binària, els seus valors estan representats per dues classes.

Si us agrada examinar el codi com jo, potser us interessarà com calcula exactament aquestes mètriques la biblioteca de perfils de pandes. Esbrinar-ho, atès que el codi de la biblioteca està obert i disponible a GitHub, no és tan difícil. Com que no sóc un gran fan d'utilitzar caixes negres als meus projectes, vaig fer una ullada al codi font de la biblioteca. Per exemple, així és el mecanisme de processament de variables numèriques, representat per la funció descriure_numèric_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)

Tot i que aquest fragment de codi pot semblar bastant gran i complex, en realitat és molt senzill d'entendre. La qüestió és que al codi font de la biblioteca hi ha una funció que determina els tipus de variables. Si resulta que la biblioteca ha trobat una variable numèrica, la funció anterior trobarà les mètriques que estàvem mirant. Aquesta funció utilitza operacions pandas estàndard per treballar amb objectes de tipus Series, M'agrada series.mean(). Els resultats del càlcul s'emmagatzemen en un diccionari stats. Els histogrames es generen mitjançant una versió adaptada de la funció matplotlib.pyplot.hist. L'adaptació té com a objectiu garantir que la funció pugui funcionar amb diferents tipus de conjunts de dades.

Indicadors de correlació i dades mostrals estudiades

Després dels resultats de l'anàlisi de les variables, Pandas-profiling, a la secció Correlacions, mostrarà les matrius de correlació de Pearson i Spearman.

Accelera l'anàlisi exploratòria de dades mitjançant la biblioteca de perfils de pandas
Matriu de correlació de Pearson

Si cal, podeu, a la línia de codi que desencadena la generació de l'informe, establir els indicadors dels valors de llindar utilitzats per calcular la correlació. En fer això, podeu especificar quina força de correlació es considera important per a la vostra anàlisi.

Finalment, l'informe de perfils de pandas, a la secció Mostra, mostra, com a exemple, una dada presa des de l'inici del conjunt de dades. Aquest enfocament pot provocar sorpreses desagradables, ja que les primeres observacions poden representar una mostra que no reflecteix les característiques de tot el conjunt de dades.

Accelera l'anàlisi exploratòria de dades mitjançant la biblioteca de perfils de pandas
Secció que conté dades de mostra en estudi

Com a resultat, no recomano parar atenció a aquesta darrera secció. En canvi, és millor utilitzar l'ordre df.sample(5), que seleccionarà aleatòriament 5 observacions del conjunt de dades.

Resultats de

En resum, la biblioteca de perfils de pandas ofereix a l'analista algunes capacitats útils que seran útils en els casos en què necessiteu fer-vos una idea aproximada de les dades o transmetre un informe d'anàlisi d'intel·ligència a algú. Al mateix temps, el treball real amb dades, tenint en compte les seves característiques, es realitza, com sense utilitzar el perfil de pandas, manualment.

Si voleu fer una ullada a com són totes les anàlisis de dades d'intel·ligència en un quadern de Jupyter, feu una ullada a aquest el meu projecte creat amb nbviewer. I en això Podeu trobar el codi corresponent als repositoris de GitHub.

Benvolguts lectors! Per on comenceu a analitzar nous conjunts de dades?

Accelera l'anàlisi exploratòria de dades mitjançant la biblioteca de perfils de pandas

Font: www.habr.com

Afegeix comentari