Urychlete průzkumnou analýzu dat pomocí knihovny profilování pand

Prvním krokem při zahájení práce s novým souborem dat je jeho pochopení. Chcete-li to provést, musíte například zjistit rozsahy hodnot přijímaných proměnnými, jejich typy a také zjistit počet chybějících hodnot.

Knihovna pandas nám poskytuje mnoho užitečných nástrojů pro provádění průzkumné analýzy dat (EDA). Než je ale použijete, obvykle musíte začít s obecnějšími funkcemi, jako je df.describe(). Je však třeba poznamenat, že možnosti, které takové funkce poskytují, jsou omezené a počáteční fáze práce s jakýmikoli datovými sadami při provádění EDA jsou si velmi často velmi podobné.

Urychlete průzkumnou analýzu dat pomocí knihovny profilování pand

Autor materiálu, který dnes zveřejňujeme, říká, že není příznivcem provádění opakujících se akcí. Výsledkem bylo, že při hledání nástrojů pro rychlé a efektivní provádění průzkumné analýzy dat našel knihovnu profilování pand. Výsledky jeho práce nejsou vyjádřeny ve formě určitých jednotlivých ukazatelů, ale ve formě poměrně podrobné HTML zprávy obsahující většinu informací o analyzovaných datech, které možná budete potřebovat vědět, než s nimi začnete blíže pracovat.

Zde se podíváme na funkce použití knihovny profilování pand pomocí datové sady Titanic jako příkladu.

Průzkumná analýza dat pomocí pand

Rozhodl jsem se experimentovat s profilováním pand na datovém souboru Titanic kvůli různým typům dat, které obsahuje, a přítomnosti chybějících hodnot v něm. Domnívám se, že knihovna profilování pand je zajímavá zejména v případech, kdy data ještě nebyla vyčištěna a vyžadují další zpracování v závislosti na jejich vlastnostech. Abyste takové zpracování úspěšně provedli, musíte vědět, kde začít a na co si dát pozor. Zde se hodí možnosti profilování pand.

Nejprve importujeme data a použijeme pandy k získání popisných statistik:

# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np

# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')

# вычисление показателей описательной статистики
df.describe()

Po provedení této části kódu získáte to, co je znázorněno na následujícím obrázku.

Urychlete průzkumnou analýzu dat pomocí knihovny profilování pand
Popisné statistiky získané pomocí standardních nástrojů pandas

Přestože je zde mnoho užitečných informací, neobsahují vše, co by bylo zajímavé o zkoumaných datech vědět. Například by se dalo předpokládat, že v datovém rámci, ve struktuře DataFrame, existuje 891 řádků. Pokud je to nutné zkontrolovat, je k určení velikosti rámce zapotřebí další řádek kódu. I když tyto výpočty nejsou nijak zvlášť náročné na zdroje, jejich neustálé opakování je spojeno s plýtváním časem, který by pravděpodobně bylo lepší věnovat čištění dat.

Průzkumná analýza dat pomocí profilování pand

Nyní udělejme totéž pomocí profilování pand:

pandas_profiling.ProfileReport(df)

Spuštěním výše uvedeného řádku kódu se vygeneruje zpráva s indikátory průzkumné analýzy dat. Kód zobrazený výše vypíše nalezená data, ale můžete z něj vytvořit soubor HTML, který můžete například někomu ukázat.

První část zprávy bude obsahovat část Přehled, která poskytuje základní informace o datech (počet pozorování, počet proměnných atd.). Bude také obsahovat seznam výstrah, upozorňujících analytika na věci, kterým je třeba věnovat zvláštní pozornost. Tato upozornění mohou poskytnout vodítka, kam můžete zaměřit své úsilí o vyčištění dat.

Urychlete průzkumnou analýzu dat pomocí knihovny profilování pand
Sekce přehledu

Explorativní analýza proměnných

Pod sekcí Přehled v přehledu naleznete užitečné informace o každé proměnné. Zahrnují mimo jiné malé grafy popisující rozložení každé proměnné.

Urychlete průzkumnou analýzu dat pomocí knihovny profilování pand
O věkové číselné proměnné

