Prvým krokom pri práci s novým súborom údajov je jeho pochopenie. Aby sme to dosiahli, mali by sme si napríklad zistiť rozsahy hodnôt, ktoré premenné prijímajú, ich typy, a takisto sa dozvedieť o počte chýbajúcich hodnôt.
Knižnica pandas nám poskytuje mnoho užitočných nástrojov na vykonávanie prieskumného analýzy údajov (Exploratory Data Analysis, EDA). Predtým, ako ich využijeme, je však zvyčajne potrebné začať s funkciami všeobecnejšieho charakteru, ako je df.describe(). Treba však poznamenať, že možnosti, ktoré takéto funkcie poskytujú, sú obmedzené, a úvodné fázy práce s akýmikoľvek súbormi údajov pri vykonávaní EDA sa veľmi často podobajú.
Autor materiálu, ktorý dnes publikujeme, hovorí, že nie je fanúšikom vykonávania opakujúcich sa činností. Výsledkom je, že v hľadaní prostriedkov, ktoré mu umožňujú rýchlo a efektívne vykonávať prieskumnú analýzu údajov, našiel knižnicu . Výsledky jej činnosti nie sú vyjadrené v podobe jednotlivých ukazovateľov, ale ako pomerne podrobná HTML správa, ktorá obsahuje väčšinu informácií o analyzovaných údajoch, ktoré by mohli byť potrebné pred tým, ako sa pustíme do hlbšej práce s nimi.
Tu budú preskúmané vlastnosti používania knižnice pandas-profiling na príklade súboru údajov Titanic.
Prieskumná analýza údajov pomocou pandas
Rozhodol som sa experimentovať s pandas-profiling na súbore údajov Titanic, pretože obsahuje údaje rôznych typov a má chýbajúce hodnoty. Domnievam sa, že knižnica pandas-profiling je obzvlášť zaujímavá v prípadoch, keď údaje ešte nie sú vyčistené a vyžadujú ďalšie spracovanie, ktoré závisí od ich vlastností. Aby sme úspešne vykonali takéto spracovanie, je potrebné vedieť, odkiaľ začať a na čo sa zamerať. Tu nám pomôžu možnosti pandas-profiling.
Najskôr importujeme údaje a použijeme pandas na získanie ukazovateľov opisnej štatistiky:
# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np
# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')
# вычисление показателей описательной статистики
df.describe()Po vykonaní tohto úryvku kódu získame to, čo je zobrazené na nasledujúcom obrázku.

Ukazovatele opisnej štatistiky, získané pomocou štandardných prostriedkov pandas
Hoci obsahuje množstvo užitočných informácií, neponúka všetko, čo by mohlo byť zaujímavé pri skúmaní údajov. Napríklad môžeme predpokladať, že vo dátovom rámci, v štruktúre DataFrame, je 891 riadkov. Ak to potrebujete overiť, bude potrebný ďalší riadok kódu, ktorý určí veľkosť rámca. Hoci tieto výpočty nie sú veľmi náročné na zdroje, ich neustále opakovanie určite povedie k stratám času, ktoré by sa pravdepodobne lepšie využili na čistenie údajov.
Prieskumná analýza údajov pomocou pandas-profiling
Teraz to urobíme rovnakým spôsobom pomocou pandas-profiling:
pandas_profiling.ProfileReport(df)Vykonanie vyššie uvedeného riadku kódu vytvorí správu s ukazovateľmi prieskumnej analýzy údajov. Kód uvedený vyššie vyprodukuje informácie nájdené o údajoch, ale je možné to urobiť tak, aby výsledkom bol HTML súbor, ktorý napríklad môžete niekomu ukázať.
Prvá časť správy bude obsahovať sekciu Prehľad, ktorá poskytne základné informácie o údajoch (počet pozorovaní, počet premenných atď.). Okrem toho bude obsahovať zoznam varovaní, ktorý upozorní analytika na to, na čo by sa mal zamerať. Tieto varovania môžu poslúžiť ako návod na to, na čo sa zamerať pri čistení údajov.

Sekcia správy Prehľad
Prieskumná analýza premenných
Za sekciou Prehľad v správe môžete nájsť užitočné informácie o každej premennej. Tieto informácie okrem iného obsahujú malé grafy opisujúce rozdelenie každej premennej.

Informácie o číselnej premennej Vek
Ako vidíme z predchádzajúceho príkladu, pandas-profiling nám poskytuje niekoľko užitočných indikátorov, ako je percento a počet chýbajúcich hodnôt, ako aj ukazovatele opisnej štatistiky, ktoré sme už videli. Keďže Vek je číselná premenná, vizualizácia jej rozdelenia ako histogram nám umožňuje usúdiť, že ide o pravostranné rozdelenie.
Pri zvážení kategorickej premennej sú ukazovatele trochu odlišné od tých, ktoré boli nájdené pre číselnú premennú.

