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.
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
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.
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.
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.
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.
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
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.
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.
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
Dragi čitaoci! Gdje počinjete analizirati nove skupove podataka?
izvor: www.habr.com