Pabilisin ang pagsusuri ng data sa paggalugad gamit ang pandas-profiling library

Ang unang hakbang kapag nagsimulang magtrabaho sa isang bagong set ng data ay unawain ito. Upang magawa ito, kailangan mo, halimbawa, upang malaman ang mga saklaw ng mga halaga na tinatanggap ng mga variable, ang kanilang mga uri, at alamin din ang tungkol sa bilang ng mga nawawalang halaga.

Ang pandas library ay nagbibigay sa amin ng maraming kapaki-pakinabang na tool para sa pagsasagawa ng exploratory data analysis (EDA). Ngunit bago mo gamitin ang mga ito, karaniwang kailangan mong magsimula sa mas pangkalahatang mga function tulad ng df.describe(). Gayunpaman, dapat tandaan na ang mga kakayahan na ibinigay ng naturang mga pag-andar ay limitado, at ang mga unang yugto ng pagtatrabaho sa anumang mga set ng data kapag gumaganap ng EDA ay napakadalas na halos magkapareho sa bawat isa.

Pabilisin ang pagsusuri ng data sa paggalugad gamit ang pandas-profiling library

Sinabi ng may-akda ng materyal na inilalathala namin ngayon na hindi siya tagahanga ng mga paulit-ulit na pagkilos. Bilang resulta, sa paghahanap ng mga tool upang mabilis at mahusay na maisagawa ang pagsusuri ng data ng eksplorasyon, natagpuan niya ang library pandas-profiling. Ang mga resulta ng trabaho nito ay ipinahayag hindi sa anyo ng ilang mga indibidwal na tagapagpahiwatig, ngunit sa anyo ng isang medyo detalyadong ulat ng HTML na naglalaman ng karamihan ng impormasyon tungkol sa nasuri na data na maaaring kailangan mong malaman bago magsimulang magtrabaho nang mas malapit dito.

Dito ay titingnan natin ang mga tampok ng paggamit ng pandas-profiling library gamit ang Titanic dataset bilang isang halimbawa.

Exploratory data analysis gamit ang mga panda

Nagpasya akong mag-eksperimento sa pandas-profiling sa Titanic dataset dahil sa iba't ibang uri ng data na nilalaman nito at ang pagkakaroon ng mga nawawalang halaga dito. Naniniwala ako na ang library ng pandas-profiling ay lalong kawili-wili sa mga kaso kung saan ang data ay hindi pa nalilinis at nangangailangan ng karagdagang pagproseso depende sa mga katangian nito. Upang matagumpay na maisagawa ang naturang pagproseso, kailangan mong malaman kung saan magsisimula at kung ano ang dapat bigyang pansin. Dito magagamit ang mga kakayahan sa pag-profile ng pandas.

Una, ini-import namin ang data at gumagamit ng mga pandas para makakuha ng mga mapaglarawang istatistika:

# ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
import pandas as pd
import pandas_profiling
import numpy as np

# ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')

# вычислСниС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ статистики
df.describe()

Pagkatapos isagawa ang piraso ng code na ito, makukuha mo ang ipinapakita sa sumusunod na figure.

Pabilisin ang pagsusuri ng data sa paggalugad gamit ang pandas-profiling library
Descriptive statistics na nakuha gamit ang standard pandas tools

Bagama't mayroong maraming kapaki-pakinabang na impormasyon dito, hindi ito naglalaman ng lahat ng bagay na kawili-wiling malaman tungkol sa data na pinag-aaralan. Halimbawa, maaaring ipagpalagay na sa isang data frame, sa isang istraktura DataFrame, mayroong 891 na linya. Kung kailangan itong suriin, kailangan ng isa pang linya ng code upang matukoy ang laki ng frame. Bagama't ang mga kalkulasyong ito ay hindi partikular na resource-intensive, ang pag-uulit sa mga ito sa lahat ng oras ay nakasalalay sa pag-aaksaya ng oras na maaaring mas mahusay na ginugol sa paglilinis ng data.

Exploratory data analysis gamit ang pandas-profiling

Ngayon ay gawin natin ang parehong gamit ang pandas-profiling:

pandas_profiling.ProfileReport(df)

Ang pagpapatupad ng linya ng code sa itaas ay bubuo ng ulat na may mga tagapagpahiwatig ng pagsusuri ng data sa paggalugad. Ang code na ipinapakita sa itaas ay maglalabas ng data na natagpuan, ngunit maaari mo itong gawing output ng isang HTML file na maaari mong ipakita sa isang tao, halimbawa.

Ang unang bahagi ng ulat ay maglalaman ng seksyong Pangkalahatang-ideya, na nagbibigay ng pangunahing impormasyon tungkol sa data (bilang ng mga obserbasyon, bilang ng mga variable, atbp.). Maglalaman din ito ng listahan ng mga alerto, na nag-aabiso sa analyst ng mga bagay na dapat bigyang-pansin. Ang mga alertong ito ay maaaring magbigay ng mga pahiwatig kung saan mo maaaring ituon ang iyong mga pagsisikap sa paglilinis ng data.

Pabilisin ang pagsusuri ng data sa paggalugad gamit ang pandas-profiling library
Pangkalahatang-ideya ng seksyon ng ulat

Pagsusuri sa Variable ng Eksploratory

Sa ibaba ng seksyong Pangkalahatang-ideya ng ulat, makakahanap ka ng kapaki-pakinabang na impormasyon tungkol sa bawat variable. Kabilang sa mga ito, bukod sa iba pang mga bagay, ang maliliit na tsart na naglalarawan sa pamamahagi ng bawat variable.

