# 08_infos-clusters.py # # content: (1) Load data and create event log # (2) Infos for clusters # (3) Process maps for clusters # # input: results/haum/eventlogs_pre-corona_item-clusters.csv # output: results/haum/pn_infos_clusters.csv # # last mod: 2024-03-06 import pm4py import pandas as pd from python_helpers import eval_pm, pn_infos #--------------- (1) Load data and create event logs --------------- dat = pd.read_csv("results/haum/eventlogs_pre-corona_item-clusters.csv", sep = ";") log_path = pm4py.format_dataframe(dat, case_id = "path", activity_key = "event", timestamp_key = "date.start") #--------------- (2) Infos for clusters --------------- # Merge clusters into data frame eval = pd.DataFrame(columns = ["fitness", "precision", "generalizability", "simplicity", "sound", "narcs", "ntrans", "nplaces", "nvariants", "mostfreq"]) for cluster in log_path.grp.unique().tolist(): eval = pd.concat([eval, pn_infos(log_path, "grp", cluster)]) eval = eval.sort_index() eval.to_csv("results/haum/pn_infos_clusters.csv", sep = ";") #--------------- (3) Process maps for clusters --------------- for cluster in log_path.grp.unique().tolist(): subdata = log_path[log_path.grp == cluster] subnet, subim, subfm = pm4py.discover_petri_net_inductive(subdata, noise_threshold=0.5) pm4py.save_vis_petri_net(subnet, subim, subfm, "results/processmaps/petrinet_cluster" + str(cluster).zfill(3) + ".png") bpmn = pm4py.convert.convert_to_bpmn(subnet, subim, subfm) pm4py.vis.save_vis_bpmn(bpmn, "results/processmaps/bpmn_cluster_" + str(cluster).zfill(3) + ".png")