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.
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
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.
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.
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.
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.
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
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.
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.
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
Drage bralke in bralci! Kje začnete analizirati nove nize podatkov?
Vir: www.habr.com