Ускорете проучвателния анализ на данни с помощта на библиотека за профилиране на pandas

Първата стъпка, когато започнете да работите с нов набор от данни, е да го разберете. За да направите това, трябва например да разберете диапазоните от стойности, приети от променливите, техните типове, както и да разберете за броя на липсващите стойности.

Библиотеката на pandas ни предоставя много полезни инструменти за извършване на проучвателен анализ на данни (EDA). Но преди да ги използвате, обикновено трябва да започнете с по-общи функции като df.describe(). Все пак трябва да се отбележи, че възможностите, предоставени от такива функции, са ограничени и началните етапи на работа с всякакви набори от данни при извършване на EDA много често са много сходни един с друг.

Ускорете проучвателния анализ на данни с помощта на библиотека за профилиране на pandas

Авторът на материала, който публикуваме днес, споделя, че не е привърженик на извършването на повтарящи се действия. В резултат на това, в търсене на инструменти за бързо и ефективно извършване на проучвателен анализ на данни, той намери библиотеката панди-профилиране. Резултатите от работата му се изразяват не под формата на определени индивидуални индикатори, а под формата на доста подробен HTML отчет, съдържащ повечето от информацията за анализираните данни, която може да се наложи да знаете, преди да започнете да работите по-отблизо с тях.

Тук ще разгледаме характеристиките на използването на библиотеката за профилиране на pandas, използвайки набора от данни на Титаник като пример.

Проучвателен анализ на данни с помощта на панди

Реших да експериментирам с профилиране на pandas върху набора от данни на Титаник поради различните типове данни, които съдържа, и наличието на липсващи стойности в него. Вярвам, че библиотеката за профилиране на pandas е особено интересна в случаите, когато данните все още не са изчистени и изискват допълнителна обработка в зависимост от характеристиките си. За да извършите успешно такава обработка, трябва да знаете откъде да започнете и на какво да обърнете внимание. Това е мястото, където възможностите за профилиране на 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
Описателна статистика, получена с помощта на стандартни инструменти на pandas

Въпреки че тук има много полезна информация, тя не съдържа всичко, което би било интересно да се знае за изследваните данни. Например, може да се предположи, че в рамка от данни, в структура DataFrame, има 891 реда. Ако това трябва да се провери, тогава е необходим друг ред код, за да се определи размерът на рамката. Въпреки че тези изчисления не са особено ресурсоемки, повтарянето им през цялото време води до загуба на време, което вероятно би било по-добре изразходвано за почистване на данните.

Проучвателен анализ на данни с помощта на pandas-профилиране

Сега нека направим същото с помощта на pandas-profiling:

pandas_profiling.ProfileReport(df)

Изпълнението на горния ред код ще генерира отчет с индикатори за анализ на проучвателни данни. Кодът, показан по-горе, ще изведе намерените данни, но можете да го накарате да изведе HTML файл, който можете да покажете на някого, например.

Първата част на отчета ще съдържа раздел Общ преглед, даващ основна информация за данните (брой наблюдения, брой променливи и т.н.). В допълнение, той ще съдържа списък с предупреждения, уведомяващи анализатора за неща, на които трябва да обърне специално внимание. Тези сигнали могат да предоставят улики за това къде можете да насочите усилията си за почистване на данни.

Ускорете проучвателния анализ на данни с помощта на библиотека за профилиране на pandas
Секция за преглед на отчета

Проучвателен анализ на променливи

Под раздела Общ преглед на отчета можете да намерите полезна информация за всяка променлива. Те включват, наред с други неща, малки диаграми, описващи разпределението на всяка променлива.

Ускорете проучвателния анализ на данни с помощта на библиотека за профилиране на pandas
Относно числовата променлива възраст

Както можете да видите от предишния пример, pandas-профилирането ни дава няколко полезни индикатора, като процент и брой липсващи стойности, както и описателни статистически мерки, които вече видяхме. защото Age е числова променлива, визуализирането на нейното разпределение под формата на хистограма ни позволява да заключим, че имаме разпределение, изкривено надясно.

Когато се разглежда категориална променлива, получените резултати са малко по-различни от тези, открити за числова променлива.

Ускорете проучвателния анализ на данни с помощта на библиотека за профилиране на pandas
Относно половата категорична променлива

А именно, вместо да намери средната, минималната и максималната стойност, библиотеката за профилиране на pandas намери броя на класовете. защото Sex — двоична променлива, нейните стойности са представени от два класа.

Ако искате да изследвате кода като мен, може да се интересувате от това как точно библиотеката за профилиране на pandas изчислява тези показатели. Да разберете за това, като се има предвид, че кодът на библиотеката е отворен и достъпен в 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)

Въпреки че тази част от кода може да изглежда доста голяма и сложна, всъщност е много проста за разбиране. Въпросът е, че в изходния код на библиотеката има функция, която определя типовете променливи. Ако се окаже, че библиотеката е срещнала числова променлива, горната функция ще намери показателите, които разглеждаме. Тази функция използва стандартни операции на pandas за работа с обекти от тип Series, като series.mean(). Резултатите от изчисленията се съхраняват в речник stats. Хистограмите се генерират с помощта на адаптирана версия на функцията matplotlib.pyplot.hist. Адаптирането има за цел да гарантира, че функцията може да работи с различни типове набори от данни.

Изследвани корелационни показатели и примерни данни

След резултатите от анализа на променливите, pandas-profiling в секцията Correlations ще покаже корелационните матрици на Pearson и Spearman.

Ускорете проучвателния анализ на данни с помощта на библиотека за профилиране на pandas
Корелационна матрица на Пиърсън

Ако е необходимо, можете в реда на кода, който задейства генерирането на отчета, да зададете индикаторите на праговите стойности, използвани при изчисляване на корелацията. Като направите това, можете да посочите каква сила на корелация се счита за важна за вашия анализ.

И накрая, отчетът за профилиране на pandas в секцията Пример показва, като пример, част от данните, взети от началото на набора от данни. Този подход може да доведе до неприятни изненади, тъй като първите няколко наблюдения могат да представляват извадка, която не отразява характеристиките на целия набор от данни.

Ускорете проучвателния анализ на данни с помощта на библиотека за профилиране на pandas
Раздел, съдържащ примерни данни в процес на изследване

В резултат на това не препоръчвам да обръщате внимание на този последен раздел. Вместо това е по-добре да използвате командата df.sample(5), който произволно ще избере 5 наблюдения от набора от данни.

Резултати от

За да обобщим, библиотеката за профилиране на pandas дава на анализатора някои полезни възможности, които ще бъдат полезни в случаите, когато трябва бързо да получите груба представа за данните или да предадете на някого доклад за разузнавателен анализ. В същото време реалната работа с данни, като се вземат предвид неговите характеристики, се извършва, без да се използва pandas-профилиране, ръчно.

Ако искате да разгледате как изглежда целият анализ на разузнавателни данни в един бележник на Юпитер, погледнете това моят проект, създаден с помощта на nbviewer. И в това Можете да намерите съответния код в хранилищата на GitHub.

Уважаеми читатели! Откъде започвате да анализирате нови набори от данни?

Ускорете проучвателния анализ на данни с помощта на библиотека за профилиране на pandas

Източник: www.habr.com

Добавяне на нов коментар