in identity-resolution/notebooks/identity-graph/nepytune/usecase/purchase_path.py [0:0]
def generate_stats(all_activities, **kwargs):
"""Generate statistics per user (persistentId) activities."""
result = dict()
user_sessions = generate_session_from_event(all_activities, **kwargs)
def grouper(session):
return session.persistentId or session.transientId
for persistent_id, session_list in (itertools.groupby(sorted(user_sessions, key=grouper), key=grouper)):
session_list = list(session_list)
session_durations = get_time_by_device(session_list)
user_events_by_timestamp = sorted(
itertools.chain.from_iterable([session.events for session in session_list]),
key=lambda event: event.ts
)
if persistent_id not in result:
result[persistent_id] = {
"transient_ids": {},
"devices_count": 0,
"first_device": first_device_in_session(user_events_by_timestamp),
"time_to_purchase": time_to_purchase(user_events_by_timestamp),
}
for transient_id, duration in session_durations.items():
user_sessions = sorted(
[session for session in session_list if session.transientId == transient_id],
key=lambda session: session.events[0].ts
)
result[persistent_id]["transient_ids"][transient_id] = {
"sessions_duration": duration,
"sessions_count": len(user_sessions),
"purchase_session": user_sessions[-1],
"sessions": user_sessions
}
result[persistent_id]["devices_count"] += 1
return result