Ubrzajte istraživačku analizu podataka pomoću biblioteke za profilisanje panda

Prvi korak kada počnete da radite sa novim skupom podataka jeste da ga razumete. Da biste to učinili, trebate, na primjer, saznati raspon vrijednosti koje varijable prihvaćaju, njihove vrste, kao i broj vrijednosti koje nedostaju.

Pandas biblioteka nam pruža mnoge korisne alate za izvođenje istraživačke analize podataka (EDA). Ali prije nego što ih upotrijebite, obično morate početi s općenitijim funkcijama kao što je df.describe(). Međutim, treba napomenuti da su mogućnosti koje pružaju takve funkcije ograničene, a početne faze rada sa bilo kojim skupovima podataka prilikom izvođenja EDA vrlo često su međusobno vrlo slične.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profilisanje panda

Autor materijala koji danas objavljujemo kaže da nije ljubitelj izvođenja radnji koje se ponavljaju. Kao rezultat toga, u potrazi za alatima za brzo i efikasno obavljanje istraživačke analize podataka, pronašao je biblioteku pandas-profiling. Rezultati njegovog rada nisu izraženi u obliku određenih pojedinačnih indikatora, već u obliku prilično detaljnog HTML izvještaja koji sadrži većinu informacija o analiziranim podacima koje ćete možda morati znati prije nego što počnete bliže raditi s njima.

Ovdje ćemo pogledati karakteristike korištenja biblioteke za profiliranje panda koristeći skup podataka Titanic kao primjer.

Istraživačka analiza podataka pomoću panda

Odlučio sam eksperimentirati s profiliranjem panda na skupu podataka Titanic zbog različitih tipova podataka koje sadrži i prisutnosti vrijednosti koje nedostaju u njemu. Smatram da je biblioteka za profilisanje panda posebno zanimljiva u slučajevima kada podaci još nisu očišćeni i zahteva dalju obradu u zavisnosti od njenih karakteristika. Da biste uspješno obavili takvu obradu, morate znati odakle početi i na šta obratiti pažnju. Ovdje dobro dolaze mogućnosti profiliranja pandi.

Prvo uvozimo podatke i koristimo pande za dobijanje deskriptivne statistike:

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

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

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

Nakon izvršenja ovog dijela koda, dobit ćete ono što je prikazano na sljedećoj slici.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profilisanje panda
Deskriptivna statistika dobivena korištenjem standardnih pandas alata

Iako ovdje ima puno korisnih informacija, ne sadrži sve što bi bilo zanimljivo znati o podacima koji se proučavaju. Na primjer, može se pretpostaviti da u okviru podataka, u strukturi DataFrame, ima 891 linija. Ako ovo treba provjeriti, onda je potrebna još jedna linija koda za određivanje veličine okvira. Iako ovi proračuni nisu posebno zahtjevni za resurse, njihovo stalno ponavljanje dovodi do gubljenja vremena koje bi vjerovatno bilo bolje potrošiti na čišćenje podataka.

Istraživačka analiza podataka korištenjem pandas-profilinga

Sada uradimo isto koristeći pandas-profiling:

pandas_profiling.ProfileReport(df)

Izvršavanje gornje linije koda će generirati izvještaj sa indikatorima istraživačke analize podataka. Kod prikazan iznad će prikazati pronađene podatke, ali možete ga natjerati da ispisuje HTML datoteku koju možete pokazati nekome, na primjer.

Prvi dio izvještaja će sadržavati odjeljak Pregled, koji daje osnovne informacije o podacima (broj zapažanja, broj varijabli, itd.). Također će sadržavati listu upozorenja, obavještavajući analitičara o stvarima na koje treba obratiti posebnu pažnju. Ova upozorenja mogu dati naznake gdje možete usredotočiti svoje napore za čišćenje podataka.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profilisanje panda
Odjeljak izvještaja o pregledu

Analiza istraživačke varijable

Ispod odjeljka Pregled izvještaja možete pronaći korisne informacije o svakoj varijabli. Oni uključuju, između ostalog, male grafikone koji opisuju distribuciju svake varijable.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profilisanje panda
O numeričkoj varijabli starosti

