Паскарэнне разведачнага аналізу дадзеных з выкарыстаннем бібліятэкі pandas-profiling

Перш за ўсё, прыступаючы да працы з новым наборам дадзеных, трэба зразумець яго. Для таго каб гэта зрабіць, трэба, напрыклад, высветліць дыяпазоны значэнняў, якія прымаюцца зменнымі, іх тыпы, а таксама пазнаць аб колькасці прапушчаных значэнняў.

Бібліятэка pandas дае нам мноства карысных інструментаў для выканання разведачнага аналізу дадзеных (Exploratory Data Analysis, EDA). Але, перш чым скарыстацца імі, звычайна трэба пачаць з функцый больш агульнага плана, такіх як df.describe(). Праўда, трэба адзначыць, што магчымасці, якія прадстаўляюцца падобнымі функцыямі, абмежаваныя, а пачатковыя этапы працы з любымі наборамі дадзеных пры выкананні EDA вельмі часта моцна падобныя сябар на сябра.

Паскарэнне разведачнага аналізу дадзеных з выкарыстаннем бібліятэкі pandas-profiling

Аўтар матэрыялу, які мы сёння публікуем, кажа, што ён - не аматар выканання паўтаральных дзеянняў. У выніку ён, у пошуках сродкаў, якія дазваляюць хутка і эфектыўна выконваць разведачны аналіз даных, знайшоў бібліятэку pandas-profiling. Вынікі яе працы выяўляюцца не ў выглядзе некаторых асобных паказчыкаў, а ў форме даволі падрабязнага HTML-справаздачы, які змяшчае большую частку тых звестак аб аналізаваных дадзеных, якія можа спатрэбіцца ведаць перад тым, як прыступаць да больш шчыльнай працы з імі.

Тут будуць разгледжаны асаблівасці выкарыстання бібліятэкі pandas-profiling на прыкладзе набору даных Titanic.

Разведачны аналіз дадзеных сродкамі pandas

Я вырашыў паэксперыментаваць з pandas-profiling на наборы дадзеных Titanic з-за таго, што ў ім ёсць дадзеныя розных тыпаў і з-за наяўнасці ў ім прапушчаных значэнняў. Я мяркую, што бібліятэка pandas-profiling асабліва цікавая ў тых выпадках, калі дадзеныя яшчэ не ачышчаны і патрабуюць далейшай апрацоўкі, якая залежыць ад іх асаблівасцяў. Для таго каб паспяхова выканаць такую ​​апрацоўку, трэба ведаць аб тым, з чаго пачаць, і на што звярнуць увагу. Тут нам і спатрэбяцца магчымасці pandas-profiling.

Для пачатку імпартуем дадзеныя і выкарыстоўваем pandas для атрымання паказчыкаў апісальнай статыстыкі:

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

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

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

Пасля выканання гэтага фрагмента кода атрымаецца тое, што паказана на наступным рысунку.

Паскарэнне разведачнага аналізу дадзеных з выкарыстаннем бібліятэкі pandas-profiling
Паказчыкі апісальнай статыстыкі, атрыманыя з дапамогай стандартных сродкаў.

Хоць тут утрымоўваецца маса карысных звестак, тут няма ўсяго, што было б цікава пазнаць аб доследных дадзеных. Напрыклад, можна меркаваць, што ў фрэйме дадзеных, у структуры DataFrame, маецца 891 радок. Калі гэта трэба праверыць, тое запатрабуецца яшчэ адзін радок кода, якая вызначае памер фрэйма. Хоць гэтыя вылічэнні і не асабліва рэсурсазатратныя, сталае іх паўтарэнне абавязкова прывядзе да страт часу, якое, верагодна, лепш будзе выдаткаваць на ачыстку дадзеных.

Разведачны аналіз дадзеных сродкамі pandas-profiling

Цяпер зробім тое ж самае з выкарыстаннем pandas-profiling:

pandas_profiling.ProfileReport(df)

Выкананне прадстаўленага вышэй радка кода дазволіць сфарміраваць справаздачу з паказчыкамі разведачнага аналізу дадзеных. Код, паказаны вышэй, прывядзе да высновы знойдзеных звестак аб дадзеных, але можна зрабіць так, каб у выніку атрымаўся б HTML-файл, які, напрыклад, можна камусьці паказаць.

Першая частка справаздачы будзе змяшчаць раздзел Overview (Агляд), які дае асноўныя звесткі аб дадзеных (колькасць назіранняў, колькасць зменных, і гэтак далей). Акрамя таго, ён будзе змяшчаць спіс папярэджанняў, які паведамляе аналітыка аб тым, на што варта звярнуць асаблівую ўвагу. Гэтыя папярэджанні могуць паслужыць падказкай аб тым, на чым можна засяродзіць намаганні пры ачыстцы дадзеных.

Паскарэнне разведачнага аналізу дадзеных з выкарыстаннем бібліятэкі pandas-profiling
Раздзел справаздачы Overview

Разведачны аналіз зменных

За раздзелам Overview у справаздачы можна знайсці карысныя звесткі аб кожнай зменнай. У іх, акрамя іншага, уваходзяць невялікія дыяграмы, якія апісваюць размеркаванне кожнай зменнай.