Informácie o kategorickej premennej Pohlavie
Namiesto určenia priemeru, minima a maxima knižnica pandas-profiling našla počet tried. Pretože Pohlavie — binárna premenná, jej hodnoty sú zastúpené dvoma triedami.
Ak, rovnako ako ja, milujete skúmať kód, môže vás zaujímať, ako presne knižnica pandas-profiling vypočítava tieto ukazovatele. Zistiť to, keďže kód knižnice je otvorený a dostupný na GitHub, nie je až také ťažké. Pretože nie som veľkým fanúšikom používania "čiernych boxes" vo svojich projektoch, pozrel som sa na zdrojový kód knižnice. Napríklad, tu je, ako vyzerá mechanizmus spracovania číselných premenných, prezentovaný funkciou :
def describe_numeric_1d(series, **kwargs):
"""Vypočíta súhrnné štatistiky číselnej (`TYPE_NUM`) premennej (Series).
Tiež vytvorí histogramy (mini a plné) jej rozdelenia.
Parametre
----------
series : Series
Premenná, ktorú je potrebné popísať.
Návratové hodnoty
-------
Series
Popis premennej ako Series s indexom, ktorý je kľúčom štatistík.
"""
# Formátovanie čísla ako percento. Napríklad 0.25 sa zmení na 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']
# Aby ste sa vyhli opakovanému počítaniu
_series_no_na = series.dropna()
for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
# Dropna() je riešením pre 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)
# Histogramy
stats['histogram'] = histogram(series, **kwargs)
stats['mini_histogram'] = mini_histogram(series, **kwargs)
return pd.Series(stats, name=series.name) Hoci sa tento úryvok kódu môže zdať pomerne veľký a zložitý, v skutočnosti je jeho pochopenie veľmi jednoduché. Hovoríme o tom, že v zdrojovom kóde knižnice je funkcia, ktorá určuje typy premenných. Ak sa ukáže, že knižnica narazila na číselnú premennú, vyššie uvedená funkcia nájde ukazovatele, ktoré sme preskúmali. V tejto funkcii sa používajú štandardné operácie pandas na objektoch typu Series, podobne ako series.mean(). Výsledky výpočtov sú uložené v slovníku stats. Histogramy sa vytvárajú pomocou prispôsobenej verzie funkcie matplotlib.pyplot.hist. Adaptácia je zameraná na to, aby funkcia mohla pracovať s rôznymi typmi súborov.
Koeficienty korelácie a vzorka skúmaných údajov
Po analýze premenných v pandas-profiling, sekcia Korelácie, vygeneruje korelačné matice Pearson a Spearman.

Korelačná matica Pearson
Ak je potrebné, môžete v tom riadku kódu, ktorý spúšťa generovanie správy, nastaviť prahové hodnoty používané pri výpočte korelácie. Týmto spôsobom môžete určiť, aká sila korelácie sa považuje za dôležitú pre vašu analýzu.
Nakoniec, v správe pandas-profiling, v sekcii Vzorka, sa zo začiatku súboru údajov zobrazuje ako príklad fragment údajov. Takýto prístup môže viesť k nepríjemným prekvapeniam, pretože prvé pozorovania nemusia odrážať charakteristiky celého súboru údajov.

Sekcia obsahujúca vzorku skúmaných údajov
Výsledkom je, že neodporúčam venovať pozornosť tejto poslednej sekcii. Namiesto toho je lepšie využiť príkaz df.sample(5), ktorý náhodne vyberie 5 pozorovaní z dátového súboru.
Zhrnutie
Na záver, knižnica pandas-profiling poskytuje analytikom niekoľko užitočných funkcií, ktoré prídu vhod v situáciách, keď potrebujú rýchlo získať celkový prehľad údajov alebo niekomu odovzdať správu o preskúmaní údajov. Skutočná práca s údajmi, ktorá zohľadňuje ich charakteristiky, sa vykonáva, ako aj bez použitia pandas-profiling, manuálne.
Ak chcete vidieť, ako vyzerá celý preskúmanie údajov v jednom Jupyter notebooku — pozrite sa na môj projekt vytvorený s pomocou nbviewer. A v GitHub repozitári môžete nájsť zodpovedajúci kód.
Vážení čitatelia! Kde začínate analýzu nových súborov údajov?
Zdroj: habr.com
