Skip to content

Statistics & Analysis

synamine provides 11 statistics functions covering activity analysis, case properties, timing, rework detection, and resource analytics.

Activity statistics

Activity frequencies

Count how often each activity occurs across the entire log:

import synamine

log = synamine.read_xes("events.xes")
activities = synamine.get_activities(log)
# {"Approve": 150, "Review": 200, ...}

Start and end activities

Which activities begin and end cases:

start = synamine.get_start_activities(log)
end = synamine.get_end_activities(log)
# {"Register": 100, "Submit": 50, ...}

Variants

A variant is a unique sequence of activities observed in a case. Get variant frequencies:

variants = synamine.get_variants(log)
# {("Register", "Approve", "Close"): 42, ...}

Case statistics

Case lengths

Number of events per case:

lengths = synamine.get_case_lengths(log)
# {"case_1": 5, "case_2": 12, ...}

Case durations

Total duration of each case in seconds (first event to last event):

durations = synamine.get_case_durations(log)
# {"case_1": 86400.0, "case_2": 3600.0, ...}

Timing analysis

Activity durations (sojourn times)

Time from each activity to the next event in the same case. Returns mean, median, min, max, and standard deviation per activity:

activity_durations = synamine.get_activity_durations(log)
# {"Approve": {"mean": 3600.0, "median": 1800.0, "min": 60.0, "max": 86400.0, "stdev": 5000.0}, ...}

Waiting times

All inter-event durations as a flat list (useful for histograms):

waiting_times = synamine.get_waiting_times(log)
# [3600.0, 1800.0, 7200.0, ...]

Rework analysis

Activities that appear more than once within the same case:

rework = synamine.get_rework(log)
# {"Review": 45, "Approve": 12}  -- 45 cases had "Review" repeated

Resource analytics

Note

Resource functions return None if no resource column is configured in the schema.

Resource workload

Event count per resource:

workload = synamine.get_resource_workload(log)
# {"Alice": 120, "Bob": 95, ...} or None

Resource-activity matrix

How many times each resource performed each activity:

matrix = synamine.get_resource_activity_matrix(log)
# {"Alice": {"Approve": 50, "Review": 70}, "Bob": {"Register": 95}, ...} or None

Summary

Function Returns Description
get_activities(log) dict[str, int] Activity frequencies
get_start_activities(log) dict[str, int] Start activity frequencies
get_end_activities(log) dict[str, int] End activity frequencies
get_variants(log) dict[tuple, int] Variant frequencies
get_case_lengths(log) dict[str, int] Events per case
get_case_durations(log) dict[str, float] Case duration in seconds
get_activity_durations(log) dict[str, dict] Sojourn time stats per activity
get_waiting_times(log) list[float] All inter-event gaps in seconds
get_rework(log) dict[str, int] Cases with repeated activities
get_resource_workload(log) dict or None Events per resource
get_resource_activity_matrix(log) dict or None Resource x activity counts