Все о Data Science, машинном обучении и искусственном интеллекте: от базовой теории до cutting-edge исследований и LLM.
MAX - https://max.ru/devsp
Личный блог - @just_genych
По вопросам рекламы или разработки - @g_abashkin
РКН: https://vk.cc/cJPGXD
Post #4724
2.67K
👩💻 Предсказание уникальности пользователя
У вас есть список действий пользователей на платформе. Каждое действие представлено словарём с полями
Уникальный пользователь — это тот, кто:
Верните список
Решение задачи🔽
У вас есть список действий пользователей на платформе. Каждое действие представлено словарём с полями
"user_id", "action", и "timestamp". Нужно реализовать функцию, которая определит, является ли пользователь "уникальным".Уникальный пользователь — это тот, кто:
• совершал более 3 действий,
• все действия происходили в разные дни,
• не совершал одинаковые действия дважды.
Верните список
user_id, соответствующих этому критерию.Решение задачи🔽
from collections import defaultdict
from datetime import datetime
def find_unique_users(logs):
activity = defaultdict(lambda: {"actions": set(), "days": set(), "count": 0})
for log in logs:
user = log["user_id"]
action = log["action"]
date = datetime.fromisoformat(log["timestamp"]).date()
activity[user]["actions"].add(action)
activity[user]["days"].add(date)
activity[user]["count"] += 1
result = []
for user, data in activity.items():
if (
data["count"] > 3 and
len(data["days"]) == data["count"] and
len(data["actions"]) == data["count"]
):
result.append(user)
return result
# Пример использования
logs = [
{"user_id": 1, "action": "login", "timestamp": "2023-05-01T10:00:00"},
{"user_id": 1, "action": "view", "timestamp": "2023-05-02T11:00:00"},
{"user_id": 1, "action": "click", "timestamp": "2023-05-03T12:00:00"},
{"user_id": 1, "action": "logout", "timestamp": "2023-05-04T13:00:00"},
{"user_id": 2, "action": "login", "timestamp": "2023-05-01T10:00:00"},
{"user_id": 2, "action": "login", "timestamp": "2023-05-01T11:00:00"},
{"user_id": 2, "action": "click", "timestamp": "2023-05-01T12:00:00"},
]
print(find_unique_users(logs)) # Ожидаемый результат: [1]
- ❤ 3