Akcelu esploran analizon de datumoj per pano-profila biblioteko

La unua paŝo kiam oni komencas labori kun nova datumaro estas kompreni ĝin. Por fari tion, vi devas, ekzemple, ekscii la intervalojn de valoroj akceptitaj de la variabloj, iliaj specoj, kaj ankaŭ ekscii pri la nombro da mankantaj valoroj.

La biblioteko de pandoj provizas al ni multajn utilajn ilojn por fari esploradajn analizojn (EDA). Sed antaŭ ol vi uzas ilin, vi kutime devas komenci per pli ĝeneralaj funkcioj kiel df.describe(). Tamen, oni devas rimarki, ke la kapabloj provizitaj de tiaj funkcioj estas limigitaj, kaj la komencaj etapoj de laboro kun ajnaj datumaroj dum plenumado de EDA tre ofte estas tre similaj unu al la alia.

Akcelu esploran analizon de datumoj per pano-profila biblioteko

La aŭtoro de la materialo, kiun ni publikigas hodiaŭ, diras, ke li ne estas ŝatanto fari ripetajn agojn. Rezulte, serĉante ilojn por rapide kaj efike fari esploradanalizon de datumoj, li trovis la bibliotekon pandoj-profilado. La rezultoj de ĝia laboro estas esprimitaj ne en la formo de certaj individuaj indikiloj, sed en la formo de sufiĉe detala HTML-raporto enhavanta la plej multajn informojn pri la analizitaj datumoj, kiujn vi eble bezonos scii antaŭ ol komenci pli proksime labori kun ĝi.

Ĉi tie ni rigardos la funkciojn de uzado de la panda-profila biblioteko uzante la Titanic-datumaron kiel ekzemplon.

Esplora datuma analizo uzante pandojn

Mi decidis eksperimenti kun pandoj-profilado sur la Titanic-datumaro pro la malsamaj specoj de datumoj kiujn ĝi enhavas kaj la ĉeesto de mankantaj valoroj en ĝi. Mi kredas, ke la panda-profila biblioteko estas precipe interesa en kazoj, kie la datumoj ankoraŭ ne estas purigitaj kaj postulas plian prilaboradon depende de ĝiaj trajtoj. Por sukcese plenumi tian prilaboradon, vi devas scii kie komenci kaj kion atenti. Jen kie pandaj-profilaj kapabloj utilas.

Unue, ni importas la datumojn kaj uzas pandojn por akiri priskribajn statistikojn:

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

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

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

Post ekzekuto de ĉi tiu kodo, vi ricevos tion, kio estas montrita en la sekva figuro.

Akcelu esploran analizon de datumoj per pano-profila biblioteko
Priskribaj statistikoj akiritaj per normaj pandaj iloj

Kvankam estas multaj utilaj informoj ĉi tie, ĝi ne enhavas ĉion, kio estus interese scii pri la studataj datumoj. Ekzemple, oni povus supozi tion en datumkadro, en strukturo DataFrame, estas 891 linioj. Se ĉi tio devas esti kontrolita, tiam alia linio de kodo estas postulata por determini la grandecon de la kadro. Kvankam ĉi tiuj kalkuloj ne estas precipe rimedo-intensaj, ripeti ilin la tutan tempon nepre perdos tempon, kiu verŝajne povus esti pli bone elspezita por purigi la datumojn.

Esplora datuma analizo uzante pandas-profiladon

Nun ni faru la samon uzante pandas-profiladon:

pandas_profiling.ProfileReport(df)

Efektivigi la ĉi-supran linion de kodo generos raporton kun esploradaj datumoj-analizaj indikiloj. La supre montrita kodo eligos la trovitajn datumojn, sed vi povas fari ĝin eligi HTML-dosieron, kiun vi povas montri al iu, ekzemple.

La unua parto de la raporto enhavos Superrigardan sekcion, donante bazajn informojn pri la datumoj (nombro da observoj, nombro da variabloj, ktp.). Ĝi ankaŭ enhavos liston de atentigoj, sciigante la analiziston pri aferoj, kiujn oni devas atenti. Ĉi tiuj atentigoj povas doni indicojn pri kie vi povas koncentri viajn datumpurigajn klopodojn.

Akcelu esploran analizon de datumoj per pano-profila biblioteko
Superrigarda raportsekcio

Esplora Variebla Analizo

Sub la sekcio Superrigardo de la raporto vi povas trovi utilajn informojn pri ĉiu variablo. Ili inkluzivas, interalie, malgrandajn diagramojn priskribantajn la distribuadon de ĉiu variablo.

Akcelu esploran analizon de datumoj per pano-profila biblioteko
Pri la Aĝa Nombra Variablo

