Generate pm4py log using ASP GeneratorΒΆ
ASP log generator uses the decl model which converts the model into abudction logic programming and pass to the clingo. Clingo generates the output which is turned into the pm4py log or can be created a .xes file.
[1]:
!python3 --version
Python 3.11.2
[2]:
import os
import pathlib
from Declare4Py.ProcessMiningTasks.ASPLogGeneration.asp_generator import AspGenerator
from Declare4Py.ProcessModels.DeclareModel import DeclareModel
/usr/local/lib/python3.11/dist-packages/lark/utils.py:163: DeprecationWarning: module 'sre_parse' is deprecated
import sre_parse
/usr/local/lib/python3.11/dist-packages/lark/utils.py:164: DeprecationWarning: module 'sre_constants' is deprecated
import sre_constants
[3]:
decl_model_1 = "decl_files/Response.decl"
decl_model_2 = "decl_files/MikeModel.decl"
decl_model_3 = "decl_files/reference10.decl"
decl_model_4 = "diagonisis.decl"
decl_folder = "decl_files"
decl_filename = decl_model_4.split(".")[0]
output_file = pathlib.Path(".", f"{decl_filename}.xes")
decl_file = pathlib.Path(".", decl_folder, decl_model_4)
[4]:
# Create Declare model by reading declare model from a file.
model: DeclareModel = DeclareModel().parse_from_file(decl_file)
[5]:
#general Setting
# Number of traces that should be generated
num_of_traces = 10
# Minimum and maximum number of events a trace can contain
(num_min_events, num_max_events) = (2, 25)
[6]:
# Initializing ASP generator with default distributor which is uniform.
asp = AspGenerator(model, num_of_traces, num_min_events, num_max_events)
[7]:
model.__dict__
[7]:
{'activities': ['ER Triage',
'ER Registration',
'ER Sepsis Triage',
'Leucocytes',
'CRP',
'LacticAcid',
'IV Antibiotics',
'Admission NC',
'IV Liquid',
'Release A',
'Release B',
'Return ER',
'Admission IC'],
'formula': '',
'parsed_formula': None,
'parameters': [],
'backend': 'lydia',
'attribute_type': [],
'payload': [],
'serialized_constraints': ['Chain Response[Admission NC, Release B] |A.org:group is K |T.org:group is E |',
'Chain Response[Admission NC, Release A] |A.org:group is I |T.org:group is E |133020,957701,s',
'Chain Precedence[IV Liquid, Admission NC] |A.org:group is I |T.org:group is A |92,14473,s',
'Chain Response[ER Registration, ER Triage] |(A.DiagnosticArtAstrup is false) AND (A.SIRSCritHeartRate is true) AND (A.org:group is A) AND (A.DiagnosticBlood is true) AND (A.DisfuncOrg is false) AND (A.DiagnosticECG is true) AND (A.Age >= 45) AND (A.InfectionSuspected is true) AND (A.DiagnosticLacticAcid is true) AND (A.DiagnosticSputum is true) AND (A.Hypoxie is false) AND (A.DiagnosticUrinaryCulture is true) AND (A.DiagnosticLiquor is false) AND (A.SIRSCritTemperature is true) AND (A.Infusion is true) AND (A.Hypotensie is false) AND (A.DiagnosticUrinarySediment is true) AND (A.Oligurie is false) AND (A.Age <= 80) AND (A.SIRSCritTachypnea is true) AND (A.DiagnosticOther is false) AND (A.SIRSCritLeucos is false) AND (A.DiagnosticIC is true) AND (A.SIRSCriteria2OrMore is true) AND (A.DiagnosticXthorax is true) |T.org:group is C |52,2154,s',
'Chain Precedence[Release A, Return ER] |A.org:group is ? |T.org:group is E |1121801,1121801,s',
'Chain Precedence[ER Sepsis Triage, IV Antibiotics] |A.org:group is L |T.org:group is L |15,11000,s',
'Chain Response[ER Sepsis Triage, IV Antibiotics] |A.org:group is L |T.org:group is L |15,11000,s',
'Chain Precedence[Admission IC, Admission NC] |A.org:group is J |T.org:group is J |',
'Chain Precedence[IV Antibiotics, Admission NC] |A.org:group is F |T.org:group is A |92,14459,s',
'Chain Precedence[Admission NC, Release B] |A.org:group is E |T.org:group is K |48225,48225,s',
'Chain Response[Admission IC, Admission NC] |A.org:group is J |T.org:group is J |61534,61534,s',
'Chain Response[LacticAcid, Leucocytes] |A.LacticAcid <= 0.8 |T.Leucocytes >= 13.8 |0,2778,m',
'Chain Precedence[ER Registration, ER Triage] |A.org:group is C |(T.InfectionSuspected is true) AND (T.SIRSCritTemperature is true) AND (T.DiagnosticLacticAcid is true) AND (T.DiagnosticBlood is true) AND (T.DiagnosticIC is true) AND (T.SIRSCriteria2OrMore is true) AND (T.DiagnosticECG is true) |52,2154,s'],
'constraints': [{'template': "<Template.Chain Response: 11 >",
'activities': ['Admission NC', 'Release B'],
'condition': ['A.org:group is K', 'T.org:group is E', '']},
{'template': "<Template.Chain Response: 11 >",
'activities': ['Admission NC', 'Release A'],
'condition': ['A.org:group is I', 'T.org:group is E', '133020,957701,s']},
{'template': "<Template.Chain Precedence: 14 >",
'activities': ['IV Liquid', 'Admission NC'],
'condition': ['A.org:group is I', 'T.org:group is A', '92,14473,s']},
{'template': "<Template.Chain Response: 11 >",
'activities': ['ER Registration', 'ER Triage'],
'condition': ['(A.DiagnosticArtAstrup is false) AND (A.SIRSCritHeartRate is true) AND (A.org:group is A) AND (A.DiagnosticBlood is true) AND (A.DisfuncOrg is false) AND (A.DiagnosticECG is true) AND (A.Age >= 45) AND (A.InfectionSuspected is true) AND (A.DiagnosticLacticAcid is true) AND (A.DiagnosticSputum is true) AND (A.Hypoxie is false) AND (A.DiagnosticUrinaryCulture is true) AND (A.DiagnosticLiquor is false) AND (A.SIRSCritTemperature is true) AND (A.Infusion is true) AND (A.Hypotensie is false) AND (A.DiagnosticUrinarySediment is true) AND (A.Oligurie is false) AND (A.Age <= 80) AND (A.SIRSCritTachypnea is true) AND (A.DiagnosticOther is false) AND (A.SIRSCritLeucos is false) AND (A.DiagnosticIC is true) AND (A.SIRSCriteria2OrMore is true) AND (A.DiagnosticXthorax is true)',
'T.org:group is C',
'52,2154,s']},
{'template': "<Template.Chain Precedence: 14 >",
'activities': ['Release A', 'Return ER'],
'condition': ['A.org:group is ?', 'T.org:group is E', '1121801,1121801,s']},
{'template': "<Template.Chain Precedence: 14 >",
'activities': ['ER Sepsis Triage', 'IV Antibiotics'],
'condition': ['A.org:group is L', 'T.org:group is L', '15,11000,s']},
{'template': "<Template.Chain Response: 11 >",
'activities': ['ER Sepsis Triage', 'IV Antibiotics'],
'condition': ['A.org:group is L', 'T.org:group is L', '15,11000,s']},
{'template': "<Template.Chain Precedence: 14 >",
'activities': ['Admission IC', 'Admission NC'],
'condition': ['A.org:group is J', 'T.org:group is J', '']},
{'template': "<Template.Chain Precedence: 14 >",
'activities': ['IV Antibiotics', 'Admission NC'],
'condition': ['A.org:group is F', 'T.org:group is A', '92,14459,s']},
{'template': "<Template.Chain Precedence: 14 >",
'activities': ['Admission NC', 'Release B'],
'condition': ['A.org:group is E', 'T.org:group is K', '48225,48225,s']},
{'template': "<Template.Chain Response: 11 >",
'activities': ['Admission IC', 'Admission NC'],
'condition': ['A.org:group is J', 'T.org:group is J', '61534,61534,s']},
{'template': "<Template.Chain Response: 11 >",
'activities': ['LacticAcid', 'Leucocytes'],
'condition': ['A.LacticAcid <= 0.8', 'T.Leucocytes >= 13.8', '0,2778,m']},
{'template': "<Template.Chain Precedence: 14 >",
'activities': ['ER Registration', 'ER Triage'],
'condition': ['A.org:group is C',
'(T.InfectionSuspected is true) AND (T.SIRSCritTemperature is true) AND (T.DiagnosticLacticAcid is true) AND (T.DiagnosticBlood is true) AND (T.DiagnosticIC is true) AND (T.SIRSCriteria2OrMore is true) AND (T.DiagnosticECG is true)',
'52,2154,s']}],
'parsed_model': <src.Declare4Py.ProcessModels.DeclareModel.DeclareParsedDataModel at 0x7f6986291250>,
'declare_model_lines': ['activity ER Triage\n',
'bind ER Triage: org:group, Diagnose, Age\n',
'activity ER Registration\n',
'bind ER Registration: InfectionSuspected, org:group, DiagnosticBlood, DisfuncOrg, SIRSCritTachypnea, Hypotensie, SIRSCritHeartRate, Infusion, DiagnosticArtAstrup, Age, DiagnosticIC, DiagnosticSputum, DiagnosticLiquor, DiagnosticOther, SIRSCriteria2OrMore, DiagnosticXthorax, SIRSCritTemperature, DiagnosticUrinaryCulture, SIRSCritLeucos, Oligurie, DiagnosticLacticAcid, Diagnose, Hypoxie, DiagnosticUrinarySediment, DiagnosticECG\n',
'activity ER Sepsis Triage\n',
'bind ER Sepsis Triage: org:group, Diagnose, Age\n',
'activity Leucocytes\n',
'bind Leucocytes: Leucocytes, org:group, Diagnose, Age\n',
'activity CRP\n',
'bind CRP: CRP, org:group, Diagnose, Age\n',
'activity LacticAcid\n',
'bind LacticAcid: org:group, LacticAcid\n',
'activity IV Antibiotics\n',
'bind IV Antibiotics: org:group\n',
'activity Admission NC\n',
'bind Admission NC: org:group\n',
'activity IV Liquid\n',
'bind IV Liquid: org:group, Diagnose, Age\n',
'activity Release A\n',
'bind Release A: org:group\n',
'activity Release B\n',
'bind Release B: org:group\n',
'activity Return ER\n',
'bind Return ER: org:group\n',
'activity Admission IC\n',
'bind Admission IC: org:group\n',
'CRP: float between 5.0 and 573.0\n',
'InfectionSuspected: true, false\n',
'org:group: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, ?\n',
'DiagnosticBlood: true, false\n',
'DisfuncOrg: true, false\n',
'SIRSCritTachypnea: true, false\n',
'Hypotensie: true, false\n',
'SIRSCritHeartRate: true, false\n',
'Infusion: true, false\n',
'Leucocytes: float between 0.2 and 381.3\n',
'DiagnosticArtAstrup: true, false\n',
'LacticAcid: float between 0.2 and 14.9\n',
'Age: integer between 20 and 90\n',
'DiagnosticIC: true, false\n',
'DiagnosticSputum: false, true\n',
'DiagnosticLiquor: false, true\n',
'DiagnosticOther: false, true\n',
'SIRSCriteria2OrMore: true, false\n',
'DiagnosticXthorax: true, false\n',
'SIRSCritTemperature: true, false\n',
'DiagnosticUrinaryCulture: true, false\n',
'SIRSCritLeucos: false, true\n',
'Oligurie: false, true\n',
'DiagnosticLacticAcid: true, false\n',
'Diagnose: YA, YB, YC, YD, QA, QB, QC, QD, QE, IA, IB, IC, ID, IE, AA, AB, AC, AD, AE, ZA, ZB, ZC, ZD, RA, RB, RC, RD, JA, JB, JC, JD, JE, BA, BB, A, BC, B, BD, C, BE, D, E, F, G, H, I, J, K, L, M, N, SA, O, SB, P, SC, Q, SD, R, S, T, U, V, KA, W, KB, X, KC, Y, KD, Z, KE, CA, CB, CC, CD, CE, TA, TB, TC, TD, LA, LB, LC, LD, LE, DA, DB, DC, DD, DE, UA, UB, UC, UD, MA, MB, MC, MD, ME, EA, EB, EC, ED, EE, VA, VB, VC, VD, NA, NB, NC, ND, FA, FB, FC, FD, FE, WA, WB, WC, WD, OA, OB, OC, OD, OE, GA, GB, GC, GD, GE, XA, XB, XC, XD, PA, PB, PC, PD, PE, HA, HB, HC, HD, HE\n',
'Hypoxie: false, true\n',
'DiagnosticUrinarySediment: true, false\n',
'DiagnosticECG: true, false\n',
'Chain Response[Admission NC, Release B] |A.org:group is K |T.org:group is E |\n',
'Chain Response[Admission NC, Release A] |A.org:group is I |T.org:group is E |133020,957701,s\n',
'Chain Precedence[IV Liquid, Admission NC] |A.org:group is I |T.org:group is A |92,14473,s\n',
'Chain Response[ER Registration, ER Triage] |(A.DiagnosticArtAstrup is false) AND (A.SIRSCritHeartRate is true) AND (A.org:group is A) AND (A.DiagnosticBlood is true) AND (A.DisfuncOrg is false) AND (A.DiagnosticECG is true) AND (A.Age >= 45) AND (A.InfectionSuspected is true) AND (A.DiagnosticLacticAcid is true) AND (A.DiagnosticSputum is true) AND (A.Hypoxie is false) AND (A.DiagnosticUrinaryCulture is true) AND (A.DiagnosticLiquor is false) AND (A.SIRSCritTemperature is true) AND (A.Infusion is true) AND (A.Hypotensie is false) AND (A.DiagnosticUrinarySediment is true) AND (A.Oligurie is false) AND (A.Age <= 80) AND (A.SIRSCritTachypnea is true) AND (A.DiagnosticOther is false) AND (A.SIRSCritLeucos is false) AND (A.DiagnosticIC is true) AND (A.SIRSCriteria2OrMore is true) AND (A.DiagnosticXthorax is true) |T.org:group is C |52,2154,s\n',
'Chain Precedence[Release A, Return ER] |A.org:group is ? |T.org:group is E |1121801,1121801,s\n',
'Chain Precedence[ER Sepsis Triage, IV Antibiotics] |A.org:group is L |T.org:group is L |15,11000,s\n',
'Chain Response[ER Sepsis Triage, IV Antibiotics] |A.org:group is L |T.org:group is L |15,11000,s\n',
'Chain Precedence[Admission IC, Admission NC] |A.org:group is J |T.org:group is J |\n',
'Chain Precedence[IV Antibiotics, Admission NC] |A.org:group is F |T.org:group is A |92,14459,s\n',
'Chain Precedence[Admission NC, Release B] |A.org:group is E |T.org:group is K |48225,48225,s\n',
'Chain Response[Admission IC, Admission NC] |A.org:group is J |T.org:group is J |61534,61534,s\n',
'Chain Response[LacticAcid, Leucocytes] |A.LacticAcid <= 0.8 |T.Leucocytes >= 13.8 |0,2778,m\n',
'Chain Precedence[ER Registration, ER Triage] |A.org:group is C |(T.InfectionSuspected is true) AND (T.SIRSCritTemperature is true) AND (T.DiagnosticLacticAcid is true) AND (T.DiagnosticBlood is true) AND (T.DiagnosticIC is true) AND (T.SIRSCriteria2OrMore is true) AND (T.DiagnosticECG is true) |52,2154,s\n']}
[10]:
# Generate the traces and parse the result produced by clingo
asp.run() # Run accets 1 optional value whether to create file for the ASP generated from given declare model
[11]:
# Save file to xes
asp.to_xes(output_file.as_posix())
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
Cell In [11], line 2
1 # Save file to xes
----> 2 asp.to_xes(output_file.as_posix())
File /home/xhedj/Desktop/Declare4Py/src/Declare4Py/ProcessMiningTasks/ASPLogGeneration/asp_generator.py:577, in AspGenerator.to_xes(self, output_fn)
575 pd_dataframe = self.toPD(self.traces_generated_events)
576 # pm4py.write_xes(self.event_log.log, output_fn)
--> 577 pm4py.write_xes(pd_dataframe, output_fn)
File /usr/local/lib/python3.11/dist-packages/pm4py/write.py:56, in write_xes(log, file_path, case_id_key, extensions, **kwargs)
53 __event_log_deprecation_warning(log)
55 if check_is_pandas_dataframe(log):
---> 56 check_pandas_dataframe_columns(log, case_id_key=case_id_key)
58 file_path = str(file_path)
59 if not (file_path.lower().endswith("xes") or file_path.lower().endswith("xes.gz")):
File /usr/local/lib/python3.11/dist-packages/pm4py/util/pandas_utils.py:285, in check_pandas_dataframe_columns(df, activity_key, case_id_key, timestamp_key)
282 raise Exception("the dataframe should (at least) contain a column of type string for the case identifier and a column of type string for the activity.")
284 if len(timest_columns) < 1:
--> 285 raise Exception("the dataframe should (at least) contain a column of type date")
287 if case_id_key is not None:
288 if case_id_key not in df.columns:
Exception: the dataframe should (at least) contain a column of type date
[ ]:
asp.set_distribution("custom", custom_probabilities=[0.0, 0.9, 0.0, 0.0, 0.1])
[ ]:
asp.run()
[ ]:
asp.to_xes(output_file.as_posix())
[ ]: