Accelerați analiza exploratorie a datelor folosind biblioteca de profilare a panda

Primul pas atunci când începeți să lucrați cu un nou set de date este să îl înțelegeți. Pentru a face acest lucru, trebuie, de exemplu, să aflați intervalele de valori acceptate de variabile, tipurile acestora și, de asemenea, să aflați despre numărul de valori lipsă.

Biblioteca panda ne oferă multe instrumente utile pentru efectuarea analizei exploratorii a datelor (EDA). Dar înainte de a le folosi, de obicei trebuie să începeți cu funcții mai generale, cum ar fi df.describe(). Cu toate acestea, trebuie remarcat faptul că capacitățile oferite de astfel de funcții sunt limitate, iar etapele inițiale de lucru cu orice seturi de date atunci când se efectuează EDA sunt foarte adesea foarte asemănătoare între ele.

Accelerați analiza exploratorie a datelor folosind biblioteca de profilare a panda

Autorul materialului pe care îl publicăm astăzi spune că nu este un fan al efectuării de acțiuni repetitive. Drept urmare, în căutarea unor instrumente pentru a efectua rapid și eficient analiza exploratorie a datelor, a găsit biblioteca panda-profilare. Rezultatele muncii sale sunt exprimate nu sub forma anumitor indicatori individuali, ci sub forma unui raport HTML destul de detaliat, care conține majoritatea informațiilor despre datele analizate pe care este posibil să aveți nevoie să le cunoașteți înainte de a începe să lucrați mai îndeaproape cu acestea.

Aici ne vom uita la caracteristicile utilizării bibliotecii de profilare panda folosind setul de date Titanic ca exemplu.

Analiza exploratorie a datelor folosind panda

Am decis să experimentez profilarea panda pe setul de date Titanic datorită diferitelor tipuri de date pe care le conține și a prezenței valorilor lipsă în el. Cred că biblioteca de profiluri panda este deosebit de interesantă în cazurile în care datele nu au fost încă curățate și necesită o prelucrare ulterioară în funcție de caracteristicile sale. Pentru a efectua cu succes o astfel de prelucrare, trebuie să știți de unde să începeți și la ce să acordați atenție. Aici sunt utile capabilitățile de profilare a panda.

În primul rând, importăm datele și folosim panda pentru a obține statistici descriptive:

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

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

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

După ce executați această bucată de cod, veți obține ceea ce este arătat în figura următoare.

Accelerați analiza exploratorie a datelor folosind biblioteca de profilare a panda
Statistici descriptive obținute cu ajutorul instrumentelor standard panda

Deși există o mulțime de informații utile aici, aceasta nu conține tot ce ar fi interesant de știut despre datele studiate. De exemplu, s-ar putea presupune că într-un cadru de date, într-o structură DataFrame, sunt 891 de rânduri. Dacă acest lucru trebuie verificat, atunci este necesară o altă linie de cod pentru a determina dimensiunea cadrului. Deși aceste calcule nu consumă în mod deosebit resursele, repetarea lor tot timpul este obligată să piardă timp care probabil ar putea fi folosit mai bine curățând datele.

Analiza exploratorie a datelor folosind panda-profiling

Acum să facem același lucru folosind panda-profiling:

pandas_profiling.ProfileReport(df)

Executarea liniei de cod de mai sus va genera un raport cu indicatori exploratori de analiză a datelor. Codul afișat mai sus va afișa datele găsite, dar îl puteți face să scoată un fișier HTML pe care îl puteți afișa cuiva, de exemplu.

Prima parte a raportului va conține o secțiune Prezentare generală, care oferă informații de bază despre date (număr de observații, număr de variabile etc.). De asemenea, va conține o listă de alerte, care anunță analistul despre lucrurile cărora să le acorde o atenție deosebită. Aceste alerte pot oferi indicii despre unde vă puteți concentra eforturile de curățare a datelor.

Accelerați analiza exploratorie a datelor folosind biblioteca de profilare a panda
Secțiunea raport de prezentare generală

Analiza variabilă exploratorie

Sub secțiunea Prezentare generală a raportului puteți găsi informații utile despre fiecare variabilă. Acestea includ, printre altele, mici diagrame care descriu distribuția fiecărei variabile.

