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.
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 . 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.

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.

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.

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.

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 :
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.

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.

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 minu projekti, mis on loodud nbviewer'i abil. Ja GitHub'i repos leidub vastav kood.
Lugupeetud lugejad! Kust alustate uute andmestike analüüsi?
Allikas: habr.com
