Pandas-профильдеу кітапханасының көмегімен зерттеу деректерін талдауды жылдамдату

Жаңа деректер жинағымен жұмыс істеудің бірінші қадамы оны түсіну болып табылады. Мұны істеу үшін, мысалы, айнымалылар қабылдайтын мәндер ауқымын, олардың түрлерін, сондай-ақ жетіспейтін мәндердің санын білу керек.

Пандалар кітапханасы бізге зерттеу деректерін талдау (EDA) үшін көптеген пайдалы құралдарды ұсынады. Бірақ оларды қолданбас бұрын, әдетте df.describe() сияқты жалпы функциялардан бастау керек. Дегенмен, мұндай функциялар беретін мүмкіндіктер шектеулі екенін және EDA орындау кезінде кез келген деректер жиынымен жұмыс істеудің бастапқы кезеңдері өте жиі бір-біріне өте ұқсас екенін атап өткен жөн.

Pandas-профильдеу кітапханасының көмегімен зерттеу деректерін талдауды жылдамдату

Бүгін біз жариялап отырған материалдың авторы қайталанатын әрекеттерді жасауды ұнатпайтынын айтады. Нәтижесінде, іздеу деректерін талдауды жылдам және тиімді орындауға арналған құралдарды іздеуде ол кітапхананы тапты пандаларды профильдеу. Оның жұмысының нәтижелері белгілі бір жеке көрсеткіштер түрінде емес, талданатын деректер туралы ақпараттың көпшілігін қамтитын жеткілікті егжей-тегжейлі HTML есебі түрінде көрсетіледі, онымен тығыз жұмыс істеуді бастамас бұрын білу қажет болуы мүмкін.

Мұнда мысал ретінде Титаник деректер жинағын пайдаланып пандаларды профильдеу кітапханасын пайдалану мүмкіндіктерін қарастырамыз.

Пандалардың көмегімен деректерді зерттеу

Мен «Титаник» деректер жинағында пандаларды профильдеумен тәжірибе жасауды шештім, себебі ондағы деректердің әртүрлі түрлері және ондағы жетіспейтін мәндер бар. Пандаларды профильдеу кітапханасы деректер әлі тазаланбаған және оның сипаттамаларына байланысты әрі қарай өңдеуді қажет ететін жағдайларда өте қызықты деп есептеймін. Мұндай өңдеуді сәтті орындау үшін сіз неден бастау керектігін және неге назар аудару керектігін білуіңіз керек. Бұл жерде пандаларды профильдеу мүмкіндіктері пайдалы болады.

Біріншіден, біз деректерді импорттаймыз және сипаттамалық статистиканы алу үшін пандаларды пайдаланамыз:

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

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

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

Осы код бөлігін орындағаннан кейін сіз келесі суретте көрсетілген нәрсені аласыз.

Pandas-профильдеу кітапханасының көмегімен зерттеу деректерін талдауды жылдамдату
Стандартты панда құралдарының көмегімен алынған сипаттама статистикасы

Мұнда көптеген пайдалы ақпарат бар болса да, онда зерттелетін деректер туралы білу қызықты болатын барлық нәрсе жоқ. Мысалы, деректер кадрында, құрылымда деп болжауға болады DataFrame, 891 жол бар. Егер мұны тексеру қажет болса, кадрдың өлшемін анықтау үшін кодтың басқа жолы қажет. Бұл есептеулер әсіресе ресурсты қажет етпесе де, оларды үнемі қайталау уақытты ысырап етеді, бұл деректерді тазалауға жұмсалуы мүмкін.

Pandas-profiling көмегімен деректерді зерттеу

Енді pandas-profiling көмегімен солай істейік:

pandas_profiling.ProfileReport(df)

Жоғарыдағы код жолын орындау зерттеу деректерін талдау көрсеткіштері бар есепті жасайды. Жоғарыда көрсетілген код табылған деректерді шығарады, бірақ оны біреуге көрсете алатын HTML файлын шығаруға болады, мысалы.

Есептің бірінші бөлігінде деректер туралы негізгі ақпаратты (бақылаулар саны, айнымалылар саны және т.б.) беретін шолу бөлімі болады. Ол сондай-ақ талдаушыға ерекше назар аудару керек нәрселер туралы ескертетін ескертулер тізімін қамтиды. Бұл ескертулер деректерді тазалау әрекеттерін қайда шоғырландыруға болатыны туралы анықтама бере алады.

Pandas-профильдеу кітапханасының көмегімен зерттеу деректерін талдауды жылдамдату
Шолу есеп бөлімі

Барлау айнымалы талдау

Есептің Шолу бөлімінің астында әрбір айнымалы туралы пайдалы ақпаратты таба аласыз. Олар, басқалармен қатар, әрбір айнымалының таралуын сипаттайтын шағын диаграммаларды қамтиды.

Pandas-профильдеу кітапханасының көмегімен зерттеу деректерін талдауды жылдамдату
Жас сандық айнымалысы туралы