Kao što možete vidjeti iz prethodnog primjera, pandas-profiling nam daje nekoliko korisnih indikatora, kao što su postotak i broj nedostajućih vrijednosti, kao i mjere deskriptivne statistike koje smo već vidjeli. Jer Age je numerička varijabla, vizualizacija njene distribucije u obliku histograma nam omogućava da zaključimo da imamo distribuciju nagnutu udesno.

Kada se razmatra kategorička varijabla, izlazni rezultati se malo razlikuju od onih pronađenih za numeričku varijablu.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profilisanje panda
O kategoričkoj varijabli Sex

Naime, umjesto pronalaženja prosjeka, minimuma i maksimuma, biblioteka za profilisanje panda je pronašla broj klasa. Jer Sex — binarna varijabla, njene vrijednosti su predstavljene sa dvije klase.

Ako volite da ispitujete kod kao ja, možda će vas zanimati kako tačno biblioteka za profilisanje panda izračunava ove metrike. Saznati o tome, s obzirom da je kod biblioteke otvoren i dostupan na GitHubu, nije tako teško. Pošto nisam veliki obožavatelj korišćenja crnih kutija u svojim projektima, pogledao sam izvorni kod biblioteke. Na primjer, ovako izgleda mehanizam za obradu numeričkih varijabli, predstavljen funkcijom 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)

Iako ovaj dio koda može izgledati prilično velik i složen, zapravo je vrlo jednostavan za razumijevanje. Poenta je da u izvornom kodu biblioteke postoji funkcija koja određuje tipove varijabli. Ako se ispostavi da je biblioteka naišla na numeričku varijablu, gornja funkcija će pronaći metriku koju smo gledali. Ova funkcija koristi standardne pandas operacije za rad sa objektima tipa Series, like series.mean(). Rezultati proračuna se pohranjuju u rječnik stats. Histogrami se generiraju korištenjem prilagođene verzije funkcije matplotlib.pyplot.hist. Adaptacija ima za cilj da osigura da funkcija može raditi s različitim vrstama skupova podataka.

Proučeni pokazatelji korelacije i uzorci podataka

Nakon rezultata analize varijabli, pandas-profiling, u odjeljku Korelacije, će prikazati Pirsonove i Spearmanove korelacijske matrice.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profilisanje panda
Pearsonova korelaciona matrica

Ako je potrebno, možete u liniji koda koja pokreće generiranje izvještaja postaviti indikatore graničnih vrijednosti koje se koriste pri izračunavanju korelacije. Na taj način možete odrediti koja se snaga korelacije smatra važnom za vašu analizu.

Konačno, izvještaj o pandas-profilingu, u odjeljku Uzorak, prikazuje, kao primjer, dio podataka preuzet sa početka skupa podataka. Ovaj pristup može dovesti do neugodnih iznenađenja, jer prvih nekoliko zapažanja može predstavljati uzorak koji ne odražava karakteristike cijelog skupa podataka.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profilisanje panda
Odjeljak koji sadrži uzorke podataka koji se proučavaju

Kao rezultat toga, ne preporučujem obraćanje pažnje na ovaj posljednji odjeljak. Umjesto toga, bolje je koristiti naredbu df.sample(5), koji će nasumično odabrati 5 opservacija iz skupa podataka.

Ishodi

Ukratko, biblioteka za profiliranje panda daje analitičaru neke korisne mogućnosti koje će vam dobro doći u slučajevima kada trebate brzo dobiti grubu predstavu o podacima ili nekome proslijediti izvještaj o analizi obavještajnih podataka. Istovremeno, pravi rad s podacima, uzimajući u obzir njihove karakteristike, obavlja se, kao bez korištenja pandas-profiliranja, ručno.

Ako želite da pogledate kako sve analize obavještajnih podataka izgledaju u jednoj Jupyter notebooku, pogledajte ovo moj projekat kreiran pomoću nbviewer-a. I unutra ovo Odgovarajući kod možete pronaći u GitHub repozitorijumima.

Dragi čitaoci! Gdje počinjete analizirati nove skupove podataka?

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profilisanje panda

izvor: www.habr.com

Dodajte komentar