Jak můžete vidět z předchozího příkladu, profilování pand nám poskytuje několik užitečných ukazatelů, jako je procento a počet chybějících hodnot a také popisné statistické údaje, které jsme již viděli. Protože Age je číselná proměnná, vizualizace jejího rozložení ve formě histogramu nám umožňuje usoudit, že máme rozložení vychýlené doprava.

Při zvažování kategorické proměnné se výsledky výstupu mírně liší od výsledků zjištěných pro číselnou proměnnou.

Urychlete průzkumnou analýzu dat pomocí knihovny profilování pand
O kategorické proměnné pohlaví

Knihovna profilující pandy totiž namísto zjištění průměru, minima a maxima našla počet tříd. Protože Sex — binární proměnná, její hodnoty jsou reprezentovány dvěma třídami.

Pokud rádi zkoumáte kód jako já, mohlo by vás zajímat, jak přesně knihovna pro profilování pand počítá tyto metriky. Zjistit to, vzhledem k tomu, že kód knihovny je otevřený a dostupný na GitHubu, není tak těžké. Protože nejsem velkým fanouškem používání černých skříněk ve svých projektech, podíval jsem se na zdrojový kód knihovny. Tak například vypadá mechanismus pro zpracování číselných proměnných, reprezentovaný funkcí 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)

Přestože se tento kus kódu může zdát poměrně velký a složitý, je ve skutečnosti velmi jednoduchý na pochopení. Jde o to, že ve zdrojovém kódu knihovny je funkce, která určuje typy proměnných. Pokud se ukáže, že knihovna narazila na číselnou proměnnou, výše uvedená funkce najde metriky, na které jsme se dívali. Tato funkce používá standardní operace pandy pro práci s objekty typu Series, jako series.mean(). Výsledky výpočtů jsou uloženy ve slovníku stats. Histogramy jsou generovány pomocí upravené verze funkce matplotlib.pyplot.hist. Adaptace je zaměřena na zajištění toho, aby funkce mohla pracovat s různými typy souborů dat.

Studované korelační ukazatele a výběrová data

Po výsledcích analýzy proměnných zobrazí profilování pand v sekci Korelace Pearsonovy a Spearmanovy korelační matice.

Urychlete průzkumnou analýzu dat pomocí knihovny profilování pand
Pearsonova korelační matice

V případě potřeby můžete v řádku kódu, který spouští generování sestavy, nastavit indikátory prahových hodnot použitých při výpočtu korelace. Tímto způsobem můžete určit, jaká síla korelace je pro vaši analýzu považována za důležitou.

Nakonec zpráva o profilování pand v části Ukázka zobrazuje jako příklad část dat převzatých od začátku sady dat. Tento přístup může vést k nepříjemným překvapením, protože prvních několik pozorování může představovat vzorek, který neodráží charakteristiky celého souboru dat.

Urychlete průzkumnou analýzu dat pomocí knihovny profilování pand
Sekce obsahující vzorová data, která jsou předmětem studie

V důsledku toho nedoporučuji věnovat pozornost této poslední části. Místo toho je lepší použít příkaz df.sample(5), který náhodně vybere 5 pozorování ze souboru dat.

Výsledky

Abych to shrnul, knihovna profilování pand poskytuje analytikovi některé užitečné funkce, které se budou hodit v případech, kdy potřebujete rychle získat hrubou představu o datech nebo někomu předat zprávu o analýze zpravodajství. Současně se skutečná práce s daty, s přihlédnutím k jejich vlastnostem, provádí, jako bez použití profilování pand, ručně.

Pokud se chcete podívat, jak vypadá veškerá analýza zpravodajských dat v jednom notebooku Jupyter, podívejte se na tento můj projekt vytvořený pomocí nbvieweru. A dovnitř tohle Odpovídající kód najdete v repozitářích GitHubu.

Vážení čtenáři! Kde začnete analyzovat nové soubory dat?

Urychlete průzkumnou analýzu dat pomocí knihovny profilování pand

Zdroj: www.habr.com

Přidat komentář