def apply(ocel: OCEL, values: Collection[Any], parameters: Optional[Dict[Any, Any]] = None) -> OCEL: """ Filters the object-centric event log on the provided object attributes values Parameters ---------------- ocel Object-centric event log values Collection of values parameters Parameters of the algorithm, including: - Parameters.ATTRIBUTE_KEY => the attribute that should be filtered - Parameters.POSITIVE => decides if the values should be kept (positive=True) or removed (positive=False) Returns ---------------- ocel Filtered object-centric event log """ if parameters is None: parameters = {} attribute_key = exec_utils.get_param_value(Parameters.ATTRIBUTE_KEY, parameters, ocel.object_type_column) positive = exec_utils.get_param_value(Parameters.POSITIVE, parameters, True) ocel = copy(ocel) if positive: ocel.objects = ocel.objects[ocel.objects[attribute_key].isin(values)] else: ocel.objects = ocel.objects[~ocel.objects[attribute_key].isin(values)] return filtering_utils.propagate_object_filtering(ocel, parameters=parameters)
def propagate_event_filtering(ocel: OCEL, parameters: Optional[Dict[Any, Any]] = None) -> OCEL: """ Propagates the filtering at the event level to the remaining parts of the OCEL structure (objects, relations) Parameters ---------------- ocel Object-centric event log parameters Parameters of the algorithm, including: - Parameters.EVENT_ID => the column to be used as case identifier - Parameters.OBJECT_ID => the column to be used as object identifier - Parameters.OBJECT_TYPE => the column to be used as object type Returns ---------------- ocel Object-centric event log with propagated filter """ if parameters is None: parameters = {} event_id = exec_utils.get_param_value(Parameters.EVENT_ID, parameters, ocel.event_id_column) object_id = exec_utils.get_param_value(Parameters.OBJECT_ID, parameters, ocel.object_id_column) selected_event_ids = set(ocel.events[event_id].unique()) ocel.relations = ocel.relations[ocel.relations[event_id].isin( selected_event_ids)] selected_object_ids = set(ocel.relations[object_id].unique()) ocel.objects = ocel.objects[ocel.objects[object_id].isin( selected_object_ids)] return ocel