Paspartinkite tiriamųjų duomenų analizę naudodami pandų profiliavimo biblioteką

Pirmasis žingsnis pradedant dirbti su nauju duomenų rinkiniu yra jį suprasti. Norėdami tai padaryti, turite, pavyzdžiui, sužinoti kintamiesiems priimtinų reikšmių diapazonus, jų tipus, taip pat sužinoti trūkstamų reikšmių skaičių.

Pandų biblioteka suteikia mums daug naudingų įrankių, leidžiančių atlikti tiriamąją duomenų analizę (EDA). Tačiau prieš naudodami jas paprastai turite pradėti nuo bendresnių funkcijų, tokių kaip df.describe(). Tačiau reikia pažymėti, kad tokių funkcijų teikiamos galimybės yra ribotos, o pradiniai darbo su bet kokiais duomenų rinkiniais etapai atliekant EDA labai dažnai yra labai panašūs vienas į kitą.

Paspartinkite tiriamųjų duomenų analizę naudodami pandų profiliavimo biblioteką

Šiandien publikuojamos medžiagos autorius sako, kad nėra pasikartojančių veiksmų mėgėjas. Dėl to, ieškodamas įrankių greitai ir efektyviai atlikti tiriamąją duomenų analizę, jis surado biblioteką pandų profiliavimas. Jo darbo rezultatai išreiškiami ne tam tikrų atskirų rodiklių forma, o gana išsamia HTML ataskaita, kurioje yra didžioji dalis informacijos apie analizuojamus duomenis, kurią jums gali prireikti žinoti prieš pradedant glaudžiau dirbti su jais.

Čia apžvelgsime pandų profiliavimo bibliotekos naudojimo ypatybes, kaip pavyzdį naudodami Titaniko duomenų rinkinį.

Tiriamoji duomenų analizė naudojant pandas

Nusprendžiau eksperimentuoti su pandų profiliavimu „Titaniko“ duomenų rinkinyje dėl skirtingų jame esančių duomenų tipų ir trūkstamų reikšmių. Manau, kad pandų profiliavimo biblioteka yra ypač įdomi tais atvejais, kai duomenys dar nėra išvalyti ir reikalauja tolesnio apdorojimo, atsižvelgiant į jo savybes. Norint sėkmingai atlikti tokį apdorojimą, reikia žinoti, nuo ko pradėti ir į ką atkreipti dėmesį. Čia praverčia pandų profiliavimo galimybės.

Pirmiausia importuojame duomenis ir naudojame pandas, kad gautume aprašomąją statistiką:

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

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

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

Įvykdę šią kodo dalį, gausite tai, kas parodyta toliau pateiktame paveikslėlyje.

Paspartinkite tiriamųjų duomenų analizę naudodami pandų profiliavimo biblioteką
Aprašomoji statistika, gauta naudojant standartinius pandų įrankius

Nors čia yra daug naudingos informacijos, joje nėra visko, ką būtų įdomu sužinoti apie tiriamus duomenis. Pavyzdžiui, galima manyti, kad duomenų rėmelyje, struktūroje DataFrame, yra 891 eilutės. Jei tai reikia patikrinti, kadro dydžiui nustatyti reikalinga kita kodo eilutė. Nors šie skaičiavimai nereikalauja itin daug išteklių, juos nuolat kartodami sugaišite laiko, kurį tikriausiai būtų galima geriau skirti duomenų valymui.

Tiriamoji duomenų analizė naudojant pandų profiliavimą

Dabar padarykime tą patį naudodami pandų profiliavimą:

pandas_profiling.ProfileReport(df)

Vykdydami aukščiau pateiktą kodo eilutę, bus sukurta ataskaita su tiriamųjų duomenų analizės rodikliais. Aukščiau parodytas kodas išves rastus duomenis, bet galite priversti jį išvesti HTML failą, kurį, pavyzdžiui, galėsite parodyti kam nors.

Pirmoje ataskaitos dalyje bus apžvalgos skyrius, kuriame pateikiama pagrindinė informacija apie duomenis (stebėjimų skaičius, kintamųjų skaičius ir kt.). Jame taip pat bus įspėjimų sąrašas, informuojantis analitiką apie dalykus, į kuriuos reikia atkreipti ypatingą dėmesį. Šie įspėjimai gali suteikti užuominų, kur galite sutelkti duomenų valymo pastangas.

Paspartinkite tiriamųjų duomenų analizę naudodami pandų profiliavimo biblioteką
Apžvalgos ataskaitos skyrius

Tiriamoji kintamųjų analizė

Po ataskaitos skyriumi Apžvalga rasite naudingos informacijos apie kiekvieną kintamąjį. Juose, be kita ko, yra nedidelės diagramos, apibūdinančios kiekvieno kintamojo pasiskirstymą.

Paspartinkite tiriamųjų duomenų analizę naudodami pandų profiliavimo biblioteką
Apie amžiaus skaitmeninį kintamąjį

Kaip matote iš ankstesnio pavyzdžio, pandų profiliavimas suteikia mums keletą naudingų rodiklių, tokių kaip trūkstamų reikšmių procentas ir skaičius, taip pat aprašomosios statistikos priemonės, kurias jau matėme. Nes Age yra skaitinis kintamasis, jo pasiskirstymo vizualizacija histogramos pavidalu leidžia daryti išvadą, kad paskirstymas yra pakreiptas į dešinę.

Kalbant apie kategorinį kintamąjį, išvesties rezultatai šiek tiek skiriasi nuo skaitinio kintamojo.

Paspartinkite tiriamųjų duomenų analizę naudodami pandų profiliavimo biblioteką
Apie Sekso kategorinį kintamąjį

Būtent, užuot radusi vidurkį, minimumą ir maksimumą, pandų profiliavimo biblioteka rado klasių skaičių. Nes Sex — dvejetainis kintamasis, jo reikšmės vaizduojamos dviem klasėmis.

Jei jums patinka nagrinėti kodą kaip aš, jums gali būti įdomu, kaip tiksliai pandų profiliavimo biblioteka apskaičiuoja šiuos rodiklius. Sužinoti apie tai, atsižvelgiant į tai, kad bibliotekos kodas yra atidarytas ir prieinamas GitHub, nėra taip sunku. Kadangi nesu didelis juodųjų dėžių naudojimo projektuose gerbėjas, pažvelgiau į bibliotekos šaltinio kodą. Pavyzdžiui, taip atrodo skaitmeninių kintamųjų apdorojimo mechanizmas, pavaizduotas funkcija apibūdinti_skaitmenis_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)

Nors ši kodo dalis gali atrodyti gana didelė ir sudėtinga, ją suprasti labai paprasta. Esmė ta, kad bibliotekos šaltinio kode yra funkcija, kuri nustato kintamųjų tipus. Jei paaiškėja, kad biblioteka susidūrė su skaitiniu kintamuoju, aukščiau pateikta funkcija suras metriką, kurią žiūrėjome. Ši funkcija naudoja standartines pandų operacijas darbui su tokio tipo objektais Series, Kaip series.mean(). Skaičiavimo rezultatai saugomi žodyne stats. Histogramos generuojamos naudojant pritaikytą funkcijos versiją matplotlib.pyplot.hist. Adaptacija siekiama užtikrinti, kad funkcija veiktų su įvairių tipų duomenų rinkiniais.

Ištirti koreliacijos rodikliai ir imties duomenys

Gavus kintamųjų analizės rezultatus, pandų profiliavimo skiltyje Koreliacijos bus rodomos Pearsono ir Spearmano koreliacijos matricos.

Paspartinkite tiriamųjų duomenų analizę naudodami pandų profiliavimo biblioteką
Pearsono koreliacijos matrica

Jei reikia, kodo eilutėje, kuri suaktyvina ataskaitos generavimą, galite nustatyti slenkstinių reikšmių, naudojamų skaičiuojant koreliaciją, rodiklius. Tai darydami galite nurodyti, koks koreliacijos stiprumas yra svarbus jūsų analizei.

Galiausiai pandų profiliavimo ataskaitoje, esančioje skiltyje Pavyzdys, kaip pavyzdys rodoma duomenų dalis, paimta nuo duomenų rinkinio pradžios. Šis metodas gali sukelti nemalonių staigmenų, nes keli pirmieji stebėjimai gali būti pavyzdys, kuris neatspindi viso duomenų rinkinio savybių.

Paspartinkite tiriamųjų duomenų analizę naudodami pandų profiliavimo biblioteką
Skyrius, kuriame yra tiriamų duomenų pavyzdžių

Dėl to nerekomenduoju kreipti dėmesio į šią paskutinę dalį. Vietoj to geriau naudoti komandą df.sample(5), kuri atsitiktinai parinks 5 stebėjimus iš duomenų rinkinio.

rezultatai

Apibendrinant galima pasakyti, kad pandų profiliavimo biblioteka suteikia analitikui naudingų galimybių, kurios pravers tais atvejais, kai reikia greitai susidaryti apytikslį duomenų vaizdą arba kam nors perduoti žvalgybos analizės ataskaitą. Tuo pačiu metu realus darbas su duomenimis, atsižvelgiant į jų ypatybes, atliekamas rankiniu būdu, kaip ir nenaudojant pandų profiliavimo.

Jei norite pažvelgti į tai, kaip atrodo visos žvalgybos duomenų analizė viename Jupyter bloknote, pažiūrėkite tai mano projektas sukurtas naudojant nbviewer. Ir į tai Atitinkamą kodą galite rasti „GitHub“ saugyklose.

Mieli skaitytojai! Kur pradėti analizuoti naujus duomenų rinkinius?

Paspartinkite tiriamųjų duomenų analizę naudodami pandų profiliavimo biblioteką

Šaltinis: www.habr.com

Добавить комментарий