Filtering¶
synamine provides three filtering functions to subset an event log. All filters return a new EventLog -- the original is never modified.
Filter by activity¶
Keep (or exclude) cases that contain specific activities:
import synamine
log = synamine.read_xes("events.xes")
# Keep only cases containing "Approve"
filtered = synamine.filter_by_activity(log, activities=["Approve"])
# Exclude cases containing "Cancel"
filtered = synamine.filter_by_activity(log, activities=["Cancel"], exclude=True)
Filter by timeframe¶
Keep cases that fall within a time range:
from datetime import datetime
filtered = synamine.filter_by_timeframe(
log,
start=datetime(2024, 1, 1),
end=datetime(2024, 6, 30),
)
# Only start bound
filtered = synamine.filter_by_timeframe(log, start=datetime(2024, 1, 1))
# Only end bound
filtered = synamine.filter_by_timeframe(log, end=datetime(2024, 6, 30))
Filter by variant¶
Keep cases that match the most common variants:
# Keep the top 5 most frequent variants
filtered = synamine.filter_by_variant(log, top_k=5)
# Keep specific variants
filtered = synamine.filter_by_variant(
log,
variants=[("Register", "Approve", "Close")],
)
Chaining filters¶
Since each filter returns a new EventLog, you can chain them: