Urýchlite prieskumnú analýzu údajov pomocou knižnice profilovania pandy

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é.

Urýchlite prieskumnú analýzu údajov pomocou knižnice profilovania pandy

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 pandy-profilovanie. Výsledky jeho práce nie sú vyjadrené vo forme určitých individuálnych ukazovateľov, ale vo forme pomerne podrobnej HTML správy obsahujúcej väčšinu informácií o analyzovaných údajoch, ktoré možno budete potrebovať vedieť predtým, ako s nimi začnete užšie spolupracovať.

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.

Urýchlite prieskumnú analýzu údajov pomocou knižnice profilovania pandy
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.

Urýchlite prieskumnú analýzu údajov pomocou knižnice profilovania pandy
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.

Urýchlite prieskumnú analýzu údajov pomocou knižnice profilovania pandy
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ú.

Urýchlite prieskumnú analýzu údajov pomocou knižnice profilovania pandy
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 description_numeric_1d:

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.

Urýchlite prieskumnú analýzu údajov pomocou knižnice profilovania pandy
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.

Urýchlite prieskumnú analýzu údajov pomocou knižnice profilovania pandy
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 toto môj projekt vytvorený pomocou nbviewer. A v toto Príslušný kód nájdete v úložiskách GitHub.

Vážení čitatelia! Kde začnete analyzovať nové súbory údajov?

Urýchlite prieskumnú analýzu údajov pomocou knižnice profilovania pandy

Zdroj: hab.com

Pridať komentár