Andmete eelanalüüsi kiirendamine pandas-profiling teegi abil

Esmalt, kui alustate uue andmehulgaga töötamist, tuleb selle mõistmine. Selleks on näiteks vajalik välja selgitada, millised on muutujate väärtuste vahemikud, nende tüübid ning teada saada, kui palju väärtusi on puudu.

Pandas teek pakub meile palju kasulikke tööriistu andmete eelanalüüsi (Exploratory Data Analysis, EDA) teostamiseks. Kuid enne nende kasutamist tuleb tavaliselt alustada üldisema tasemega funktsioonidest, nagu df.describe(). Tuleb märkida, et selliste funktsioonide pakkumised on piiratud ning EDA algusfaasid on tihti üksteisega väga sarnased.

Andmete eelanalüüsi kiirendamine pandas-profiling teegi abil

Materjali autor, mida täna avaldame, ütleb, et ta ei meeldi korduvate tegevuste tegemine. Seetõttu leidis ta vahendeid, mis võimaldavad kiiresti ja tõhusalt andmete eelanalüüsi teostada, ning leidis teegi pandas-profiling. Selle töö tulemused ei väljendu mingite eraldi näitajate kujul, vaid pigem üsna detailse HTML-aruandena, mis sisaldab suure osa teabe analüüsitavate andmete kohta, mida võib olla vaja teada enne nende süvendatud töötlemist.

Siin käsitletakse pandas-profilingi teegi kasutamise eripära Titanic andmehulga näitel.

Andmete eelanalüüs pandas tööriistadega

Otsustasin katsetada pandas-profilingut Titanic andmehulgaga, kuna seal on erinevat tüüpi andmeid ja seal on puuduvaid väärtusi. Arvan, et pandas-profiling on eriti huvitav, kui andmed ei ole veel puhastatud ning vajavad edasist töötlemist, mis sõltub nende omadustest. Selle eduka täitmise jaoks tuleb teada, kust alustada ja millele tähelepanu pöörata. Siin tulevad meelde pandas-profilingi võimalused.

Alustame andmete importimisega ja kasutame pandast, et saada kirjeldava statistika näitajaid:

# импорт необходимых пакетов
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 koodilõigu täitmist saadakse see, mis on näidatud järgmises joonises.

Andmete eelanalüüsi kiirendamine pandas-profiling teegi abil
Kirjeldava statistika näitajad, mis on saadud pandas standardsete vahendite abil

Kuigi siin on palju kasulikke teavet, ei ole siin kõike, mida võiks huvitada uuritavate andmete kohta. Näiteks võib eeldada, et andmeframes, struktuuris DataFrame, on 891 rida. Kui seda on vaja kontrollida, siis on vajalik veel üks rida koodi, mis määrab frame'i suuruse. Kuigi need arvutused ei ole eriti ressursimahukad, toob nende pidev kordamine kindlasti kaasa ajakadu, mille võib-olla oleks parem kulutada andmete puhastamisele.

Andmete uurimine pandas-profiling abil

Nüüd teeme sama, kasutades pandas-profiling:

pandas_profiling.ProfileReport(df)

Ülaltoodud koodi täitmine annab võimaluse luua aruanne andmete uurimise näitajatega. Ülaltoodud kood toob välja leitud andmed, kuid on võimalik teha nii, et tulemuseks oleks HTML-fail, mida näiteks saaks kellelegi näidata.

Aruande esimene osa sisaldab jaotist Overview (Ülevaade), mis annab põhiteavet andmete kohta (täheldamiste arv, muutujaid arv jne). Lisaks sisaldab see hoiatuste nimekirja, mis teavitab analüütikut, millele tasub erilise tähelepanu pöörata. Need hoiatusteated võivad anda vihjeid, kuhu tuleks andmete puhastamise käigus tähelepanu suunata.

Andmete eelanalüüsi kiirendamine pandas-profiling teegi abil
Aruande jaotis Overview

Muutujate uurimine

Jaotise Overview järel aruandes võib leida kasulikku teavet iga muutuja kohta. Nendesse kuuluvad muu hulgas väikesed diagrammid, mis kirjeldavad iga muutuja jaotust.

Andmete eelanalüüsi kiirendamine pandas-profiling teegi abil
Teave numbrilise muutuja Age kohta

Nagu eelnevas näites näha, annab pandas-profiling meile mõned kasulikud näitajad, nagu kadunud väärtuste protsent ja arv, samuti kirjeldavad statistika näitajad, mida oleme juba näinud. Kuna Age on numbriline muutuja, võimaldab selle jaotuse visualiseerimine histogrammina meil järeldada, et tegemist on paremale kaldus jaotusega.