Pabilisin ang pagsusuri ng data sa paggalugad gamit ang pandas-profiling library
Tungkol sa Age Numeric Variable

Gaya ng nakikita mo mula sa nakaraang halimbawa, ang pandas-profiling ay nagbibigay sa amin ng ilang kapaki-pakinabang na indicator, gaya ng porsyento at bilang ng mga nawawalang value, pati na rin ang mga naglalarawang mga sukat ng istatistika na nakita na namin. kasi Age ay isang numerical variable, ang visualization ng pamamahagi nito sa anyo ng isang histogram ay nagbibigay-daan sa amin upang tapusin na mayroon kaming distribusyon na nakahilig sa kanan.

Kapag isinasaalang-alang ang isang kategoryang variable, ang mga resulta ng output ay bahagyang naiiba mula sa mga natagpuan para sa isang numeric variable.

Pabilisin ang pagsusuri ng data sa paggalugad gamit ang pandas-profiling library
Tungkol sa Sex categorical variable

Ibig sabihin, sa halip na hanapin ang average, minimum at maximum, nakita ng pandas-profiling library ang bilang ng mga klase. kasi Sex β€” isang binary variable, ang mga halaga nito ay kinakatawan ng dalawang klase.

Kung gusto mong suriin ang code tulad ng ginagawa ko, maaari kang maging interesado sa kung paano eksaktong kinakalkula ng pandas-profiling library ang mga sukatang ito. Ang pag-alam tungkol dito, dahil bukas ang library code at available sa GitHub, ay hindi napakahirap. Dahil hindi ako mahilig gumamit ng mga itim na kahon sa aking mga proyekto, tiningnan ko ang source code ng library. Halimbawa, ito ang hitsura ng mekanismo para sa pagproseso ng mga variable na numero, na kinakatawan ng function describe_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)

Kahit na ang piraso ng code na ito ay maaaring mukhang medyo malaki at kumplikado, ito ay talagang napakasimpleng maunawaan. Ang punto ay na sa source code ng library mayroong isang function na tumutukoy sa mga uri ng mga variable. Kung lumabas na ang library ay nakatagpo ng isang numeric na variable, makikita ng function sa itaas ang mga sukatan na aming tinitingnan. Gumagamit ang function na ito ng mga karaniwang pagpapatakbo ng pandas para sa pagtatrabaho sa mga bagay na may uri Series, gaya ng series.mean(). Ang mga resulta ng pagkalkula ay naka-imbak sa isang diksyunaryo stats. Ang mga histogram ay nabuo gamit ang isang inangkop na bersyon ng function matplotlib.pyplot.hist. Ang adaptasyon ay naglalayong tiyakin na ang function ay maaaring gumana sa iba't ibang uri ng data set.

Mga tagapagpahiwatig ng ugnayan at sample na data na pinag-aralan

Pagkatapos ng mga resulta ng pagsusuri ng mga variable, ang pandas-profiling, sa seksyong Mga Correlations, ay magpapakita ng mga matrice ng ugnayan ng Pearson at Spearman.

Pabilisin ang pagsusuri ng data sa paggalugad gamit ang pandas-profiling library
Pearson correlation matrix

Kung kinakailangan, maaari mong, sa linya ng code na nagpapalitaw sa pagbuo ng ulat, itakda ang mga tagapagpahiwatig ng mga halaga ng threshold na ginamit kapag kinakalkula ang ugnayan. Sa paggawa nito, maaari mong tukuyin kung anong lakas ng ugnayan ang itinuturing na mahalaga para sa iyong pagsusuri.

Panghuli, ang ulat sa pag-profile ng pandas, sa seksyong Sample, ay nagpapakita, bilang halimbawa, ng isang piraso ng data na kinuha mula sa simula ng set ng data. Ang diskarte na ito ay maaaring humantong sa hindi kasiya-siyang mga sorpresa, dahil ang unang ilang mga obserbasyon ay maaaring kumakatawan sa isang sample na hindi nagpapakita ng mga katangian ng buong set ng data.

Pabilisin ang pagsusuri ng data sa paggalugad gamit ang pandas-profiling library
Seksyon na naglalaman ng sample na data na pinag-aaralan

Bilang resulta, hindi ko inirerekomenda ang pagbibigay pansin sa huling seksyong ito. Sa halip, mas mainam na gamitin ang utos df.sample(5), na random na pipili ng 5 obserbasyon mula sa set ng data.

Mga resulta ng

Upang buod, ang pandas-profiling library ay nagbibigay sa analyst ng ilang mga kapaki-pakinabang na kakayahan na magiging kapaki-pakinabang sa mga kaso kung saan kailangan mong mabilis na makakuha ng isang magaspang na ideya ng data o ipasa ang isang ulat ng pagsusuri ng katalinuhan sa isang tao. Kasabay nito, ang totoong trabaho sa data, na isinasaalang-alang ang mga tampok nito, ay isinasagawa, nang hindi gumagamit ng pandas-profiling, nang manu-mano.

Kung gusto mong tingnan kung ano ang hitsura ng lahat ng pagsusuri sa data ng intelligence sa isang Jupyter notebook, tingnan ito ginawa ang aking proyekto gamit ang nbviewer. At sa Ito Mahahanap mo ang kaukulang code sa mga repositoryo ng GitHub.

Minamahal na mambabasa! Saan ka magsisimulang magsuri ng mga bagong set ng data?

Pabilisin ang pagsusuri ng data sa paggalugad gamit ang pandas-profiling library

Pinagmulan: www.habr.com

Magdagdag ng komento