Kiirendage uurimuslikku andmete analüüsi pandade profileerimise teegi abil

Esimene samm uue andmekogumiga töötama asumisel on selle mõistmine. Selleks tuleb näiteks välja selgitada muutujate poolt aktsepteeritavate väärtuste vahemikud, nende tüübid ja ka puuduvate väärtuste arv.

Pandade raamatukogu pakub meile palju kasulikke tööriistu uurimusliku andmeanalüüsi (EDA) läbiviimiseks. Kuid enne nende kasutamist peate tavaliselt alustama üldisemate funktsioonidega, näiteks df.describe(). Siiski tuleb märkida, et selliste funktsioonide pakutavad võimalused on piiratud ja mis tahes andmekogumiga töötamise algetapid EDA teostamisel on väga sageli üksteisega väga sarnased.

Kiirendage uurimuslikku andmete analüüsi pandade profileerimise teegi abil

Täna avaldatava materjali autor ütleb, et ta ei ole korduvate toimingute fänn. Selle tulemusena leidis ta raamatukogu, otsides tööriistu kiireks ja tõhusaks uurimusliku andmeanalüüsi tegemiseks pandade profileerimine. Selle töö tulemusi ei väljendata mitte teatud üksikute näitajate kujul, vaid üsna üksikasjaliku HTML-aruande kujul, mis sisaldab enamikku analüüsitud andmete kohta teavet, mida peate võib-olla teadma, enne kui hakkate nendega tihedamat koostööd tegema.

Siin vaatleme pandade profileerimise teegi kasutamise funktsioone, kasutades näitena Titanicu andmekogumit.

Uurimuslik andmete analüüs pandade abil

Otsustasin katsetada pandade profileerimist Titanicu andmekogumis, kuna selles sisalduvad erinevat tüüpi andmed ja selles puuduvad väärtused. Usun, et pandade profileerimise teek on eriti huvitav juhtudel, kus andmed on veel puhastamata ja vajavad vastavalt oma omadustele edasist töötlemist. Sellise töötlemise edukaks läbiviimiseks peate teadma, kust alustada ja millele tähelepanu pöörata. Siin tulevad kasuks pandade profileerimise võimalused.

Esiteks impordime andmed ja kasutame kirjeldava statistika saamiseks pandasid:

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

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

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

Pärast selle koodiosa täitmist saate selle, mis on näidatud järgmisel joonisel.

Kiirendage uurimuslikku andmete analüüsi pandade profileerimise teegi abil
Standardsete pandatööriistade abil saadud kirjeldav statistika

Kuigi siin on palju kasulikku teavet, ei sisalda see kõike, mida oleks uuritavate andmete kohta huvitav teada. Näiteks võib eeldada, et andmeraamis, struktuuris DataFrame, on 891 rida. Kui seda on vaja kontrollida, on raami suuruse määramiseks vaja teist koodirida. Kuigi need arvutused ei ole eriti ressursimahukad, raiskab nende pidev kordamine kindlasti aega, mida võiks tõenäoliselt paremini kulutada andmete puhastamisele.

Uurimuslik andmete analüüs pandaprofiilide abil

Nüüd teeme sama, kasutades pandade profileerimist:

pandas_profiling.ProfileReport(df)

Ülaltoodud koodirea täitmine genereerib aruande uurimuslike andmeanalüüsi näitajatega. Ülaltoodud kood väljastab leitud andmed, kuid saate panna selle väljastama HTML-faili, mida saate näiteks kellelegi näidata.

Aruande esimene osa sisaldab jaotist Ülevaade, mis annab põhiteavet andmete kohta (vaatluste arv, muutujate arv jne). See sisaldab ka hoiatuste loendit, teavitades analüütikut asjadest, millele tuleb erilist tähelepanu pöörata. Need hoiatused võivad anda vihjeid selle kohta, kuhu saate oma andmete puhastamise jõupingutused suunata.

Kiirendage uurimuslikku andmete analüüsi pandade profileerimise teegi abil
Ülevaate aruande jaotis

Uurimuslik muutujate analüüs

Aruande jaotise Ülevaade alt leiate kasulikku teavet iga muutuja kohta. Need sisaldavad muu hulgas väikseid diagramme, mis kirjeldavad iga muutuja jaotust.

Kiirendage uurimuslikku andmete analüüsi pandade profileerimise teegi abil
Vanuse numbrilise muutuja kohta

Nagu eelmisest näitest näha, annab pandade profileerimine meile mitmeid kasulikke näitajaid, nagu puuduvate väärtuste protsent ja arv, aga ka kirjeldava statistika mõõdikud, mida oleme juba näinud. Sest Age on arvuline muutuja, selle jaotuse visualiseerimine histogrammi kujul võimaldab järeldada, et meil on jaotus viltu paremale.

Kategoorilise muutuja puhul on väljundtulemused veidi erinevad numbrilise muutuja tulemustest.

Kiirendage uurimuslikku andmete analüüsi pandade profileerimise teegi abil
Kategoorilise muutuja Sex kohta

Nimelt leidis pandade profileerimise raamatukogu selle asemel, et leida keskmine, miinimum ja maksimum, klasside arvu. Sest Sex - binaarne muutuja, selle väärtused on esindatud kahe klassiga.

Kui teile meeldib koodi uurida nagu mina, võite olla huvitatud sellest, kuidas pandade profileerimise teek neid mõõdikuid täpselt arvutab. Arvestades, et raamatukogu kood on avatud ja GitHubis saadaval, pole selle teadasaamine nii keeruline. Kuna ma ei ole oma projektides mustade kastide kasutamise suur fänn, heitsin pilgu raamatukogu lähtekoodile. Näiteks selline näeb välja numbriliste muutujate töötlemise mehhanism, mida kujutab funktsioon kirjelda_numbriline_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)

Kuigi see koodilõik võib tunduda üsna suur ja keeruline, on sellest tegelikult väga lihtne aru saada. Asi on selles, et teegi lähtekoodis on funktsioon, mis määrab muutujate tüübid. Kui selgub, et teek on kohanud numbrilist muutujat, leiab ülaltoodud funktsioon mõõdikud, mida me vaatasime. See funktsioon kasutab tüüpiliste objektidega töötamiseks standardseid pandaoperatsioone Series, nagu series.mean(). Arvutuste tulemused salvestatakse sõnastikku stats. Histogrammid genereeritakse funktsiooni kohandatud versiooni abil matplotlib.pyplot.hist. Kohandamise eesmärk on tagada, et funktsioon saaks töötada erinevat tüüpi andmekogumitega.

Uuritud korrelatsiooninäitajaid ja näidisandmeid

Pärast muutujate analüüsi tulemusi kuvab pandade profileerimine jaotises Korrelatsioonid Pearsoni ja Spearmani korrelatsioonimaatriksid.

Kiirendage uurimuslikku andmete analüüsi pandade profileerimise teegi abil
Pearsoni korrelatsioonimaatriks

Vajadusel saate aruande genereerimise käivitaval koodireal määrata korrelatsiooni arvutamisel kasutatavate läviväärtuste indikaatorid. Seda tehes saate määrata, millist korrelatsiooni tugevust peetakse teie analüüsi jaoks oluliseks.

Lõpuks kuvatakse pandade profileerimise aruande jaotises Näidis näitena andmestik, mis on võetud andmekogumi algusest. Selline lähenemine võib tuua kaasa ebameeldivaid üllatusi, kuna paar esimest vaatlust võivad esindada valimit, mis ei kajasta kogu andmekogumi omadusi.

Kiirendage uurimuslikku andmete analüüsi pandade profileerimise teegi abil
Uuritavate näidisandmete osa

Seetõttu ei soovita ma sellele viimasele lõigule tähelepanu pöörata. Selle asemel on parem kasutada käsku df.sample(5), mis valib andmekogumist juhuslikult 5 vaatlust.

Tulemused

Kokkuvõtteks võib öelda, et pandade profileerimise raamatukogu annab analüütikule mõned kasulikud võimalused, mis tulevad kasuks juhtudel, kui peate andmetest kiiresti ligikaudse ettekujutuse saama või kellelegi luureanalüüsi aruannet edastama. Samal ajal tehakse tegelikku tööd andmetega, võttes arvesse nende funktsioone, nagu ilma pandade profileerimist kasutamata, käsitsi.

Kui soovite heita pilgu sellele, milline näeb välja kogu luureandmete analüüs ühes Jupyteri märkmikus, vaadake see minu projekt, mis on loodud nbvieweri abil. Ja sisse see Vastava koodi leiate GitHubi hoidlatest.

Kallid lugejad! Kust alustada uute andmekogumite analüüsimist?

Kiirendage uurimuslikku andmete analüüsi pandade profileerimise teegi abil

Allikas: www.habr.com

Lisa kommentaar