igedi / tests /test_feature_extraction.py
Andrea Maldonado
Upgrades to Py310 and gets rid of warnings
9a2643f
Raw
History Blame Contribute Delete
3.72 kB
from gedi.features import EventDataFeatures, compute_features_from_event_data
from gedi.features import _is_feature_class
from datetime import datetime as dt
from pm4py import convert_to_event_log
import pandas as pd
import os
import pytest
import time
def prepare_log():
data = [
{
"case:concept:name": "trace_1",
"concept:name": "event_1",
"time:timestamp": dt(2024, 12, 11, 11, 41, 58),
"lifecycle:transition": "start"
},
{
"case:concept:name": "trace_1",
"concept:name": "event_2",
"time:timestamp": dt(2024, 12, 12, 6, 9, 47),
"lifecycle:transition": "complete"
}
]
df = pd.DataFrame(data)
df["time:timestamp"] = pd.to_datetime(df["time:timestamp"])
return convert_to_event_log(df)
def test_is_feature_class():
PASCAL_INPUT = 'SimpleStats'
SNAKE_INPUT = 'simple_stats'
NON_FEATURE_CLASS = 'ComputedFeatureMemory'
NON_CLASS = "SimpleString"
result = _is_feature_class(PASCAL_INPUT)
assert result == True
result = _is_feature_class(SNAKE_INPUT)
assert result == True
result = _is_feature_class(NON_FEATURE_CLASS)
assert result == False
result = _is_feature_class(NON_CLASS)
assert result == False
def test_EventDataFeatures():
INPUT_PARAMS = {'pipeline_step': 'feature_extraction','input_path': 'data/test', 'feature_params': {'feature_set': ['ratio_variants_per_number_of_traces', 'ratio_most_common_variant', 'ratio_top_10_variants', 'epa_normalized_variant_entropy', 'epa_normalized_sequence_entropy', 'epa_normalized_sequence_entropy_linear_forgetting', 'epa_normalized_sequence_entropy_exponential_forgetting']}, 'output_path': 'output/plots', 'real_eventlog_path': 'data/BaselineED_feat.csv', 'plot_type': 'boxplot', 'font_size': 24, 'boxplot_width': 10}
#INPUT_PARAMS = {'pipeline_step': 'feature_extraction','input_path': 'data/test', 'feature_params': {'feature_set' : ["n_variants", "ratio_most_common_variant", "ratio_top_10_variants", "epa_normalized_variant_entropy", "epa_normalized_sequence_entropy", "epa_normalized_sequence_entropy_linear_forgetting", "epa_normalized_sequence_entropy_exponential_forgetting"]}, 'output_path': 'output/plots', 'real_eventlog_path': 'data/BaselineED_feat.csv', 'plot_type': 'boxplot', 'font_size': 24, 'boxplot_width': 10}
VALIDATION_OUTPUT = {'log': {0: 'gen_el_168', 1: 'gen_el_169'}, 'ratio_most_common_variant': {0: 0.14, 1: 0.26}, 'ratio_top_10_variants': {0: 0.57, 1: 0.68}, 'epa_normalized_variant_entropy': {0: 0.69, 1: 0.65}, 'epa_normalized_sequence_entropy': {0: 0.62, 1: 0.49}, 'epa_normalized_sequence_entropy_linear_forgetting': {0: 0.06, 1: 0.06}, 'epa_normalized_sequence_entropy_exponential_forgetting': {0: 0.26, 1: 0.21}, 'ratio_variants_per_number_of_traces': {0: 0.44, 1: 0.32}}
features = EventDataFeatures(ft_params=INPUT_PARAMS)
result = features.feat.round(2).to_dict()
assert result == VALIDATION_OUTPUT
def test_compute_features_from_event_data_log():
FEATURE_SET =['n_traces','trace_len_min','ratio_most_common_variant', 'n_unique_activities', 'n_unique_start_activities',
'n_unique_end_activities', 'eventropy_trace', 'epa_variant_entropy']
result = compute_features_from_event_data(feature_set=FEATURE_SET, event_data=prepare_log())
assert result.keys() == set(FEATURE_SET)
assert result == {'n_traces': 1, 'trace_len_min': 2, 'ratio_most_common_variant': 1.0, 'n_unique_activities': 2, 'n_unique_start_activities': 1, 'n_unique_end_activities': 1, 'eventropy_trace': -0.0, 'epa_variant_entropy': 0.0}