Инжиниринг данных — это самый важный и первый шаг к науке о данных. Он сочетает в себе как часть сбора данных, так и часть анализа. Все ваши гипотезы и скрытые тенденции проверяются данными. Это очень похоже на общение с данными и получение ответов. Например, вы спрашиваете свой набор данных о диабете: «Эй, это заболевание чаще поражает мужчин или женщин?», и данные ваших хороших друзей всегда найдут для вас ответ. Всегда.
Но чтобы сделать данные вашим партнером в анализе, вам нужно развивать свой набор данных, позволять ему расти. Чаще всего требуется выполнить большое количество преобразований в наборе данных. Вменение данных, выявление и исправление выбросов, проектирование признаков и многое другое. Весь этот процесс сбора, очистки и преобразования набора данных называется Data Engineering, востребованным навыком в 2021 году. По сути, все, что вы делаете, прежде чем передать свой набор данных алгоритму машинного обучения, относится к Data Engineering.
Недавно я участвовал в конкурсе Market Feature Input ETL, организованном Analytics Vidhya в июне 2021 года.
Постановка задачи была довольно простой: создать входной набор данных для отслеживания пользователей в приложении электронной коммерции. Были предоставлены два набора данных, которые включали пользовательский набор данных и набор данных журнала посещений пользователей. Как инженер данных, мы должны были предоставить новый набор данных с некоторой предопределенной информацией о каждом пользователе, такой как его недавняя активность, просмотренные продукты, используемая ОС и т. д.
Ожидаемый набор входных данных
Итак, начнем…
Итак, на первый взгляд кажется, что в журнале посещений есть строки, в которых отсутствует идентификатор пользователя. Мое первое предположение заключается в проверке идентификатора webClientID, поскольку это сеанс пользователя, поэтому, если идентификатор пользователя отсутствует в некоторых записях определенного идентификатора веб-клиента, NaN в идентификаторе пользователя можно заменить фактическим идентификатором пользователя из другой записи в том же наборе. По сути, отфильтруйте строки с отсутствующим идентификатором пользователя и исследуйте эти идентификаторы веб-клиента, если в каком-либо из них присутствует идентификатор пользователя.
Очевидно, что такого идентификатора webClientID с отсутствующим идентификатором пользователя не существует. Таким образом, мы можем безопасно удалить строки с отсутствующим UserID.
Второй шаг, давайте проверим строки данных в различных столбцах, таких как активность, ProductID и ОС. Я заметил, что случай в этих столбцах был непоследовательным. Например, ОС содержит оба значения, chrome и CHROME, или действие содержит оба значения, click и CLICK. Крайне важно, чтобы данные в этих столбцах соответствовали одному и тому же регистру.
Третий шаг: Всегда преобразовывайте столбцы даты/времени в наборе данных в экземпляры даты и времени Python. Итак, давайте конвертируем VisitDateTime в даты Python. Теперь в этом столбце присутствуют два типа форматов даты: формат UNIX и формат UTC. Они должны быть последовательными.
Согласно постановке задачи: «В данном случае вы должны сгенерировать входной набор функций по состоянию на 28 мая 2018 года. Итак, таблица посетителей с 07 мая 2018 года по 27 мая 2018 года».
Давайте начнем создавать наш окончательный набор данных.
Последний шаг, для каждого пользователя в наборе данных, давайте рассчитаем все эти необходимые функции!!
Позвольте мне шаг за шагом провести вас через суть этого упражнения.
- Отфильтровать пользовательские журналы на основе UserID
- Для действий NaN введите «PAGELOAD» или «CLICK» в зависимости от режима этого столбца. Я жестко запрограммировал «PAGELOAD» для демонстрационных целей.
- Чтобы заменить значения в отсутствующем ProductID, используйте value_counts() для определения частоты значений и используйте ProductID с наибольшим количеством.
- Для отсутствующего VisitDateTime снова используйте наиболее посещаемую пользователем дату, используя value_counts()
- Отфильтруйте журналы за 7 дней и получите длину уникальных дат (не времени)
- Отфильтруйте журналы за 15 дней и получите длину уникального ProductID.
- Чтобы определить возраст пользователя, посчитайте разницу между датой регистрации и 28 мая.
- Чтобы получить наиболее просматриваемые продукты за 15 дней, используйте value_counts() для ProductID в отфильтрованных журналах за 15 дней (фильтр с активностью PAGELOAD) и получите ProductID с наибольшей частотой.
- Для наиболее активной ОС используйте value_counts() для ОС в журналах и получите ОС с наибольшей частотой.
- Чтобы получить последний просмотренный продукт, отфильтруйте журналы с активностью PAGELOAD, отсортируйте по VisitDateTime и выберите первый попавшийся ProductID.
- Наконец, чтобы рассчитать PAGELOAD и CLICK за последние 7 дней, отфильтруйте журнал последних 7 дней с активностью PAGELOAD и CLICK соответственно.
Этот код помог мне добиться 93% точности в соревновании!!! Ура!!
В заключение, вам нужно задать партнеру (данным) правильные вопросы, чтобы раскрыть его потенциал. Это искусство — выдающаяся характеристика хорошего инженера данных. В этом наборе данных по-прежнему можно выполнить множество операций обработки данных, таких как типы продуктов, просматриваемых пользователем, более активен он днем или ночью, использует мобильный или настольный компьютер, в какой стране создается приложение электронной коммерции. больше всего для бизнеса и МНОГОЕ ДРУГОЕ… Как далеко вы продвинетесь со своими данными, зависит только от вас. Чем больше вы лелеете свои данные и позволяете им расти, тем больше историй у них будет для вас. Стремитесь стать рассказчиком данных с помощью обработки данных!
Проверьте мою полную реализацию здесь
Теперь для будущей работы код можно написать в формате OOPS с использованием классов и методов. Кроме того, жесткое кодирование дат может быть удалено.
Это все, ребята!