Ubrzajte istraživačku analizu podataka pomoću biblioteke za profiliranje pandas

Prvi korak kada počnete raditi s novim skupom podataka je njegovo razumijevanje. Da biste to učinili, trebate, na primjer, saznati raspone vrijednosti koje prihvaćaju varijable, njihove vrste, kao i saznati o broju nedostajućih vrijednosti.

Knjižnica pandas pruža nam mnogo korisnih alata 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 s bilo kojim skupom podataka prilikom izvođenja EDA vrlo su često vrlo slične jedna drugoj.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profiliranje pandas

Autor materijala koji danas objavljujemo kaže da nije ljubitelj izvođenja ponavljajućih radnji. Kao rezultat toga, u potrazi za alatima za brzo i učinkovito izvođenje istraživačke analize podataka, pronašao je knjižnicu pande-profiliranje. Rezultati njegova rada nisu izraženi u obliku određenih pojedinačnih pokazatelja, već u obliku prilično detaljnog HTML izvješća koje sadrži većinu informacija o analiziranim podacima koje biste možda trebali znati prije nego što počnete pobliže surađivati ​​s njima.

Ovdje ćemo pogledati značajke korištenja knjižnice za profiliranje pandi koristeći skup podataka Titanic kao primjer.

Istraživačka analiza podataka pomoću pandi

Odlučio sam eksperimentirati s profiliranjem pandi na skupu podataka Titanica zbog različitih vrsta podataka koje sadrži i prisutnosti nedostajućih vrijednosti u njemu. Vjerujem da je pandas-profiling biblioteka posebno zanimljiva u slučajevima kada podaci još nisu očišćeni i zahtijevaju daljnju obradu ovisno o svojim karakteristikama. Da biste uspješno izvršili takvu obradu, morate znati odakle početi i na što obratiti pozornost. Ovdje dobro dolaze mogućnosti profiliranja pandi.

Prvo uvozimo podatke i koristimo pande za dobivanje 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šavanja ovog dijela koda, dobit ćete ono što je prikazano na sljedećoj slici.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profiliranje pandas
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, moglo bi se pretpostaviti da u podatkovnom okviru, u strukturi DataFrame, ima 891 redak. Ako to treba provjeriti, tada je potreban još jedan redak koda za određivanje veličine okvira. Iako ovi izračuni ne zahtijevaju previše resursa, njihovo neprestano ponavljanje dovodi do gubitka vremena koje bi se vjerojatno bolje potrošilo na čišćenje podataka.

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

Sada učinimo isto koristeći pandas-profiliranje:

pandas_profiling.ProfileReport(df)

Izvršavanjem gornjeg retka koda generirat će se izvješće s istraživačkim pokazateljima analize podataka. Gore prikazani kod će ispisati pronađene podatke, ali ga možete natjerati da ispiše HTML datoteku koju možete pokazati nekome, na primjer.

Prvi dio izvješća sadržavat će odjeljak Pregled koji daje osnovne informacije o podacima (broj opažanja, broj varijabli itd.). Također će sadržavati popis upozorenja, obavještavajući analitičara o stvarima na koje treba obratiti posebnu pozornost. Ova upozorenja mogu dati naznake o tome gdje možete usmjeriti svoje napore čišćenja podataka.

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profiliranje pandas
Pregled odjeljka izvješća

Istraživačka analiza varijabli

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

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

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

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

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profiliranje pandas
O spolnoj kategoričkoj varijabli

Naime, umjesto da pronađe prosjek, minimum i maksimum, pandas-profiling knjižnica je pronašla broj klasa. Jer Sex — binarna varijabla, njene vrijednosti su predstavljene s dvije klase.

Ako volite ispitivati ​​kod kao ja, moglo bi vas zanimati kako točno biblioteka za profiliranje pandas izračunava ove metrike. Saznati o tome, s obzirom da je knjižnični kod otvoren i dostupan na GitHubu, nije tako teško. Budući da nisam veliki obožavatelj korištenja crnih kutija u svojim projektima, pogledao sam izvorni kod knjižnice. Na primjer, ovako izgleda mehanizam za obradu numeričkih varijabli, predstavljen funkcijom opisati_numerički_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 se ovaj dio koda može činiti prilično velik i složen, zapravo ga je vrlo jednostavno razumjeti. Radi se o tome 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 s objektima tipa Series, Kao series.mean(). Rezultati izračuna pohranjuju se u rječnik stats. Histogrami se generiraju pomoću prilagođene verzije funkcije matplotlib.pyplot.hist. Cilj prilagodbe je osigurati da funkcija može raditi s različitim vrstama skupova podataka.

Proučeni pokazatelji korelacije i uzorci podataka

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

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profiliranje pandas
Pearsonova korelacijska matrica

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

Konačno, izvješće o profiliranju pandi, u odjeljku Uzorak, prikazuje, kao primjer, dio podataka uzet od početka skupa podataka. Ovakav pristup može dovesti do neugodnih iznenađenja, jer prvih nekoliko opažanja mogu predstavljati uzorak koji ne odražava karakteristike cijelog skupa podataka.

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

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

Rezultati

Ukratko, knjižnica za profiliranje pandas daje analitičaru neke korisne mogućnosti koje će mu dobro doći u slučajevima kada morate brzo dobiti okvirnu ideju o podacima ili nekome proslijediti izvješće o obavještajnoj analizi. U isto vrijeme, pravi rad s podacima, uzimajući u obzir njegove značajke, izvodi se, kao i bez korištenja pandas-profiliranja, ručno.

Želite li pogledati kako sve analize obavještajnih podataka izgledaju u jednoj Jupyterovoj bilježnici, pogledajte ovo moj projekt kreiran pomoću nbviewera. I u ovo Odgovarajući kod možete pronaći u GitHub repozitoriju.

Dragi čitatelji! Gdje započeti analizu novih skupova podataka?

Ubrzajte istraživačku analizu podataka pomoću biblioteke za profiliranje pandas

Izvor: www.habr.com

Dodajte komentar