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.
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
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.
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.
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.
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.
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
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.
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.
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
Dragi čitatelji! Gdje započeti analizu novih skupova podataka?
Izvor: www.habr.com