Получите интуитивное представление о структуре ваших данных с помощью всего одной строчки кода

Вступление

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

Библиотека pandas предоставляет множество чрезвычайно полезных функций для EDA. Однако, прежде чем применять большинство из них, обычно необходимо начать с более общих функций, таких как df.describe (). Тем не менее, функциональные возможности, предоставляемые такими функциями, ограничены, и чаще всего ваш первоначальный рабочий процесс EDA очень похож для каждого нового набора данных. Как человек, который не испытывает большого удовольствия от выполнения повторяющихся задач, я недавно искал альтернативы и наткнулся на профилирование панд. Вместо того, чтобы просто выдавать вам один результат, pandas-profiling позволяет пользователю быстро сгенерировать очень широко структурированный HTML-файл, содержащий большую часть того, что вам может понадобиться, прежде чем погрузиться в более конкретное и индивидуальное исследование данных. В следующих абзацах я расскажу вам о применении профилирования pandas к набору данных Titanic.

Быстрее EDA

Я решил применить профилирование pandas к набору данных Titanic из-за разнообразия типов данных, а также из-за отсутствия в них значений. На мой взгляд, профилирование панд особенно интересно, когда данные еще не очищены и по-прежнему требуют дополнительных индивидуальных настроек. Чтобы лучше ориентироваться во время этих индивидуальных корректировок, вам нужно знать, с чего начать и на чем сосредоточиться. Вот тут-то и пригодится профилирование панд.

Во-первых, давайте импортируем данные и воспользуемся пандами для получения некоторой описательной статистики:

Приведенный выше фрагмент кода даст следующий результат:

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

Обзор

А теперь давайте сделаем то же самое с профилированием панд:

Выполнение этой единственной строки кода создаст отчет HTML EDA с вашими данными. Показанный выше код создаст встроенный вывод результата; однако вы также можете сохранить отчет EDA в виде файла HTML, чтобы упростить его совместное использование.

Первая часть отчета HTML EDA будет содержать обзорный раздел, содержащий основную информацию (количество наблюдений, количество переменных и т. Д.). Он также выведет список предупреждений, сообщающих вам, где еще раз проверить данные и, возможно, сосредоточить усилия на очистке.

EDA, зависящая от переменной

После обзора отчет EDA предоставляет вам полезную информацию по каждой конкретной переменной. Они также включают небольшую визуализацию, описывающую распределение каждой переменной:

Как видно выше, профилирование pandas предоставляет вам несколько полезных индикаторов, таких как процент и количество пропущенных значений, а также описательную статистику, которую мы видели ранее. Поскольку «Возраст» - это числовая переменная, визуализация ее распределения с помощью гистограммы говорит нам, что эта переменная кажется смещенной вправо.

Для категориальной переменной внесены лишь незначительные изменения:

Вместо вычисления среднего, минимального и максимального значения pandas-profiling вычисляет количество классов для категориальных переменных. Поскольку «Пол» - это двоичная переменная, мы находим только два различных счетчика.

Если вы похожи на меня, вам может быть интересно, как именно pandas-profiling вычисляет свой вывод. К счастью, исходный код доступен на GitHub. Поскольку я не большой поклонник создания ненужных частей черного ящика в своем коде, я собираюсь быстро погрузиться в исходный код числовой переменной:

Хотя это может показаться огромным фрагментом кода, на самом деле его очень легко понять. Исходный код Pandas-profiling включает еще одну функцию, определяющую тип каждой переменной. Если переменная идентифицирована как числовая, функция выше выдаст результат, который я показал ранее. Эта функция использует основные операции pandas с сериями, такие как series.mean (), и сохраняет результаты в словаре статистики. Графики создаются с использованием адаптированных версий функции matplotlib.pyplot.hist в matplotlib с целью обработки различных типов наборов данных.

Корреляции и выборка

Под EDA для каждой конкретной переменной профилирование pandas выведет корреляционную матрицу Пирсона и Спирмена.

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

Наконец, pandas-profiling выведет образец кода. Строго говоря, это не образец кода, а просто заголовок ваших данных. Это может привести к проблемам, если первые несколько наблюдений не отражают характеристики данных в целом.

Таким образом, я бы рекомендовал не использовать этот последний результат для первоначального анализа и вместо этого запустить df.sample (5), который случайным образом выберет пять наблюдений из вашего набора данных.

Заключение

В общем, профилирование pandas предоставляет некоторые полезные функции, особенно если ваша основная цель - либо получить быстрое и грязное понимание ваших данных, либо поделиться своим исходным EDA с другими в визуальном формате. Тем не менее, до автоматизации EDA он не идет. Фактическую индивидуальную работу все равно придется выполнять вручную.

Если вы хотите увидеть весь EDA в одном блокноте, посмотрите блокнот, который я использовал в nbviewer online. Вы также можете найти код для статей на Medium в моем репозитории GitHub.