Pospešite raziskovalno analizo podatkov s knjižnico za profiliranje pand

Prvi korak, ko začnete delati z novim naborom podatkov, je, da ga razumete. Da bi to naredili, morate na primer ugotoviti obsege vrednosti, ki jih sprejemajo spremenljivke, njihove vrste in ugotoviti tudi število manjkajočih vrednosti.

Knjižnica pandas nam ponuja številna uporabna orodja za izvajanje raziskovalne analize podatkov (EDA). Toda preden jih uporabite, morate običajno začeti z bolj splošnimi funkcijami, kot je df.describe(). Vendar je treba opozoriti, da so zmogljivosti, ki jih zagotavljajo takšne funkcije, omejene in da so začetne faze dela s katerim koli nizom podatkov pri izvajanju EDA zelo pogosto zelo podobne.

Pospešite raziskovalno analizo podatkov s knjižnico za profiliranje pand

Avtor gradiva, ki ga objavljamo danes, pravi, da ni ljubitelj izvajanja ponavljajočih se dejanj. Tako je v iskanju orodij za hitro in učinkovito izvajanje raziskovalne analize podatkov našel knjižnico profiliranje pand. Rezultati njegovega dela niso izraženi v obliki določenih posameznih kazalnikov, temveč v obliki dokaj podrobnega poročila HTML, ki vsebuje večino informacij o analiziranih podatkih, ki jih boste morda morali poznati, preden začnete tesneje sodelovati z njimi.

Tukaj si bomo ogledali značilnosti uporabe knjižnice za profiliranje pand na primeru nabora podatkov Titanik.

Raziskovalna analiza podatkov z uporabo pand

Odločil sem se eksperimentirati s profiliranjem pand na naboru podatkov Titanic zaradi različnih vrst podatkov, ki jih vsebuje, in prisotnosti manjkajočih vrednosti v njem. Menim, da je knjižnica za profiliranje pand še posebej zanimiva v primerih, ko podatki še niso očiščeni in zahtevajo nadaljnjo obdelavo glede na svoje značilnosti. Za uspešno izvedbo takšne obdelave morate vedeti, kje začeti in na kaj morate biti pozorni. Tukaj pridejo prav zmožnosti profiliranja pand.

Najprej uvozimo podatke in uporabimo pande za pridobitev opisne statistike:

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

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

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

Po izvedbi tega dela kode boste dobili, kar je prikazano na naslednji sliki.

Pospešite raziskovalno analizo podatkov s knjižnico za profiliranje pand
Opisna statistika, pridobljena s standardnimi orodji pandas

Čeprav je tukaj veliko koristnih informacij, ne vsebuje vsega, kar bi bilo zanimivo vedeti o preučevanih podatkih. Lahko bi na primer domnevali, da v podatkovnem okviru, v strukturi DataFrame, je 891 vrstic. Če je to treba preveriti, je za določitev velikosti okvirja potrebna še ena vrstica kode. Čeprav ti izračuni ne zahtevajo posebej virov, bo njihovo nenehno ponavljanje zagotovo izgubilo čas, ki bi ga verjetno bolje porabili za čiščenje podatkov.

Raziskovalna analiza podatkov z uporabo pandas-profiliranja

Zdaj naredimo isto z uporabo pandas-profiliranja:

pandas_profiling.ProfileReport(df)

Izvajanje zgornje vrstice kode bo ustvarilo poročilo z raziskovalnimi indikatorji analize podatkov. Zgoraj prikazana koda bo izpisala najdene podatke, vendar lahko ustvarite datoteko HTML, ki jo lahko na primer nekomu pokažete.

Prvi del poročila bo vseboval razdelek Pregled, ki bo podal osnovne informacije o podatkih (število opazovanj, število spremenljivk itd.). Vseboval bo tudi seznam opozoril, ki analitika obveščajo o stvareh, na katere mora biti še posebej pozoren. Ta opozorila lahko ponudijo namige o tem, kam lahko usmerite svoja prizadevanja za čiščenje podatkov.

Pospešite raziskovalno analizo podatkov s knjižnico za profiliranje pand
Razdelek s preglednim poročilom

Raziskovalna analiza spremenljivk

Pod razdelkom Pregled v poročilu najdete koristne informacije o vsaki spremenljivki. Med drugim vključujejo majhne grafikone, ki opisujejo porazdelitev vsake spremenljivke.