Паскарэнне разведачнага аналізу дадзеных з выкарыстаннем бібліятэкі pandas-profiling
Звесткі аб лічбавай зменнай Age

Як можна бачыць з папярэдняга прыкладу, pandas-profiling дае нам некалькі карысных індыкатараў, такіх як працэнт і колькасць прапушчаных значэнняў, а таксама паказчыкі апісальнай статыстыкі, якія мы ўжо бачылі. Бо Age - Гэта лічбавая пераменная, візуалізацыя яе размеркавання ў выглядзе гістаграмы дазваляе нам зрабіць выснову аб тым, што перад намі - скошанае направа размеркаванне.

Пры разглядзе катэгарыяльнай зменнай выводныя паказчыкі крыху адрозніваюцца ад тых, што былі знойдзены для лічбавай зменнай.

Паскарэнне разведачнага аналізу дадзеных з выкарыстаннем бібліятэкі pandas-profiling
Звесткі аб катэгарыяльнай зменнай Sex

А менавіта, замест знаходжання сярэдняга, мінімуму і максімуму, бібліятэка pandas-profiling знайшла колькасць класаў. Бо Sex - Бінарная пераменная, яе значэння прадстаўлены двума класамі.

Калі вы, як і я, любіце даследаваць код, то вас можа зацікавіць тое, як менавіта бібліятэка pandas-profiling вылічае гэтыя паказчыкі. Даведацца пра гэта, улічваючы тое, што код бібліятэкі адкрыты і даступны на GitHub, не так ужо і складана. Так як я не вялікі аматар выкарыстання "чорных скрынь" у маіх праектах, я зірнуў на зыходны код бібліятэкі. Напрыклад, вось як выглядае механізм апрацоўкі лікавых зменных, прадстаўлены функцыяй describe_numeric_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)

Хоць гэты фрагмент кода і можа здацца даволі вялікім і складаным, насамрэч, зразумець яго вельмі проста. Гаворка ідзе аб тым, што ў зыходным кодзе бібліятэкі ёсць функцыя, якая вызначае тыпы зменных. Калі аказалася, што бібліятэка сустрэла лікавую зменную, вышэйпрыведзеная функцыя знойдзе паказчыкі, якія мы разглядалі. У гэтай функцыі выкарыстоўваюцца стандартныя аперацыі pandas па працы з аб'ектамі тыпу. Series, накшталт series.mean(). Вынікі вылічэнняў захоўваюцца ў слоўніку stats. Гістаграмы фармуюцца з выкарыстаннем адаптаванай версіі функцыі matplotlib.pyplot.hist. Адаптацыя накіравана на тое, каб функцыя магла б працаваць з рознымі тыпамі набораў дадзеных.

Паказчыкі карэляцыі і ўзор доследных дадзеных

Пасля вынікаў аналізу зменных pandas-profiling, у раздзеле Correlations, выведзе карэляцыйныя матрыцы Пірсана і Спірмэна.

Паскарэнне разведачнага аналізу дадзеных з выкарыстаннем бібліятэкі pandas-profiling
Карэляцыйная матрыца Пірсана

Калі трэба, то можна, у тым радку кода, які запускае фармаванне справаздачы, задаць паказчыкі парогавых значэнняў, якія ўжываюцца пры разліку карэляцыі. Робячы гэта, вы можаце паказаць тое, якая сіла карэляцыі лічыцца важнай для вашага аналізу.

І нарэшце, у справаздачы pandas-profiling, у падзеле Sample, выводзіцца, у якасці прыкладу, фрагмент дадзеных, узяты з пачатку набору дадзеных. Такі падыход можа прывесці да непрыемных нечаканасцяў, бо першыя некалькі назіранняў могуць уяўляць сабой выбарку, якая не адлюстроўвае асаблівасцяў усяго набору дадзеных.

Паскарэнне разведачнага аналізу дадзеных з выкарыстаннем бібліятэкі pandas-profiling
Раздзел, які змяшчае ўзор доследных дадзеных

У выніку я не рэкамендую зважаць на гэтую апошнюю частку. Замест гэтага лепш скарыстацца камандай df.sample(5), Якая, выпадковым чынам, абярэ 5 назіранняў з набору дадзеных.

Вынікі

Падводзячы вынік вышэйпададзенаму, можна адзначыць, што бібліятэка pandas-profiling дае ў распараджэнне аналітыка некаторыя карысныя магчымасці, якія прыйдуцца дарэчы ў тых выпадках, калі трэба хутка атрымаць агульнае прыблізнае ўяўленне аб дадзеных або перадаць каму-небудзь справаздачу аб разведвальным аналізе дадзеных. Пры гэтым сапраўдная праца з дадзенымі, якая ўлічвае іх асаблівасці, выконваецца, як і без выкарыстання pandas-profiling, уручную.

Калі вы жадаеце зірнуць на тое, як выглядае ўвесь выведвальны аналіз дадзеных у адным Jupyter-нататніку - зірніце на гэты мой праект, створаны з дапамогай nbviewer. А ў гэтым GitHub-рэпазітары можна знайсці адпаведны код.

Паважаныя чытачы! З чаго вы пачынаеце аналіз новых набораў даных?

Паскарэнне разведачнага аналізу дадзеных з выкарыстаннем бібліятэкі pandas-profiling

Крыніца: habr.com

Дадаць каментар