Один развивающийся и перспективный маркетплейс активно растет в настоящее время. Текущая команда разработки вовсю занята тем, что развивает ядро системы. Помимо этого, перед CTO маркетплейса стоит задача — разработать подсистему аналитики, которая на основе накопленных данных формировала бы разнообразные отчеты и статистику.
Вы — компания подрядчик, с которой маркетплейс заключил рамочный договор на выполнение работ по разработке этой подсистемы. В рамках первого этапа вы условились провести работы по прототипированию и определению целевого технологического стека и общих подходов к разработке.
На одном из совещаний с Заказчиком вы определили задачу, на которой будете выполнять работы по прототипированию. В качестве такой задачи была выбрана разработка отчета о наиболее популярных категориях товаров, продаваемых во время подготовки новогодних подарков покупателями.
Аналитики со стороны маркетплейса предоставили небольшой срез массива данных (файл format.json) о совершенных покупках пользователей за 4-й квартал 2023 года, на примере которого вы смогли бы ознакомиться с форматом входных данных. Каждая запись данного среза содержит следующую информацию:
- Дата и время оформления заказа;
- Корзина.
В пояснительной записке к массиву данных была уточняющая информация относительно формате данных, представленных в корзине. Так, например, корзина - это массив однотипных сведений о купленных товаров, определяемых следующим набором данных:
- Идентификатор товара;
- Наименование товара;
- Категория.
В свою очередь сведения о категории представлены в следующем виде:
- Идентификатор категории;
- Наименование категории.
Необходимо разработать отчет, определяющий категории товаров, наиболее популярные перед Новым годом. Если популярных категорий товаров больше, чем одна, отчет должен показывать их все. Предновогодним периодом будем считать срок с 1 по 31 декабря.
Требования к реализации:
- Реализация должна содержать, как минимум, одну процедуру (функцию/метод), отвечающую за формирование отчета, и должна быть описана в readme.md в соответствии с чек-листом;
- В качестве входных данных программа использует json-файл (input.json), соответствующий структуре, описанной в условиях задания;
- Процедура (функция/метод) формирования отчета должна возвращать строку в формате json следующего формата:
- {«categories»: [«Бытовая техника»]}
- {«categories»: [«Бытовая техника», «Косметика»]}
- Найденная в соответствии с условием задачи категория должна выводиться в изначальном наименовании, приведенном в файле с входными данными. Если таких категорий несколько, то на вывод они все подаются в алфавитном порядке.
Середа Даниил Вадимович [email protected]
Для работы с файлом используется функция find_pop_cats_in_file, которая выгружает содержимое JSON-файла и передаёт его в функцию find_pop_cats. Функция find_pop_cats используется для анализа списка корзин. Для пустого списка функция сразу возвращает JSON с пустым словарём. Если список не пуст, то создаётся объект Счётчик (по сути - словарь, но дополнен методами для удобной работы с подсчётом объектов). Далее циклом for перебираются заказы из списка. Дата заказа проверяется функцией check_date. Если дата не предновогодняя, цикл переходит к следующему заказу. Если дата предновогодняя, то тело цикла выполняется дальше. Для каждого предмета в заказе в словарь записывается соответствие Id категории и её имени, а к счётчику, связанному с id, прибавляется 1. После перебора всех заказов находится максимальное значение счётчика, и в список pop_cats делается выборка всех имён категорий, счётчики id которых принимают это значение. Полученный список сортируется и вставляется в JSON в соответствии с условием.
Файл программы main.py и файл input.json должны находиться в одной директории. Для запуска необходимо:
- открыть терминал
- перейти в директорию с файлами
- ввести "python3 main.py"