Pospešite raziskovalno analizo podatkov s knjižnico za profiliranje pand
O številčni spremenljivki starosti

Kot lahko vidite iz prejšnjega primera, nam pandas-profiliranje daje več uporabnih indikatorjev, kot sta odstotek in število manjkajočih vrednosti, pa tudi opisne statistične mere, ki smo jih že videli. Ker Age je numerična spremenljivka, vizualizacija njene porazdelitve v obliki histograma nam omogoča sklepati, da imamo porazdelitev nagnjeno v desno.

Pri obravnavi kategorične spremenljivke se izhodni rezultati nekoliko razlikujejo od tistih, ugotovljenih za numerično spremenljivko.

Pospešite raziskovalno analizo podatkov s knjižnico za profiliranje pand
O spolni kategorični spremenljivki

Knjižnica za profiliranje pand je namreč namesto povprečja, minimuma in maksimuma našla število razredov. Ker Sex — binarna spremenljivka, njene vrednosti so predstavljene z dvema razredoma.

Če radi preiskujete kodo kot jaz, vas bo morda zanimalo, kako natančno knjižnica za profiliranje pand izračuna te metrike. Ugotoviti o tem, glede na to, da je knjižnična koda odprta in na voljo na GitHubu, ni tako težko. Ker nisem velik oboževalec uporabe črnih skrinjic v svojih projektih, sem si ogledal izvorno kodo knjižnice. Takole je na primer videti mehanizem za obdelavo številskih spremenljivk, ki ga predstavlja funkcija describe_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)

Čeprav se ta del kode morda zdi precej velik in zapleten, ga je pravzaprav zelo preprosto razumeti. Bistvo je, da je v izvorni kodi knjižnice funkcija, ki določa vrste spremenljivk. Če se izkaže, da je knjižnica naletela na številsko spremenljivko, bo zgornja funkcija našla metriko, ki smo jo gledali. Ta funkcija uporablja standardne operacije pande za delo s predmeti vrste Series, všeč series.mean(). Rezultati izračuna so shranjeni v slovarju stats. Histogrami so generirani s prilagojeno različico funkcije matplotlib.pyplot.hist. Namen prilagoditve je zagotoviti, da lahko funkcija deluje z različnimi vrstami naborov podatkov.

Študirani kazalniki korelacije in vzorčni podatki

Po rezultatih analize spremenljivk bo pandas-profiling v razdelku Korelacije prikazal korelacijski matriki Pearson in Spearman.

Pospešite raziskovalno analizo podatkov s knjižnico za profiliranje pand
Pearsonova korelacijska matrika

Po potrebi lahko v vrstici kode, ki sproži ustvarjanje poročila, nastavite indikatorje mejnih vrednosti, ki se uporabljajo pri izračunu korelacije. S tem lahko določite, katera moč korelacije se šteje za pomembno za vašo analizo.

Končno poročilo o profiliranju pand v razdelku Vzorec kot primer prikaže del podatkov, vzetih od začetka nabora podatkov. Ta pristop lahko privede do neprijetnih presenečenj, saj lahko prvih nekaj opazovanj predstavlja vzorec, ki ne odraža značilnosti celotnega niza podatkov.

Pospešite raziskovalno analizo podatkov s knjižnico za profiliranje pand
Razdelek, ki vsebuje vzorčne podatke v raziskavi

Zato ne priporočam, da bi bili pozorni na ta zadnji del. Namesto tega je bolje uporabiti ukaz df.sample(5), ki bo naključno izbral 5 opazovanj iz nabora podatkov.

Rezultati

Če povzamemo, knjižnica za profiliranje pand daje analitiku nekaj uporabnih zmožnosti, ki vam bodo prišle prav v primerih, ko morate hitro dobiti grobo predstavo o podatkih ali nekomu posredovati poročilo o analizi obveščevalnih podatkov. Hkrati se resnično delo s podatki, ob upoštevanju njegovih značilnosti, izvaja ročno, brez uporabe pandas-profiliranja.

Če želite pogledati, kako je videti vsa analiza obveščevalnih podatkov v enem Jupyterjevem zvezku, si oglejte ta moj projekt, ustvarjen z nbviewerjem. In v to Ustrezno kodo najdete v repozitorijih GitHub.

Drage bralke in bralci! Kje začnete analizirati nove nize podatkov?

Pospešite raziskovalno analizo podatkov s knjižnico za profiliranje pand

Vir: www.habr.com

Dodaj komentar