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é.
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
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.
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.
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é.
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.
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í
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.
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.
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
Vážení čtenáři! Kde začnete analyzovat nové soubory dat?
Zdroj: www.habr.com