Skip to content
Snippets Groups Projects
Commit 284b3407 authored by Aleksandra Dimitrova's avatar Aleksandra Dimitrova
Browse files

added xes functionality

parent 3177f3c5
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
No preview for this file type
......@@ -3,6 +3,12 @@ import simplesimmodel as model
import numpy as np
from collections import OrderedDict
import simpy
from pm4py.objects.log.exporter.xes import exporter as xes_exporter
from pm4py.objects.log.importer.xes import importer as xes_importer
from pm4py.objects.log.obj import EventLog
from pm4py.objects.log.obj import Trace
from pm4py.objects.log.obj import Event
import os
"""
Event log generator for our simulation model:
......@@ -22,6 +28,7 @@ def add_start_event(process, event_id, case_id, activity, start_timestamp):
}
process.event_counter += 1
def add_end_event(process, event_id, end_timestamp):
event = process.event_log[event_id]
event['EndTimestamp'] = end_timestamp
......@@ -31,15 +38,68 @@ def export_to_csv(process, file_path):
event_log_df = pd.DataFrame.from_dict(process.event_log)
event_log_df.to_csv(file_path, index=False)
def export_to_xes(process, file_path):
# Use appropriate code to export to XES format
pass
event_log = process.event_log
# Create an empty event log object
event_log_obj = EventLog()
# Iterate over each event in the event log
for event_data in event_log:
# Create a new trace
trace = Trace()
# Create a new event
event = Event()
# Set the attributes of the event based on the dictionary values
event['Activity'] = event_data['Activity']
event['StartTimestamp'] = event_data['StartTimestamp']
event['EndTimestamp'] = event_data['EndTimestamp']
event['CaseID'] = event_data['CaseID']
# Add the event to the trace
trace.append(event)
# Add the trace to the event log
event_log_obj.append(trace)
# Export the event log to XES format
xes_exporter.apply(event_log_obj, file_path)
def convert_to_dataframe(name):
file_path = r"Frontend/upload/" + name
# print(path)
file_extension = os.path.splitext(file_path)[1].lower()
if file_extension == '.csv':
event_log_df = pd.read_csv(file_path)
elif file_extension == '.xes':
# Read the XES file
event_log = xes_importer.apply(file_path)
# Extract the event attributes and create a list of dictionaries
event_data = []
for trace in event_log:
for event in trace:
event_data.append(event)
# Create a pandas DataFrame from the event data
event_log_df = pd.DataFrame(event_data)
else:
print(f"Unsupported file type: {file_extension}")
# print(event_log_df)
return event_log_df
def get_active_cases(name):
path = r"Frontend/upload/" + name + ".csv"
print(path)
event_log = pd.read_csv(path)
active_cases = event_log.groupby('CaseID').filter(lambda x: 'order completed' not in x['Activity'].values)['CaseID'].unique().tolist()
event_log_df = convert_to_dataframe(name)
active_cases = event_log_df.groupby('CaseID').filter(lambda x: 'order completed' not in x['Activity'].values)['CaseID'].unique().tolist()
print(active_cases)
return active_cases
......@@ -93,8 +153,7 @@ def get_state(case_id,name):
'order completed': 15,
}
path = r"Frontend/upload/" + name + ".csv"
event_log = pd.read_csv(path)
event_log = convert_to_dataframe(name)
# Sort the event log by case ID and start timestamp
event_log.sort_values(by=['CaseID', 'StartTimestamp'], inplace=True)
......@@ -180,6 +239,8 @@ def generate_event_log(time):
env.process(model.run_process(env, business_process))
env.run(until = time)
export_to_csv(business_process, r'Frontend/export/eventlog.csv')
export_to_xes(business_process, r'Frontend/export/eventlog.xes')
def show_active_cases(name):
activity_mapping = {
......@@ -218,11 +279,8 @@ def show_active_cases(name):
def main():
generate_event_log(10000)
name = "optis"
print(get_active_cases(name))
print(show_active_cases(name))
# generate_event_log(10000)
print(get_state(5, "eventlog.csv"))
if __name__ == "__main__":
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment