Skip to content

Commit

Permalink
feat(pm4py): objects interactions summary
Browse files Browse the repository at this point in the history
objects interactions summary
  • Loading branch information
fit-alessandro-berti committed Jun 23, 2022
1 parent 68956b2 commit e7b4f71
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pm4py/__init__.py
Expand Up @@ -26,7 +26,7 @@
precision_alignments, conformance_diagnostics_footprints, \
fitness_footprints, precision_footprints, check_is_fitting, conformance_temporal_profile, \
conformance_log_skeleton
from pm4py.ocel import ocel_temporal_summary, ocel_objects_summary, ocel_get_object_types, ocel_get_attribute_names, ocel_flattening, ocel_object_type_activities, ocel_objects_ot_count, \
from pm4py.ocel import ocel_objects_interactions_summary, ocel_temporal_summary, ocel_objects_summary, ocel_get_object_types, ocel_get_attribute_names, ocel_flattening, ocel_object_type_activities, ocel_objects_ot_count, \
discover_ocdfg, discover_oc_petri_net, discover_objects_graph
from pm4py.vis import view_petri_net, save_vis_petri_net, view_dfg, save_vis_dfg, view_process_tree, \
save_vis_process_tree, \
Expand Down
32 changes: 32 additions & 0 deletions pm4py/ocel.py
Expand Up @@ -156,6 +156,38 @@ def ocel_objects_summary(ocel: OCEL) -> pd.DataFrame:
return objects_summary


def ocel_objects_interactions_summary(ocel: OCEL) -> pd.DataFrame:
"""
Gets the objects interactions summary of an object-centric event log.
The objects interactions summary has a row for every combination (event, related object, other related object).
Properties such as the activity of the event, and the object types of the two related objects, are included.
:param ocel: object-centric event log
:rtype: ``OCEL``
.. code-block:: python3
import pm4py
interactions_summary = pm4py.ocel_objects_interactions_summary(ocel)
"""
obj_types = ocel.objects.groupby(ocel.object_id_column)[ocel.object_type_column].first().to_dict()
eve_activities = ocel.events.groupby(ocel.event_id_column)[ocel.event_activity].first().to_dict()
ev_rel_obj = ocel.relations.groupby(ocel.event_id_column)[ocel.object_id_column].apply(list).to_dict()
stream = []
for ev in ev_rel_obj:
rel_obj = ev_rel_obj[ev]
for o1 in rel_obj:
for o2 in rel_obj:
if o1 != o2:
stream.append({ocel.event_id_column: ev, ocel.event_activity: eve_activities[ev],
ocel.object_id_column: o1, ocel.object_type_column: obj_types[o1],
ocel.object_id_column+"_2": o2, ocel.object_type_column+"_2": obj_types[o2]})

import pandas as pd
return pd.DataFrame(stream)


def discover_ocdfg(ocel: OCEL, business_hours=False, worktiming=[7, 17], weekends=[6, 7]) -> Dict[str, Any]:
"""
Discovers an OC-DFG from an object-centric event log.
Expand Down

0 comments on commit e7b4f71

Please sign in to comment.