Senior
Python task: build user sessions based on events (new session if gap > 30 minutes) and calculate daily aggregates.
sobes.tech AI
Answer from AI
To build user sessions based on events with a gap of more than 30 minutes and to calculate daily aggregates, you can use pandas:
import pandas as pd
data = [
{'user_id': 1, 'event_time': '2024-04-01 10:00:00'},
{'user_id': 1, 'event_time': '2024-04-01 10:20:00'},
{'user_id': 1, 'event_time': '2024-04-01 11:00:00'}, # >30 min after previous
{'user_id': 2, 'event_time': '2024-04-01 09:00:00'},
{'user_id': 2, 'event_time': '2024-04-01 09:10:00'},
]
df = pd.DataFrame(data)
df['event_time'] = pd.to_datetime(df['event_time'])
# Sort by user and time
df = df.sort_values(['user_id', 'event_time'])
# Calculate the difference between events for each user
df['time_diff'] = df.groupby('user_id')['event_time'].diff().dt.total_seconds().div(60) # in minutes
# New session if gap > 30 minutes or first event
df['new_session'] = (df['time_diff'] > 30) | (df['time_diff'].isna())
# Assign session number
df['session_id'] = df.groupby('user_id')['new_session'].cumsum()
# Add date for aggregation
df['date'] = df['event_time'].dt.date
# Example aggregates: number of sessions and events per day per user
agg = df.groupby(['user_id', 'date']).agg(
sessions_count=('session_id', 'nunique'),
events_count=('event_time', 'count')
).reset_index()
print(agg)
This code segments sessions based on a 30-minute gap and calculates daily aggregates per user.