Prvým krokom pri začatí práce s novým súborom údajov je jeho pochopenie. Aby ste to mohli urobiť, musíte napríklad zistiť rozsahy hodnôt, ktoré premenné akceptujú, ich typy a tiež zistiť počet chýbajúcich hodnôt.
Knižnica pandy nám poskytuje mnoho užitočných nástrojov na vykonávanie prieskumnej analýzy údajov (EDA). Pred ich použitím však zvyčajne musíte začať so všeobecnejšími funkciami, ako je df.describe(). Treba však poznamenať, že možnosti, ktoré takéto funkcie poskytujú, sú obmedzené a počiatočné fázy práce s akýmikoľvek súbormi údajov pri vykonávaní EDA sú si navzájom veľmi často veľmi podobné.
Autor materiálu, ktorý dnes zverejňujeme, hovorí, že nie je fanúšikom opakovaných akcií. Výsledkom bolo, že pri hľadaní nástrojov na rýchle a efektívne vykonávanie prieskumnej analýzy údajov našiel knižnicu
Tu sa pozrieme na funkcie používania knižnice profilovania pandy pomocou súboru údajov Titanic ako príkladu.
Prieskumná analýza údajov pomocou pandy
Rozhodol som sa experimentovať s profilovaním pandy na súbore údajov Titanic kvôli rôznym typom údajov, ktoré obsahuje, a prítomnosti chýbajúcich hodnôt v ňom. Domnievam sa, že knižnica profilovania pandy je zaujímavá najmä v prípadoch, keď údaje ešte nie sú vyčistené a vyžadujú si ďalšie spracovanie v závislosti od ich charakteristík. Aby ste takéto spracovanie úspešne vykonali, musíte vedieť, kde začať a na čo si dať pozor. Tu sa hodia možnosti profilovania pandy.
Najprv importujeme údaje a použijeme pandy na získanie popisných štatistík:
# импорт необходимых пакетов
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í tejto časti kódu získate to, čo je znázornené na nasledujúcom obrázku.
Popisná štatistika získaná pomocou štandardných nástrojov pandas
Aj keď je tu veľa užitočných informácií, neobsahujú všetko, čo by bolo zaujímavé vedieť o skúmaných údajoch. Napríklad by sa dalo predpokladať, že v dátovom rámci, v štruktúre DataFrame
, je tu 891 riadkov. Ak je to potrebné skontrolovať, na určenie veľkosti rámca je potrebný ďalší riadok kódu. Aj keď tieto výpočty nie sú mimoriadne náročné na zdroje, ich neustále opakovanie vedie k strate času, ktorý by bolo pravdepodobne lepšie minúť na čistenie údajov.
Prieskumná analýza údajov pomocou profilovania pandy
Teraz urobme to isté pomocou profilovania pandy:
pandas_profiling.ProfileReport(df)
Vykonaním vyššie uvedeného riadku kódu sa vygeneruje správa s ukazovateľmi prieskumnej analýzy údajov. Kód zobrazený vyššie zobrazí nájdené údaje, ale môžete z neho vytvoriť súbor HTML, ktorý môžete napríklad niekomu ukázať.
Prvá časť správy bude obsahovať časť Prehľad poskytujúca základné informácie o údajoch (počet pozorovaní, počet premenných atď.). Bude obsahovať aj zoznam upozornení, ktoré analytika upozornia na veci, ktorým je potrebné venovať osobitnú pozornosť. Tieto upozornenia môžu poskytnúť informácie o tom, kam môžete zamerať svoje úsilie pri čistení údajov.
Sekcia prehľadu
Prieskumná analýza premenných
Pod sekciou Prehľad v prehľade nájdete užitočné informácie o každej premennej. Zahŕňajú okrem iného malé grafy popisujúce distribúciu každej premennej.
O vekovej číselnej premennej
Ako môžete vidieť z predchádzajúceho príkladu, profilovanie pandy nám poskytuje niekoľko užitočných ukazovateľov, ako je percento a počet chýbajúcich hodnôt, ako aj ukazovatele popisnej štatistiky, ktoré sme už videli. Pretože Age
je číselná premenná, vizualizácia jej rozloženia vo forme histogramu nám umožňuje usúdiť, že máme rozloženie vychýlené doprava.
Pri posudzovaní kategorickej premennej sa výstupné výsledky mierne líšia od výsledkov zistených pre číselnú premennú.
O kategorickej premennej Sex
Totiž namiesto hľadania priemeru, minima a maxima knižnica profilujúca pandy našla počet tried. Pretože Sex
- binárna premenná, jej hodnoty sú reprezentované dvoma triedami.
Ak radi skúmate kód ako ja, možno vás bude zaujímať, ako presne knižnica na profilovanie pandy vypočítava tieto metriky. Zistiť to, vzhľadom na to, že kód knižnice je otvorený a dostupný na GitHub, nie je také ťažké. Keďže nie som veľkým fanúšikom používania čiernych skriniek vo svojich projektoch, pozrel som sa na zdrojový kód knižnice. Takto napríklad vyzerá mechanizmus spracovania číselných premenných reprezentovaný funkciou
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)
Hoci sa tento kus kódu môže zdať dosť veľký a zložitý, v skutočnosti je veľmi jednoduchý na pochopenie. Ide o to, ž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ú, funkcia uvedená vyššie nájde metriky, na ktoré sme sa pozerali. Táto funkcia používa štandardné operácie pandy na prácu s objektmi typu Series
, Páči sa mi to series.mean()
. Výsledky výpočtov sú uložené v slovníku stats
. Histogramy sa generujú pomocou upravenej verzie funkcie matplotlib.pyplot.hist
. Cieľom prispôsobenia je zabezpečiť, aby funkcia mohla pracovať s rôznymi typmi súborov údajov.
Študované korelačné ukazovatele a vzorové údaje
Po výsledkoch analýzy premenných, profilovanie pandy, v sekcii Korelácie zobrazí Pearsonove a Spearmanove korelačné matice.
Pearsonova korelačná matica
V prípade potreby môžete v riadku kódu, ktorý spúšťa generovanie správy, nastaviť ukazovatele prahových hodnôt použitých 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 správa o profilovaní pandy v sekcii Vzorka zobrazuje ako príklad časť údajov prevzatých od začiatku množiny údajov. Tento prístup môže viesť k nepríjemným prekvapeniam, pretože niekoľko prvých pozorovaní môže predstavovať vzorku, ktorá neodráža charakteristiky celého súboru údajov.
Sekcia obsahujúca vzorové údaje, ktoré sú predmetom štúdie
V dôsledku toho neodporúčam venovať pozornosť tejto poslednej časti. Namiesto toho je lepšie použiť príkaz df.sample(5)
, ktorý náhodne vyberie 5 pozorovaní zo súboru údajov.
Výsledky
Aby som to zhrnul, knižnica profilovania pandy poskytuje analytikovi niekoľko užitočných funkcií, ktoré sa hodia v prípadoch, keď potrebujete rýchlo získať približnú predstavu o údajoch alebo niekomu odovzdať správu o analýze spravodajstva. Súčasne sa skutočná práca s údajmi, berúc do úvahy ich vlastnosti, vykonáva manuálne, ako bez použitia profilovania pandy.
Ak sa chcete pozrieť na to, ako vyzerá analýza všetkých spravodajských údajov v jednom notebooku Jupyter, pozrite sa na
Vážení čitatelia! Kde začnete analyzovať nové súbory údajov?
Zdroj: hab.com