На собеседовании дают две таблицы: заказы и товары в заказах.
Нужно реализовать функцию build_order_features(orders, items), которая вернет словарь с тремя блоками:
category_spend: сколько денег каждый пользователь потратил в каждой категории;order_user_total_spend: для каждого заказа суммарные траты этого пользователя по всем его заказам;weekday_spend: для каждого пользователя вектор из 7 чисел, где индекс 0 соответствует понедельнику, а индекс 6 - воскресенью.Цена строки считается как price * amount. Если в заказе несколько товаров одной категории, их нужно просуммировать.
orders = [{"order_id":1,"user_id":"u1","created_at":"2025-01-06"},{"order_id":2,"user_id":"u1","created_at":"2025-01-07"},{"order_id":3,"user_id":"u2","created_at":"2025-01-12"}]items = [{"order_id":1,"category":"books","price":100,"amount":2},{"order_id":1,"category":"food","price":50,"amount":1},{"order_id":2,"category":"books","price":80,"amount":1},{"order_id":3,"category":"food","price":30,"amount":3}]{"category_spend":{"u1":{"books":280,"food":50},"u2":{"food":90}},"order_user_total_spend":{"1":330,"2":330,"3":90},"weekday_spend":{"u1":[250,80,0,0,0,0,0],"u2":[0,0,0,0,0,0,90]}}Базовая агрегация с amount, категориями и днями недели.
orders = [{"order_id":10,"user_id":"u3","created_at":"2025-01-08"},{"order_id":11,"user_id":"u3","created_at":"2025-01-08"}]items = [{"order_id":10,"category":"games","price":10,"amount":5},{"order_id":10,"category":"games","price":7,"amount":2},{"order_id":11,"category":"books","price":40,"amount":1}]{"category_spend":{"u3":{"games":64,"books":40}},"order_user_total_spend":{"10":104,"11":104},"weekday_spend":{"u3":[0,0,104,0,0,0,0]}}Несколько строк одной категории и два заказа в один день.