Accelerați analiza exploratorie a datelor folosind biblioteca de profilare a panda
Despre variabila numerică de vârstă

După cum puteți vedea din exemplul anterior, profilarea panda ne oferă câțiva indicatori utili, cum ar fi procentul și numărul de valori lipsă, precum și măsurile statistice descriptive pe care le-am văzut deja. Deoarece Age este o variabilă numerică, vizualizarea distribuției sale sub formă de histogramă ne permite să concluzionăm că avem o distribuție oblică spre dreapta.

Când luăm în considerare o variabilă categorială, rezultatele de ieșire sunt ușor diferite de cele găsite pentru o variabilă numerică.

Accelerați analiza exploratorie a datelor folosind biblioteca de profilare a panda
Despre variabila categorială Sex

Și anume, în loc să găsească media, minimă și maximă, biblioteca de profilare panda a găsit numărul de clase. Deoarece Sex — o variabilă binară, valorile sale sunt reprezentate de două clase.

Dacă vă place să examinați codul ca mine, ați putea fi interesat de modul în care biblioteca de profilare a pandalor calculează aceste valori. A afla despre acest lucru, având în vedere că codul bibliotecii este deschis și disponibil pe GitHub, nu este atât de dificil. Deoarece nu sunt un mare fan al folosirii cutiilor negre în proiectele mele, am aruncat o privire la codul sursă al bibliotecii. De exemplu, așa arată mecanismul de procesare a variabilelor numerice, reprezentat de funcție descrie_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)

Deși această bucată de cod poate părea destul de mare și complexă, este de fapt foarte simplu de înțeles. Ideea este că în codul sursă al bibliotecii există o funcție care determină tipurile de variabile. Dacă se dovedește că biblioteca a întâlnit o variabilă numerică, funcția de mai sus va găsi valorile pe care le-am uitat. Această funcție folosește operațiuni standard panda pentru a lucra cu obiecte de tip Series, ca series.mean(). Rezultatele calculelor sunt stocate într-un dicționar stats. Histogramele sunt generate folosind o versiune adaptată a funcției matplotlib.pyplot.hist. Adaptarea are ca scop asigurarea faptului că funcția poate funcționa cu diferite tipuri de seturi de date.

Indicatori de corelație și date eșantion studiate

După rezultatele analizei variabilelor, panda-profiling, în secțiunea Corelații, va afișa matricele de corelație Pearson și Spearman.

Accelerați analiza exploratorie a datelor folosind biblioteca de profilare a panda
Matricea de corelație Pearson

Dacă este necesar, puteți, în linia de cod care declanșează generarea raportului, să setați indicatorii valorilor de prag utilizați la calcularea corelației. Făcând acest lucru, puteți specifica ce putere de corelare este considerată importantă pentru analiza dumneavoastră.

În cele din urmă, raportul de profilare a panda, în secțiunea Sample, afișează, ca exemplu, o bucată de date preluată de la începutul setului de date. Această abordare poate duce la surprize neplăcute, deoarece primele observații pot reprezenta un eșantion care nu reflectă caracteristicile întregului set de date.

Accelerați analiza exploratorie a datelor folosind biblioteca de profilare a panda
Secțiune care conține date eșantion în studiu

Drept urmare, nu recomand să acordați atenție acestei ultime secțiuni. În schimb, este mai bine să utilizați comanda df.sample(5), care va selecta aleatoriu 5 observații din setul de date.

Rezultatele

Pentru a rezuma, biblioteca de profilare a panda oferă analistului câteva capacități utile care vă vor fi utile în cazurile în care trebuie să vă faceți rapid o idee aproximativă a datelor sau să transmiteți cuiva un raport de analiză de informații. În același timp, munca reală cu date, ținând cont de caracteristicile acestora, este efectuată, ca și fără a utiliza profilarea panda, manual.

Dacă doriți să aruncați o privire la cum arată toate analizele de date inteligente într-un blocnotes Jupyter, aruncați o privire la acest proiectul meu creat folosind nbviewer. Si in acest Puteți găsi codul corespunzător în depozitele GitHub.

Dragi cititori! De unde începeți să analizați noile seturi de date?

Accelerați analiza exploratorie a datelor folosind biblioteca de profilare a panda

Sursa: www.habr.com

Adauga un comentariu