def view_petri_net(petri_net, initial_marking, final_marking, format="png"): """ Views a (composite) Petri net Parameters ------------- petri_net Petri net initial_marking Initial marking final marking Final marking format Format of the output picture (default: png) """ from pm4py.visualization.petrinet import visualizer as pn_visualizer gviz = pn_visualizer.apply( petri_net, initial_marking, final_marking, parameters={ pn_visualizer.Variants.WO_DECORATION.value.Parameters.FORMAT: format }) pn_visualizer.view(gviz)
def execute_script(): log_path = os.path.join("..", "tests", "input_data", "interval_event_log.xes") log = xes_importer.apply(log_path) parameters = {} parameters[ constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = "start_timestamp" parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = "time:timestamp" parameters[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = "concept:name" parameters["format"] = "svg" start_activities = sa_get.get_start_activities(log, parameters=parameters) end_activities = ea_get.get_end_activities(log, parameters=parameters) parameters["start_activities"] = start_activities parameters["end_activities"] = end_activities dfg_freq = dfg_algorithm.apply(log, parameters=parameters, variant=dfg_algorithm.Variants.FREQUENCY) dfg_perf = dfg_algorithm.apply(log, parameters=parameters, variant=dfg_algorithm.Variants.PERFORMANCE) dfg_gv_freq = dfg_vis_fact.apply(dfg_freq, log=log, variant=dfg_vis_fact.Variants.FREQUENCY, parameters=parameters) dfg_vis_fact.view(dfg_gv_freq) dfg_gv_perf = dfg_vis_fact.apply(dfg_perf, log=log, variant=dfg_vis_fact.Variants.PERFORMANCE, parameters=parameters) dfg_vis_fact.view(dfg_gv_perf) net, im, fm = dfg_conv.apply(dfg_freq) gviz = pn_vis.apply(net, im, fm, parameters=parameters) pn_vis.view(gviz)
def execute_script(): # import the log log_path = os.path.join("..", "tests", "input_data", "receipt.xes") log = xes_importer.apply(log_path) # apply Inductive Miner net, initial_marking, final_marking = inductive_miner.apply(log) # get visualization variant = pn_vis.Variants.PERFORMANCE parameters_viz = { pn_vis.Variants.PERFORMANCE.value.Parameters.AGGREGATION_MEASURE: "mean", pn_vis.Variants.PERFORMANCE.value.Parameters.FORMAT: "svg" } gviz = pn_vis.apply(net, initial_marking, final_marking, log=log, variant=variant, parameters=parameters_viz) pn_vis.view(gviz) # do another visualization with frequency variant = pn_vis.Variants.FREQUENCY parameters_viz = {pn_vis.Variants.FREQUENCY.value.Parameters.FORMAT: "svg"} gviz = pn_vis.apply(net, initial_marking, final_marking, log=log, variant=variant, parameters=parameters_viz) pn_vis.view(gviz)
def model_metrics(model_log_path, metric_log_path, gexp_name): start_time = time() model_log_csv = pd.read_csv(model_log_path, ',') metric_log_csv = pd.read_csv(metric_log_path, ',') parameters = {log_converter.Variants.TO_EVENT_LOG.value.Parameters.CASE_ID_KEY: 'number'} model_log = log_converter.apply(model_log_csv, parameters=parameters, variant=log_converter.Variants.TO_EVENT_LOG) metric_log = log_converter.apply(metric_log_csv, parameters=parameters, variant=log_converter.Variants.TO_EVENT_LOG) parameters = {inductive_miner.Variants.DFG_BASED.value.Parameters.CASE_ID_KEY: 'number', inductive_miner.Variants.DFG_BASED.value.Parameters.ACTIVITY_KEY: 'incident_state', inductive_miner.Variants.DFG_BASED.value.Parameters.TIMESTAMP_KEY: 'sys_updated_at', alignments.Variants.VERSION_STATE_EQUATION_A_STAR.value.Parameters.ACTIVITY_KEY: 'incident_state'} petrinet, initial_marking, final_marking = inductive_miner.apply(model_log, parameters=parameters) gviz = pn_visualizer.apply(petrinet, initial_marking, final_marking) #gviz.render('petrinets\\'+gexp_name+'\\petri_' + model_base + '.png') gviz.render('test_time\\test.png') pn_visualizer.view(gviz) alignments_res = alignments.apply_log(metric_log, petrinet, initial_marking, final_marking, parameters=parameters) fitness = replay_fitness.evaluate(alignments_res, variant=replay_fitness.Variants.ALIGNMENT_BASED, parameters=parameters) precision = calc_precision.apply(metric_log, petrinet, initial_marking, final_marking, parameters=parameters) generaliz = calc_generaliz.apply(metric_log, petrinet, initial_marking, final_marking, parameters=parameters) #generaliz = 0 simplic = calc_simplic.apply(petrinet) f_score = 2 * ((fitness['averageFitness'] * precision) / (fitness['averageFitness'] + precision)) end_time = time() m, s = divmod(end_time - start_time, 60) h, m = divmod(m, 60) print('Fin %02d:%02d:%02d' % (h, m, s)) print(' F:', '%.10f' % fitness['averageFitness'], ' P:', '%.10f' % precision, ' FS:', '%.10f' % f_score, ' G:', '%.10f' % generaliz, ' S:', '%.10f' % simplic, ' T:', '%02d:%02d:%02d' % (h, m, s)) #metrics = pd.Series([model_base, metric_base, '%.10f' % fitness['averageFitness'], # '%.10f' % precision, '%.10f' % f_score, '%.10f' % generaliz, '%.10f' % simplic, # '%02d:%02d:%02d' % (h, m, s)]) return model_base
def apply(net, im, fm, parameters=None): """ Transforms a WF-net to a process tree Parameters ------------- net Petri net im Initial marking fm Final marking Returns ------------- tree Process tree """ if parameters is None: parameters = {} debug = exec_utils.get_param_value(Parameters.DEBUG, parameters, False) fold = exec_utils.get_param_value(Parameters.FOLD, parameters, True) grouped_net = group_blocks_in_net(net, parameters=parameters) if len(grouped_net.transitions) == 1: pt_str = list(grouped_net.transitions)[0].label pt = pt_util.parse(pt_str) return pt_util.fold(pt) if fold else pt else: if debug: from pm4py.visualization.petrinet import visualizer as pn_viz pn_viz.view(pn_viz.apply(grouped_net, parameters={"format": "svg"})) raise ValueError('Parsing of WF-net Failed')
def execute_script(): log = xes_importer.apply(os.path.join("..", "tests", "compressed_input_data", "09_a32f0n00.xes.gz")) heu_net = heuristics_miner.apply_heu(log, parameters={ heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99}) gviz = hn_vis.apply(heu_net, parameters={hn_vis.Variants.PYDOTPLUS.value.Parameters.FORMAT: "svg"}) hn_vis.view(gviz) net, im, fm = heuristics_miner.apply(log, parameters={ heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99}) gviz2 = petri_vis.apply(net, im, fm, parameters={petri_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: "svg"}) petri_vis.view(gviz2)
def petrinet_visualizer(net, initial_marking, final_marking, parameters= {pn_visualizer.Variants.WO_DECORATION.\ value.Parameters.FORMAT:"png"}): gviz = pn_visualizer.apply(net, initial_marking, final_marking, parameters=parameters) pn_visualizer.view(gviz)
def visualization(log, C, petrinet=True, heu_net=False): if petrinet: # net, im, fm = inductive_miner.apply(variants_filter.apply(log, C)) net, im, fm = heuristics_miner.apply(variants_filter.apply(log, C)) gviz = pn_visualizer.apply(net, im, fm) pn_visualizer.view(gviz) if heu_net: heu_net = inductive_miner.apply_heu(variants_filter.apply(log, C)) gviz = hn_vis_factory.apply(heu_net) hn_vis_factory.view(gviz)
def execute_script(): log_path = os.path.join("..", "tests", "input_data", "interval_event_log.csv") dataframe = pm4py.read_csv(log_path) log_path = os.path.join("..", "tests", "input_data", "reviewing.xes") log = pm4py.read_xes(log_path) dataframe = pm4py.convert_to_dataframe(log) parameters = {} #parameters[constants.PARAMETER_CONSTANT_START_TIMESTAMP_KEY] = "start_timestamp" parameters[constants.PARAMETER_CONSTANT_TIMESTAMP_KEY] = "time:timestamp" parameters[constants.PARAMETER_CONSTANT_ACTIVITY_KEY] = "concept:name" parameters[constants.PARAMETER_CONSTANT_CASEID_KEY] = "case:concept:name" parameters["strict"] = True parameters["format"] = "svg" start_activities = sa_get.get_start_activities(dataframe, parameters=parameters) end_activities = ea_get.get_end_activities(dataframe, parameters=parameters) att_count = att_get.get_attribute_values(dataframe, "concept:name", parameters=parameters) parameters["start_activities"] = start_activities parameters["end_activities"] = end_activities soj_time = soj_time_get.apply(dataframe, parameters=parameters) print("soj_time") print(soj_time) conc_act = conc_act_get.apply(dataframe, parameters=parameters) print("conc_act") print(conc_act) efg = efg_get.apply(dataframe, parameters=parameters) print("efg") print(efg) dfg_freq, dfg_perf = df_statistics.get_dfg_graph( dataframe, measure="both", start_timestamp_key="start_timestamp") dfg_gv_freq = dfg_vis_fact.apply(dfg_freq, activities_count=att_count, variant=dfg_vis_fact.Variants.FREQUENCY, soj_time=soj_time, parameters=parameters) dfg_vis_fact.view(dfg_gv_freq) dfg_gv_perf = dfg_vis_fact.apply(dfg_perf, activities_count=att_count, variant=dfg_vis_fact.Variants.PERFORMANCE, soj_time=soj_time, parameters=parameters) dfg_vis_fact.view(dfg_gv_perf) net, im, fm = dfg_conv.apply(dfg_freq) gviz = pn_vis.apply(net, im, fm, parameters=parameters) pn_vis.view(gviz)
def execute_script(): df = pm4py.read_csv("../tests/input_data/interval_event_log.csv") log = pm4py.read_xes("../tests/input_data/interval_event_log.xes") heu_net = plusplus.apply_heu(log, parameters={"heu_net_decoration": "performance"}) heu_net_2 = plusplus.apply_heu_pandas(df, parameters={"heu_net_decoration": "performance"}) gviz = visualizer.apply(heu_net, parameters={"format": "svg"}) visualizer.view(gviz) gviz2 = visualizer.apply(heu_net_2, parameters={"format": "svg"}) visualizer.view(gviz2) net1, im1, fm1 = plusplus.apply(log) net2, im2, fm2 = plusplus.apply(log) gviz3 = pn_visualizer.apply(net1, im1, fm1, parameters={"format": "svg"}) pn_visualizer.view(gviz3) gviz4 = pn_visualizer.apply(net2, im2, fm2, parameters={"format": "svg"}) pn_visualizer.view(gviz4)
def execute_script(): log_path = os.path.join("..", "tests", "input_data", "running-example.xes") log = xes_import.apply(log_path) net, i_m, f_m = alpha_miner.apply(log) gviz = pn_vis.apply( net, i_m, f_m, parameters={ pn_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: "svg", pn_vis.Variants.WO_DECORATION.value.Parameters.DEBUG: False }) pn_vis.view(gviz)
def execute_script(): # import csv & create log dataframe = csv_import_adapter.import_dataframe_from_path( datasourceMockdata(), sep=";") dataframe = dataframe.rename(columns={ 'coID': 'case:concept:name', 'Activity': 'concept:name' }) log = conversion_factory.apply(dataframe) # option 1: Directly-Follows Graph, represent frequency or performance parameters = {constants.PARAMETER_CONSTANT_ACTIVITY_KEY: "concept:name"} variant = 'frequency' dfg = dfg_factory.apply(log, variant=variant, parameters=parameters) gviz1 = dfg_vis_factory.apply(dfg, log=log, variant=variant, parameters=parameters) dfg_vis_factory.view(gviz1) # option 2: Heuristics Miner, acts on the Directly-Follows Graph, find common structures, output: Heuristic Net (.svg) heu_net = heuristics_miner.apply_heu( log, parameters={ heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.00 }) gviz2 = hn_vis.apply( heu_net, parameters={hn_vis.Variants.PYDOTPLUS.value.Parameters.FORMAT: "svg"}) hn_vis.view(gviz2) # option 3: Petri Net based on Heuristic Miner (.png) net, im, fm = heuristics_miner.apply( log, parameters={ heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.00 }) gviz3 = petri_vis.apply( net, im, fm, parameters={ petri_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: "png" }) petri_vis.view(gviz3)
def execute_script(): log_path = os.path.join("..", "tests", "input_data", "running-example.xes") log = xes_importer.apply(log_path) net, marking, final_marking = inductive.apply( log, variant=inductive.Variants.IM) for place in marking: print("initial marking " + place.name) for place in final_marking: print("final marking " + place.name) gviz = pn_vis.apply( net, marking, final_marking, parameters={ pn_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: "svg", pn_vis.Variants.WO_DECORATION.value.Parameters.DEBUG: True }) pn_vis.view(gviz) if True: fit_traces = [] for i in range(0, len(log)): try: print("\n", i, [x["concept:name"] for x in log[i]]) cf_result = pm4py.algo.conformance.alignments.variants.state_equation_a_star.apply( log[i], net, marking, final_marking)['alignment'] if cf_result is None: print("alignment is none!") else: is_fit = True for couple in cf_result: print(couple) if not (couple[0] == couple[1] or couple[0] == ">>" and couple[1] is None): is_fit = False print("isFit = " + str(is_fit)) if is_fit: fit_traces.append(log[i]) except TypeError: print("EXCEPTION ", i) traceback.print_exc() print(fit_traces) print(len(fit_traces))
def execute_script(): log = xes_importer.apply( os.path.join("..", "tests", "input_data", "receipt.xes")) log = sorting.sort_timestamp(log) net, im, fm = inductive_miner.apply(log) log1 = EventLog(log[:500]) log2 = EventLog(log[len(log) - 500:]) statistics = element_usage_comparison.compare_element_usage_two_logs( net, im, fm, log1, log2) gviz = pn_vis.apply( net, im, fm, variant=pn_vis.Variants.FREQUENCY, aggregated_statistics=statistics, parameters={pn_vis.Variants.FREQUENCY.value.Parameters.FORMAT: "svg"}) pn_vis.view(gviz)
def execute_script(): log_path = os.path.join("..", "tests", "input_data", "running-example.xes") log = xes_importer.apply(log_path) net, marking, final_marking = alpha_miner.apply(log) for place in marking: print("initial marking " + place.name) for place in final_marking: print("final marking " + place.name) gviz = pn_vis.apply(net, marking, final_marking, parameters={pn_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: "svg"}) pn_vis.view(gviz) print("started token replay") aligned_traces = token_replay.apply(log, net, marking, final_marking) fit_traces = [x for x in aligned_traces if x['trace_is_fit']] perc_fitness = 0.00 if len(aligned_traces) > 0: perc_fitness = len(fit_traces) / len(aligned_traces) print("perc_fitness=", perc_fitness)
def execute_script(): log_path = os.path.join("..", "tests", "input_data", "running-example.xes") log = xes_importer.apply(log_path) dfg = dfg_algorithm.apply(log) dfg_gv = dfg_vis_fact.apply( dfg, log, parameters={ dfg_vis_fact.Variants.FREQUENCY.value.Parameters.FORMAT: "svg" }) dfg_vis_fact.view(dfg_gv) net, im, fm = dfg_conv.apply(dfg) gviz = pn_vis.apply( net, im, fm, parameters={ pn_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: "svg" }) pn_vis.view(gviz)
def execute_script(): dataframe2 = csv_import_adapter.import_dataframe_from_path( datasourceMockdata(), sep=",") dataframe2 = dataframe2.rename( columns={ 'timestamp': 'time:timestamp', 'source': 'case:concept:name', 'message': 'concept:name' }) log2 = conversion_factory.apply(dataframe2) # option 1: Heuristics Miner, acts on the Directly-Follows Graph, find common structures, output: Heuristic Net (.svg) heu_net = heuristics_miner.apply_heu( log2, parameters={ heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99 }) gviz2 = hn_vis.apply( heu_net, parameters={hn_vis.Variants.PYDOTPLUS.value.Parameters.FORMAT: "svg"}) hn_vis.view(gviz2) # option 2: Petri Net based on Heuristic Miner (.png) net, im, fm = heuristics_miner.apply( log2, parameters={ heuristics_miner.Variants.CLASSIC.value.Parameters.DEPENDENCY_THRESH: 0.99 }) gviz3 = petri_vis.apply( net, im, fm, parameters={ petri_vis.Variants.WO_DECORATION.value.Parameters.FORMAT: "png" }) petri_vis.view(gviz3)
actrescount = getactivityresourcecount(log, list0, "concept:name", "org:group") #print(actrescount,"actrescount") roles = roles_discovery.apply( log, variant=None, parameters={rpd.Parameters.RESOURCE_KEY: "org:group"}) #rescluster = getresoucecluster(log,roles,"concept:name","org:resource") print(roles, "roles") resourcesimulation = simulateresource(log, actrescount, roles, "concept:name", "org:group") print(resourcesimulation, "resourcesimulation") #join activity but nothing different to the last segment. #ja_values = sna.apply(log, variant=sna.Variants.JOINTACTIVITIES_LOG) #gviz_ja_py = sna_visualizer.apply(ja_values, variant=sna_visualizer.Variants.PYVIS) #sna_visualizer.view(gviz_ja_py, variant=sna_visualizer.Variants.PYVIS) #print(hw_values,'~~', roles,'~~~',ja_values,"hw_values,roles,ja_values") ''' net, im, fm = inductive_miner.apply(log) gviz = visualizer.apply(net, im, fm, parameters={visualizer.Variants.WO_DECORATION.value.Parameters.DEBUG: True}) visualizer.view(gviz) clf, feature_names, classes = decision_mining.get_decision_tree(log, net, im, fm, decision_point="p_6") gviz1 = tree_visualizer.apply(clf, feature_names, classes) visualizer.view(gviz1) X, y, class_names = decision_mining.apply(log, net, im, fm, decision_point="p_6") print(y,class_names) pt_visualizer.save(gviz,"/Users/jiao.shuai.1998.12.01outlook.com/code/07.01.2021/DES1/testfile/decisionnet.png") pt_visualizer.save(gviz1,"/Users/jiao.shuai.1998.12.01outlook.com/code/07.01.2021/DES1/testfile/decisiontree.png") ''' ''' np.set_printoptions(threshold=1000) np.set_printoptions(linewidth=1000)
import os from pm4py.objects.log.importer.xes import importer as xes_importer from pm4py.visualization.petrinet import visualizer from pm4py.algo.discovery.alpha import algorithm as alpha_miner os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/' # Algoritimo Alpha log = xes_importer.apply('sample_data/running-example.xes') net, initial_marking, final_marking = alpha_miner.apply(log) # Visualização alpha_miner.apply(log) gviz = visualizer.apply(net, initial_marking, final_marking) visualizer.view(gviz)
def execute_script(): net = PetriNet("") start = PetriNet.Place("start") end = PetriNet.Place("end") c1 = PetriNet.Place("c1") c2 = PetriNet.Place("c2") c3 = PetriNet.Place("c3") c4 = PetriNet.Place("c4") c5 = PetriNet.Place("c5") c6 = PetriNet.Place("c6") c7 = PetriNet.Place("c7") c8 = PetriNet.Place("c8") c9 = PetriNet.Place("c9") net.places.add(c1) net.places.add(c2) net.places.add(c3) net.places.add(c4) net.places.add(c5) net.places.add(c6) net.places.add(c7) net.places.add(c8) net.places.add(c9) net.places.add(start) net.places.add(end) t1 = PetriNet.Transition("t1", "a") t2 = PetriNet.Transition("t2", None) t3 = PetriNet.Transition("t3", "b") t4 = PetriNet.Transition("t4", "c") t5 = PetriNet.Transition("t5", "d") t6 = PetriNet.Transition("t6", "e") t7 = PetriNet.Transition("t7", None) t8 = PetriNet.Transition("t8", "f") t9 = PetriNet.Transition("t9", "g") t10 = PetriNet.Transition("t10", "h") t11 = PetriNet.Transition("t11", None) net.transitions.add(t1) net.transitions.add(t2) net.transitions.add(t3) net.transitions.add(t4) net.transitions.add(t5) net.transitions.add(t6) net.transitions.add(t7) net.transitions.add(t8) net.transitions.add(t9) net.transitions.add(t10) net.transitions.add(t11) add_arc_from_to(start, t1, net) add_arc_from_to(t1, c1, net) add_arc_from_to(t1, c2, net) add_arc_from_to(c1, t2, net) add_arc_from_to(c1, t3, net) add_arc_from_to(c2, t4, net) add_arc_from_to(t2, c3, net) add_arc_from_to(t3, c3, net) add_arc_from_to(t4, c4, net) add_arc_from_to(c3, t5, net) add_arc_from_to(c4, t5, net) add_arc_from_to(t5, c5, net) add_arc_from_to(c5, t6, net) add_arc_from_to(t6, c1, net) add_arc_from_to(t6, c2, net) add_arc_from_to(c5, t7, net) add_arc_from_to(t7, c7, net) add_arc_from_to(t7, c6, net) add_arc_from_to(c7, t8, net) add_arc_from_to(c6, t9, net) add_arc_from_to(t8, c8, net) add_arc_from_to(t9, c9, net) add_arc_from_to(c8, t11, net) add_arc_from_to(c9, t11, net) add_arc_from_to(t11, end, net) add_arc_from_to(c5, t10, net) add_arc_from_to(t10, end, net) im = Marking() im[start] = 1 fm = Marking() fm[end] = 1 gvizs = [] gvizs.append( visualizer.apply(net, im, final_marking=fm, parameters={"format": "svg"})) visualizer.view(gvizs[len(gvizs) - 1]) decomposed_net = decomposition.decompose(net, im, fm) for snet, sim, sfm in decomposed_net: gvizs.append( visualizer.apply(snet, sim, final_marking=sfm, parameters={"format": "svg"})) visualizer.view(gvizs[len(gvizs) - 1])
import os from pm4py.objects.log.importer.xes import importer as xes_importer logfile = "D://process mining//HMM//pnml//reference//reference7.xes" log = xes_importer.apply(os.path.join(logfile)) from pm4py.algo.discovery.alpha import algorithm as alpha_miner net, initial_marking, final_marking = alpha_miner.apply(log) from pm4py.visualization.petrinet import visualizer as pn_visualizer gviz = pn_visualizer.apply(net, initial_marking, final_marking) pn_visualizer.view(gviz) from pm4py.objects.petri.exporter import exporter as pnml_exporter filename = "Alpha Miner.pnml" pnml_exporter.apply(net, initial_marking, filename)
def sample(): log = importer.apply('../tests/input_data/running-example.xes') net, initial_marking, final_marking = alpha_miner.apply(log) gviz = visualizer.apply(net, initial_marking, final_marking) visualizer.view(gviz)