{ "cells": [ { "cell_type": "markdown", "id": "5279e90c", "metadata": {}, "source": [ "# Managing Event Logs\n", "\n", "This tutorial will go through the steps necessary to import and manage an event log.\n", "\n", "## The `D4PyEventLog` class\n", "\n", "The `Declare4Py.D4PyEventLog.D4PyEventLog` class is responsible for managing with `.xes` event log. It methods utilities for importing an event log, retrieving useful information, exporting it in a `.xes` format or converting it in a Pandas dataframe and computing the frequent itemsets of activities or other attributes.\n", "\n", "We show how to instantiate a `D4PyEventLog`, notice that the name of the case id is required." ] }, { "cell_type": "code", "execution_count": 1, "id": "8b6c9e04", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/lib/python3/dist-packages/pyparsing.py:108: DeprecationWarning: module 'sre_constants' is deprecated\n", " import sre_constants\n", "/usr/local/lib/python3.11/dist-packages/lark/utils.py:163: DeprecationWarning: module 'sre_parse' is deprecated\n", " import sre_parse\n" ] } ], "source": [ "import os\n", "from Declare4Py.D4PyEventLog import D4PyEventLog\n", "\n", "event_log: D4PyEventLog = D4PyEventLog(case_name=\"case:concept:name\")" ] }, { "cell_type": "markdown", "id": "1225a100", "metadata": {}, "source": [ "The next step is the parsing of the log with the `parse_xes_log` function. Logs can be passed both in the `.xes` or `xes.gz` formats." ] }, { "cell_type": "code", "execution_count": 6, "id": "e5ae55fa", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "458ab9026b174170ba9fc57944b881bf", "version_major": 2, "version_minor": 0 }, "text/plain": [ "parsing log, completed traces :: 0%| | 0/1050 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
InfectionSuspectedorg:groupDiagnosticBloodDisfuncOrgSIRSCritTachypneaHypotensieSIRSCritHeartRateInfusionDiagnosticArtAstrupconcept:name...DiagnosticLacticAcidlifecycle:transitionDiagnoseHypoxieDiagnosticUrinarySedimentDiagnosticECGLeucocytesCRPLacticAcidcase:concept:name
0TrueATrueTrueTrueTrueTrueTrueTrueER Registration...TruecompleteAFalseTrueTrueNaNNaNNaNA
1NaNBNaNNaNNaNNaNNaNNaNNaNLeucocytes...NaNcompleteNaNNaNNaNNaN9.6NaNNaNA
2NaNBNaNNaNNaNNaNNaNNaNNaNCRP...NaNcompleteNaNNaNNaNNaNNaN21.0NaNA
3NaNBNaNNaNNaNNaNNaNNaNNaNLacticAcid...NaNcompleteNaNNaNNaNNaNNaNNaN2.2A
4NaNCNaNNaNNaNNaNNaNNaNNaNER Triage...NaNcompleteNaNNaNNaNNaNNaNNaNNaNA
\n", "

5 rows × 32 columns

\n", "" ], "text/plain": [ " InfectionSuspected org:group DiagnosticBlood DisfuncOrg SIRSCritTachypnea \\\n", "0 True A True True True \n", "1 NaN B NaN NaN NaN \n", "2 NaN B NaN NaN NaN \n", "3 NaN B NaN NaN NaN \n", "4 NaN C NaN NaN NaN \n", "\n", " Hypotensie SIRSCritHeartRate Infusion DiagnosticArtAstrup concept:name \\\n", "0 True True True True ER Registration \n", "1 NaN NaN NaN NaN Leucocytes \n", "2 NaN NaN NaN NaN CRP \n", "3 NaN NaN NaN NaN LacticAcid \n", "4 NaN NaN NaN NaN ER Triage \n", "\n", " ... DiagnosticLacticAcid lifecycle:transition Diagnose Hypoxie \\\n", "0 ... True complete A False \n", "1 ... NaN complete NaN NaN \n", "2 ... NaN complete NaN NaN \n", "3 ... NaN complete NaN NaN \n", "4 ... NaN complete NaN NaN \n", "\n", " DiagnosticUrinarySediment DiagnosticECG Leucocytes CRP LacticAcid \\\n", "0 True True NaN NaN NaN \n", "1 NaN NaN 9.6 NaN NaN \n", "2 NaN NaN NaN 21.0 NaN \n", "3 NaN NaN NaN NaN 2.2 \n", "4 NaN NaN NaN NaN NaN \n", "\n", " case:concept:name \n", "0 A \n", "1 A \n", "2 A \n", "3 A \n", "4 A \n", "\n", "[5 rows x 32 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "event_log.to_dataframe()\n", "event_log.get_log().head()" ] }, { "cell_type": "markdown", "id": "4f8dd30a", "metadata": {}, "source": [ "### The `to_eventlog` method\n", "\n", "The event log can be converted in a EventLog with the `to_eventlog` method." ] }, { "cell_type": "code", "execution_count": 15, "id": "4a895b28", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.11/dist-packages/pm4py/utils.py:486: UserWarning: the EventLog class has been deprecated and will be removed in a future release.\n", " warnings.warn(\"the EventLog class has been deprecated and will be removed in a future release.\")\n" ] }, { "data": { "text/plain": [ "[{'attributes': {'concept:name': 'A'}, 'events': [{'InfectionSuspected': True, 'org:group': 'A', 'DiagnosticBlood': True, 'DisfuncOrg': True, 'SIRSCritTachypnea': True, 'Hypotensie': True, 'SIRSCritHeartRate': True, 'Infusion': True, 'DiagnosticArtAstrup': True, 'concept:name': 'ER Registration', 'Age': 85.0, 'DiagnosticIC': True, 'DiagnosticSputum': False, 'DiagnosticLiquor': False, 'DiagnosticOther': False, 'SIRSCriteria2OrMore': True, 'DiagnosticXthorax': True, 'SIRSCritTemperature': True, 'time:timestamp': Timestamp('2014-10-22 09:15:41+0000', tz='UTC'), 'DiagnosticUrinaryCulture': True, 'SIRSCritLeucos': False, 'Oligurie': False, 'DiagnosticLacticAcid': True, 'lifecycle:transition': 'complete', 'Diagnose': 'A', 'Hypoxie': False, 'DiagnosticUrinarySediment': True, 'DiagnosticECG': True, 'Leucocytes': nan, 'CRP': nan, 'LacticAcid': nan}, '..', {'InfectionSuspected': nan, 'org:group': 'E', 'DiagnosticBlood': nan, 'DisfuncOrg': nan, 'SIRSCritTachypnea': nan, 'Hypotensie': nan, 'SIRSCritHeartRate': nan, 'Infusion': nan, 'DiagnosticArtAstrup': nan, 'concept:name': 'Release A', 'Age': nan, 'DiagnosticIC': nan, 'DiagnosticSputum': nan, 'DiagnosticLiquor': nan, 'DiagnosticOther': nan, 'SIRSCriteria2OrMore': nan, 'DiagnosticXthorax': nan, 'SIRSCritTemperature': nan, 'time:timestamp': Timestamp('2014-11-02 14:15:00+0000', tz='UTC'), 'DiagnosticUrinaryCulture': nan, 'SIRSCritLeucos': nan, 'Oligurie': nan, 'DiagnosticLacticAcid': nan, 'lifecycle:transition': 'complete', 'Diagnose': nan, 'Hypoxie': nan, 'DiagnosticUrinarySediment': nan, 'DiagnosticECG': nan, 'Leucocytes': nan, 'CRP': nan, 'LacticAcid': nan}]}, '....', {'attributes': {'concept:name': 'LNA'}, 'events': [{'InfectionSuspected': False, 'org:group': 'L', 'DiagnosticBlood': False, 'DisfuncOrg': False, 'SIRSCritTachypnea': False, 'Hypotensie': False, 'SIRSCritHeartRate': False, 'Infusion': False, 'DiagnosticArtAstrup': False, 'concept:name': 'ER Registration', 'Age': 50.0, 'DiagnosticIC': False, 'DiagnosticSputum': False, 'DiagnosticLiquor': False, 'DiagnosticOther': False, 'SIRSCriteria2OrMore': False, 'DiagnosticXthorax': False, 'SIRSCritTemperature': False, 'time:timestamp': Timestamp('2014-12-03 09:50:28+0000', tz='UTC'), 'DiagnosticUrinaryCulture': False, 'SIRSCritLeucos': False, 'Oligurie': False, 'DiagnosticLacticAcid': False, 'lifecycle:transition': 'complete', 'Diagnose': nan, 'Hypoxie': False, 'DiagnosticUrinarySediment': False, 'DiagnosticECG': False, 'Leucocytes': nan, 'CRP': nan, 'LacticAcid': nan}, '..', {'InfectionSuspected': nan, 'org:group': 'L', 'DiagnosticBlood': nan, 'DisfuncOrg': nan, 'SIRSCritTachypnea': nan, 'Hypotensie': nan, 'SIRSCritHeartRate': nan, 'Infusion': nan, 'DiagnosticArtAstrup': nan, 'concept:name': 'ER Sepsis Triage', 'Age': nan, 'DiagnosticIC': nan, 'DiagnosticSputum': nan, 'DiagnosticLiquor': nan, 'DiagnosticOther': nan, 'SIRSCriteria2OrMore': nan, 'DiagnosticXthorax': nan, 'SIRSCritTemperature': nan, 'time:timestamp': Timestamp('2014-12-03 09:54:39+0000', tz='UTC'), 'DiagnosticUrinaryCulture': nan, 'SIRSCritLeucos': nan, 'Oligurie': nan, 'DiagnosticLacticAcid': nan, 'lifecycle:transition': 'complete', 'Diagnose': nan, 'Hypoxie': nan, 'DiagnosticUrinarySediment': nan, 'DiagnosticECG': nan, 'Leucocytes': nan, 'CRP': nan, 'LacticAcid': nan}]}]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "event_log.to_eventlog()\n", "event_log.get_log()" ] }, { "cell_type": "markdown", "id": "7c3e6fdf", "metadata": {}, "source": [ "### The `save_xes` method\n", "\n", "The event log can be saved in `xes` format with the `save_xes` method." ] }, { "cell_type": "code", "execution_count": 16, "id": "3cf82cee", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3eddcfdd9073499b96d49bd0a4fdc1b4", "version_major": 2, "version_minor": 0 }, "text/plain": [ "exporting log, completed traces :: 0%| | 0/1050 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
supportitemsetslength
01.000000(concept:name_ER Triage)1
11.000000(concept:name_ER Registration)1
20.999048(concept:name_ER Sepsis Triage)1
30.963810(concept:name_Leucocytes)1
40.959048(concept:name_CRP)1
50.819048(concept:name_LacticAcid)1
61.000000(concept:name_ER Triage, concept:name_ER Regis...2
70.999048(concept:name_ER Sepsis Triage, concept:name_E...2
80.999048(concept:name_ER Triage, concept:name_ER Sepsi...2
90.999048(concept:name_ER Triage, concept:name_ER Sepsi...3
100.963810(concept:name_Leucocytes, concept:name_ER Regi...2
110.963810(concept:name_Leucocytes, concept:name_ER Triage)2
120.962857(concept:name_Leucocytes, concept:name_ER Seps...2
130.963810(concept:name_Leucocytes, concept:name_ER Tria...3
140.962857(concept:name_Leucocytes, concept:name_ER Seps...3
150.962857(concept:name_Leucocytes, concept:name_ER Seps...3
170.959048(concept:name_CRP, concept:name_ER Registration)2
180.959048(concept:name_ER Triage, concept:name_CRP)2
190.958095(concept:name_Leucocytes, concept:name_CRP)2
200.958095(concept:name_ER Sepsis Triage, concept:name_CRP)2
210.959048(concept:name_ER Triage, concept:name_CRP, con...3
220.958095(concept:name_Leucocytes, concept:name_CRP, co...3
230.958095(concept:name_Leucocytes, concept:name_CRP, co...3
250.958095(concept:name_ER Triage, concept:name_ER Sepsi...3
260.958095(concept:name_ER Sepsis Triage, concept:name_C...3
270.957143(concept:name_Leucocytes, concept:name_ER Seps...3
320.819048(concept:name_CRP, concept:name_LacticAcid)2
330.819048(concept:name_Leucocytes, concept:name_LacticA...2
340.819048(concept:name_ER Registration, concept:name_La...2
350.819048(concept:name_ER Triage, concept:name_LacticAcid)2
360.818095(concept:name_ER Sepsis Triage, concept:name_L...2
370.819048(concept:name_Leucocytes, concept:name_CRP, co...3
380.819048(concept:name_ER Registration, concept:name_CR...3
390.819048(concept:name_ER Triage, concept:name_CRP, con...3
400.818095(concept:name_ER Sepsis Triage, concept:name_C...3
410.819048(concept:name_Leucocytes, concept:name_ER Regi...3
420.819048(concept:name_Leucocytes, concept:name_ER Tria...3
430.818095(concept:name_Leucocytes, concept:name_ER Seps...3
440.819048(concept:name_ER Triage, concept:name_ER Regis...3
450.818095(concept:name_ER Sepsis Triage, concept:name_E...3
460.818095(concept:name_ER Triage, concept:name_ER Sepsi...3
\n", "" ], "text/plain": [ " support itemsets length\n", "0 1.000000 (concept:name_ER Triage) 1\n", "1 1.000000 (concept:name_ER Registration) 1\n", "2 0.999048 (concept:name_ER Sepsis Triage) 1\n", "3 0.963810 (concept:name_Leucocytes) 1\n", "4 0.959048 (concept:name_CRP) 1\n", "5 0.819048 (concept:name_LacticAcid) 1\n", "6 1.000000 (concept:name_ER Triage, concept:name_ER Regis... 2\n", "7 0.999048 (concept:name_ER Sepsis Triage, concept:name_E... 2\n", "8 0.999048 (concept:name_ER Triage, concept:name_ER Sepsi... 2\n", "9 0.999048 (concept:name_ER Triage, concept:name_ER Sepsi... 3\n", "10 0.963810 (concept:name_Leucocytes, concept:name_ER Regi... 2\n", "11 0.963810 (concept:name_Leucocytes, concept:name_ER Triage) 2\n", "12 0.962857 (concept:name_Leucocytes, concept:name_ER Seps... 2\n", "13 0.963810 (concept:name_Leucocytes, concept:name_ER Tria... 3\n", "14 0.962857 (concept:name_Leucocytes, concept:name_ER Seps... 3\n", "15 0.962857 (concept:name_Leucocytes, concept:name_ER Seps... 3\n", "17 0.959048 (concept:name_CRP, concept:name_ER Registration) 2\n", "18 0.959048 (concept:name_ER Triage, concept:name_CRP) 2\n", "19 0.958095 (concept:name_Leucocytes, concept:name_CRP) 2\n", "20 0.958095 (concept:name_ER Sepsis Triage, concept:name_CRP) 2\n", "21 0.959048 (concept:name_ER Triage, concept:name_CRP, con... 3\n", "22 0.958095 (concept:name_Leucocytes, concept:name_CRP, co... 3\n", "23 0.958095 (concept:name_Leucocytes, concept:name_CRP, co... 3\n", "25 0.958095 (concept:name_ER Triage, concept:name_ER Sepsi... 3\n", "26 0.958095 (concept:name_ER Sepsis Triage, concept:name_C... 3\n", "27 0.957143 (concept:name_Leucocytes, concept:name_ER Seps... 3\n", "32 0.819048 (concept:name_CRP, concept:name_LacticAcid) 2\n", "33 0.819048 (concept:name_Leucocytes, concept:name_LacticA... 2\n", "34 0.819048 (concept:name_ER Registration, concept:name_La... 2\n", "35 0.819048 (concept:name_ER Triage, concept:name_LacticAcid) 2\n", "36 0.818095 (concept:name_ER Sepsis Triage, concept:name_L... 2\n", "37 0.819048 (concept:name_Leucocytes, concept:name_CRP, co... 3\n", "38 0.819048 (concept:name_ER Registration, concept:name_CR... 3\n", "39 0.819048 (concept:name_ER Triage, concept:name_CRP, con... 3\n", "40 0.818095 (concept:name_ER Sepsis Triage, concept:name_C... 3\n", "41 0.819048 (concept:name_Leucocytes, concept:name_ER Regi... 3\n", "42 0.819048 (concept:name_Leucocytes, concept:name_ER Tria... 3\n", "43 0.818095 (concept:name_Leucocytes, concept:name_ER Seps... 3\n", "44 0.819048 (concept:name_ER Triage, concept:name_ER Regis... 3\n", "45 0.818095 (concept:name_ER Sepsis Triage, concept:name_E... 3\n", "46 0.818095 (concept:name_ER Triage, concept:name_ER Sepsi... 3" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frequent_itemsets = event_log.compute_frequent_itemsets(min_support=0.8, case_id_col=event_log.get_case_name(), categorical_attributes=['concept:name'], algorithm='fpgrowth', len_itemset=3)\n", "frequent_itemsets" ] }, { "cell_type": "code", "execution_count": null, "id": "732867e4-cc9c-472b-ad0c-75ebf5d49912", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" }, "vscode": { "interpreter": { "hash": "05d4b7c3cd0aad81aa9df4db91d3eeeb2841d831664bc3cb6ce2ef5b755f059a" } } }, "nbformat": 4, "nbformat_minor": 5 }