Алдыңғы мысалдан көріп отырғаныңыздай, пандаларды профильдеу бізге жетіспейтін мәндердің пайызы мен саны, сондай-ақ біз бұрыннан көрген сипаттамалық статистикалық өлшемдер сияқты бірнеше пайдалы көрсеткіштерді береді. Өйткені Age сандық айнымалы болып табылады, оның гистограмма түріндегі таралуын визуализациялау бізде оңға қиғаш таралу бар деген қорытынды жасауға мүмкіндік береді.

Категориялық айнымалыны қарастырған кезде шығыс нәтижелері сандық айнымалы үшін табылғандардан сәл өзгеше болады.

Pandas-профильдеу кітапханасының көмегімен зерттеу деректерін талдауды жылдамдату
Жыныс категориялық айнымалысы туралы

Атап айтқанда, орташа, минималды және максимумды табудың орнына, пандаларды профильдеу кітапханасы сыныптар санын тапты. Өйткені Sex — екілік айнымалы, оның мәндері екі класспен берілген.

Мен сияқты кодты зерттегіңіз келсе, сізді пандаларды профильдеу кітапханасы бұл көрсеткіштерді қалай есептейтіні қызықтыруы мүмкін. Бұл туралы білу, кітапхана коды ашық және GitHub-та қол жетімді екенін ескерсек, соншалықты қиын емес. Мен өз жобаларымда қара жәшіктерді пайдалануды ұнатпайтындықтан, кітапхананың бастапқы кодын қарадым. Мысалы, функция арқылы берілген сандық айнымалыларды өңдеу механизмі осылай көрінеді сипаттау_сандық_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)

Бұл код бөлігі өте үлкен және күрделі болып көрінгенімен, оны түсіну өте оңай. Мәселе мынада, кітапхананың бастапқы кодында айнымалылардың түрлерін анықтайтын функция бар. Кітапхананың сандық айнымалыға тап болғаны анықталса, жоғарыдағы функция біз қарастырған көрсеткіштерді табады. Бұл функция типтегі нысандармен жұмыс істеу үшін стандартты панда операцияларын пайдаланады Series, сияқты series.mean(). Есептеу нәтижелері сөздікте сақталады stats. Гистограммалар функцияның бейімделген нұсқасын пайдаланып жасалады matplotlib.pyplot.hist. Бейімдеу функцияның деректер жиынының әртүрлі түрлерімен жұмыс істей алуын қамтамасыз етуге бағытталған.

Корреляциялық көрсеткіштер және зерттелген үлгі деректер

Айнымалыларды талдау нәтижелерінен кейін пандаларды профильдеу Корреляция бөлімінде Пирсон және Спирман корреляциялық матрицаларын көрсетеді.

Pandas-профильдеу кітапханасының көмегімен зерттеу деректерін талдауды жылдамдату
Пирсон корреляциялық матрицасы

Қажет болса, есепті құруды бастайтын код жолында корреляцияны есептеу кезінде пайдаланылатын шекті мәндердің көрсеткіштерін орнатуға болады. Бұл әрекетті орындау арқылы сіз талдау үшін қандай корреляция күші маңызды деп есептелетінін көрсете аласыз.

Соңында, үлгі бөліміндегі пандаларды профильдеу есебі деректер жиынының басынан алынған деректер бөлігін мысал ретінде көрсетеді. Бұл тәсіл жағымсыз тосынсыйларға әкелуі мүмкін, өйткені алғашқы бірнеше бақылаулар бүкіл деректер жиынының сипаттамаларын көрсетпейтін үлгіні көрсетуі мүмкін.

Pandas-профильдеу кітапханасының көмегімен зерттеу деректерін талдауды жылдамдату
Зерттелетін үлгі деректерден тұратын бөлім

Нәтижесінде мен осы соңғы бөлімге назар аударуды ұсынбаймын. Оның орнына пәрменді қолданған дұрыс df.sample(5), ол деректер жиынынан кездейсоқ 5 бақылауды таңдайды.

Нәтижелері

Қорытындылай келе, пандаларды профильдеу кітапханасы талдаушыға деректер туралы тез арада шамамен түсінік алу немесе біреуге барлау талдауының есебін беру қажет болған жағдайда пайдалы болатын кейбір пайдалы мүмкіндіктерді береді. Бұл ретте деректермен нақты жұмыс оның ерекшеліктерін ескере отырып, панда профилін қолданбай-ақ қолмен орындалады.

Барлық барлау деректерін талдау бір Jupyter жазу кітапшасында қалай көрінетінін көргіңіз келсе, мынаны қараңыз. бұл менің жобам nbviewer көмегімен жасалған. Және ішінде бұл Сәйкес кодты GitHub репозиторийлерінен таба аласыз.

Құрметті оқырмандар! Жаңа деректер жиынын талдауды қайдан бастайсыз?

Pandas-профильдеу кітапханасының көмегімен зерттеу деректерін талдауды жылдамдату

Ақпарат көзі: www.habr.com

пікір қалдыру