Kiel vi povas vidi de la antaŭa ekzemplo, pandas-profilado donas al ni plurajn utilajn indikilojn, kiel ekzemple la procento kaj nombro de mankantaj valoroj, same kiel la priskribajn statistikajn mezurojn, kiujn ni jam vidis. Ĉar Age estas nombra variablo, bildigo de ĝia distribuo en formo de histogramo permesas al ni konkludi, ke ni havas distribuon dekstren.

Konsiderante kategorian variablon, la produktaĵrezultoj estas iomete malsamaj de tiuj trovitaj por nombra variablo.

Akcelu esploran analizon de datumoj per pano-profila biblioteko
Pri la Seksa kategoria variablo

Nome, anstataŭ trovi la mezumon, minimumon kaj maksimumon, la panda-profila biblioteko trovis la nombron da klasoj. Ĉar Sex - binara variablo, ĝiaj valoroj estas reprezentitaj per du klasoj.

Se vi ŝatas ekzameni kodon kiel mi, vi eble interesiĝos pri kiel precize la panda-profila biblioteko kalkulas ĉi tiujn metrikojn. Eltrovi pri tio, ĉar la biblioteka kodo estas malfermita kaj disponebla ĉe GitHub, ne estas tiel malfacila. Ĉar mi ne estas granda ŝatanto uzi nigrajn skatolojn en miaj projektoj, mi rigardis la fontkodon de la biblioteko. Ekzemple, jen kiel aspektas la mekanismo por prilaborado de nombraj variabloj, reprezentita per la funkcio priskribi_numera_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)

Kvankam ĉi tiu kodo povas ŝajni sufiĉe granda kaj kompleksa, ĝi estas fakte tre simpla por kompreni. La punkto estas, ke en la fontkodo de la biblioteko estas funkcio kiu determinas la tipojn de variabloj. Se rezultas, ke la biblioteko renkontis nombran variablon, la supra funkcio trovos la metrikojn, kiujn ni rigardis. Ĉi tiu funkcio uzas normajn pandajn operaciojn por labori kun objektoj de tipo Series, Ŝati series.mean(). Kalkulaj rezultoj estas konservitaj en vortaro stats. Histogramoj estas generitaj uzante adaptitan version de la funkcio matplotlib.pyplot.hist. Adapto celas certigi, ke la funkcio povas funkcii kun malsamaj specoj de datumserioj.

Korelaciaj indikiloj kaj specimenaj datumoj studitaj

Post la rezultoj de la analizo de la variabloj, pandoj-profilado, en la sekcio de Korelacioj, montros la korelaciajn matricojn de Pearson kaj Spearman.

Akcelu esploran analizon de datumoj per pano-profila biblioteko
Pearson-korelacia matrico

Se necese, vi povas, en la linio de kodo, kiu ekigas la generadon de la raporto, agordi la indikilojn de la sojlaj valoroj uzataj kiam vi kalkulas la korelacion. Farante tion, vi povas specifi, kian forton de korelacio estas konsiderata grava por via analizo.

Fine, la raporto pri pandoj-profilado, en la sekcio Specimeno, montras, ekzemple, pecon de datumoj prenitaj de la komenco de la datumaro. Ĉi tiu aliro povas konduki al malagrablaj surprizoj, ĉar la unuaj malmultaj observoj povas reprezenti provaĵon kiu ne reflektas la karakterizaĵojn de la tuta datumaro.

Akcelu esploran analizon de datumoj per pano-profila biblioteko
Sekcio enhavanta specimenajn datumojn studatajn

Kiel rezulto, mi ne rekomendas atenti ĉi tiun lastan sekcion. Anstataŭe, estas pli bone uzi la komandon df.sample(5), kiu hazarde elektos 5 observojn el la datumaro.

Rezultoj

Resume, la biblioteko pri pandoj-profilado donas al la analizisto iujn utilajn kapablojn, kiuj estos utilaj en kazoj, kie vi devas rapide akiri malglatan ideon pri la datumoj aŭ transdoni spionan analizon al iu. Samtempe, reala laboro kun datumoj, konsiderante ĝiajn trajtojn, estas farita, kiel sen uzi pandas-profiladon, permane.

Se vi volas rigardi kiel aspektas la tuta analizo de datumoj de inteligenteco en unu Jupyter kajero, rigardu ĉi tio mia projekto kreita per nbviewer. Kaj en ĉi tio Vi povas trovi la respondan kodon en GitHub-deponejoj.

Karaj legantoj! Kie vi komencas analizi novajn datumajn arojn?

Akcelu esploran analizon de datumoj per pano-profila biblioteko

fonto: www.habr.com

Aldoni komenton