Kategoorilise muutuja uurimisel on väljundnäitajad mõnevõrra erinevad nendest, mis leiti numbriliste muutuja puhul.

Andmete eelanalüüsi kiirendamine pandas-profiling teegi abil
Teave kategoorilise muutuja Sex kohta

Konkreetsemalt, keskmise, miinimumi ja maksimumi leidmise asemel leidis pandas-profiling raamatukogu klasside arvu. Kuna Sugu — binaarne muutuja, mille väärtused on esindatud kahe klassiga.

Kui teile, nagu mulle, meeldib koodi uurida, siis võib teid huvitada, kuidas täpselt pandas-profiling raamatukogu neid näitajaid arvutab. Selle kohta teabe leidmine pole keeruline, kuna raamatukogu kood on avatud ja saadaval GitHubis. Kuna ma ei ole suur "mustade karpide" kasutamise fänn oma projektides, heitsin pilgu raamatukogu lähtekoodile. Näiteks näeb välja mehhanism numbriliste muutujate töötlemiseks, mille esindab funktsioon describe_numeric_1d:

def describe_numeric_1d(series, **kwargs):
    """Arvuta numbrilise (`TYPE_NUM`) muutuja (seeria) kokkuvõtvad statistilised näitajad.
    Samuti loo histogrammid (mini ja täis) selle jaotuse jaoks.
    Parameetrid
    ----------
    series : Seeria
        Muutujat, mida kirjeldada.
    Tagastab
    -------
    Seeria
        Muutuja kirjeldus seeriana, mille indeksiks on statistika võtmed.
    """
    # Formaat число как процент. Например 0.25 станет 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']
    # Et vältida selle arvutamist mitu korda
    _series_no_na = series.dropna()
    for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
        # dropna() on lahendus 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)
    # Histogrammid
    stats['histogram'] = histogram(series, **kwargs)
    stats['mini_histogram'] = mini_histogram(series, **kwargs)
    return pd.Series(stats, name=series.name)

Kuigi see koodifragmendi võib tunduda üsna suur ja keeruline, on selle mõistmine tegelikult väga lihtne. See tähendab, et raamatukogu lähtekoodis on funktsioon, mis määrab muutuja tüübid. Kui selgub, et raamatukogu kohtas numbrilist muutujat, leiab eelpool mainitud funktsioon näitajad, mida me käsitlesime. Selles funktsioonis kasutatakse pandas'e standardoperatsioone objekti tüübiga Seeria, nagu series.mean(). Arvutuste tulemused salvestatakse sõnastikku stats. Histogrammid luuakse kohandatud versiooni abil funktsioonist matplotlib.pyplot.hist. Kohandamine on suunatud sellele, et funktsioon saaks töötada erinevate andmestiku tüüpidega.

Korreleerimise näitajad ja uuritavate andmete näidis

Pärast pandas-profiling'i muutuja analüüsi tulemusi kuvab jaotises Korrelaatsioonid Pearoni ja Spearmani korrelatsioonide maatriksi.

Andmete eelanalüüsi kiirendamine pandas-profiling teegi abil
Pearoni korrelatsioonide maatriks

Vajadusel saate koodi real, mis käivitab aruande genereerimise, määrata läviväärtused, mida rakendatakse korrelatsiooni arvutamisel. Tehes seda, saate määrata, milline korrelatsiooni tugevus on analüüsi jaoks oluline.

Ja lõpuks, pandas-profiling raportis jaotises Näidis esitatakse näidisena andmete fragment, mis on saadud andmestiku algusest. Selline lähenemine võib viia ebameeldivate üllatusteni, kuna esimesed paar vaatlust võivad esindada valikut, mis ei kajasta kogu andmestiku omadusi.

Andmete eelanalüüsi kiirendamine pandas-profiling teegi abil
Jaotis, mis sisaldab uuritavate andmete näidist

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

Summary

Kokkuvõttes võib öelda, et pandas-profiling raamatukogu annab analüütikule kasulikke võimalusi, mis on abiks olukordades, kus on vaja kiiresti saada üldine ligikaudne ülevaade andmetest või edastada kellegile andmete uurimise analüüsi raport. Sellega seoses toimub andmetega tegelik töö, arvestades nende omadusi, nagu ka ilma pandas-profilingut kasutamata, käsitsi.

Kui soovite näha, milline näeb välja kogu andmete uurimise analüüs ühes Jupyteri märkmikus - vaadake see minu projekti, mis on loodud nbviewer'i abil. Ja selles GitHub'i repos leidub vastav kood.

Lugupeetud lugejad! Kust alustate uute andmestike analüüsi?

Andmete eelanalüüsi kiirendamine pandas-profiling teegi abil

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster