-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathgenerate_baseline_with_tcloseness.py
More file actions
83 lines (71 loc) · 3.08 KB
/
Copy pathgenerate_baseline_with_tcloseness.py
File metadata and controls
83 lines (71 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import sys
import csv
import datetime
from scipy.stats import wasserstein_distance
class excel_semicolon(csv.excel):
delimiter = ';'
def violatesTCloseness(distributionActivity, distributionEquivalenceClass, t):
maxDifference = max(distributionActivity) - min(distributionActivity)
if maxDifference == 0.0: #All annotations have the same value(most likely= 0.0)
return False
if (wasserstein_distance(distributionActivity,distributionEquivalenceClass)/maxDifference) >= t:
return True
else:
return False
genericFilePath = sys.argv[1]
tString = sys.argv[2]
t = float(tString)
caseIdColName = "Case ID"
variantColName = "Variant"
activityColName = "Activity"
for k in range(8,9):
k = 2**k
kString = str(k)
filePath = genericFilePath + kString + "_duration.csv"
writeFilePath = filePath.replace("_duration_pretsa_baseline_k%s_duration.csv" % kString,"_duration_pretsa_baseline_k%s_t%s.csv" % (kString,str(t)))
timeStampColName = "Complete Timestamp"
activityDistributions = {}
with open(filePath) as csvfile:
reader = csv.DictReader(csvfile, delimiter=";")
variantsDict = {}
currentCase = ""
eventsBefore = 0
for row in reader:
eventsBefore += 1
currentCase = row[caseIdColName]
currentActivity = row[activityColName]
currentVariant = row[variantColName]
duration = float(row["Duration"])
if currentActivity in activityDistributions:
activityDistributions[currentActivity].append(duration)
else:
activityDistributions[currentActivity] = [duration]
if row[variantColName] in variantsDict:
variantDistributions = variantsDict.get(currentVariant)
else:
variantDistributions = {}
if currentActivity in variantDistributions:
variantDistributions[currentActivity].append(duration)
else:
variantDistributions[currentActivity] = [duration]
variantsDict[currentVariant] = variantDistributions
variantsViolatingTcloseness = set()
for variant in variantsDict.keys():
for activity in variantsDict[variant].keys():
if violatesTCloseness(activityDistributions[activity],variantsDict[variant][activity],t):
variantsViolatingTcloseness.add(variant)
with open(filePath) as csvfile:
with open(writeFilePath,'w') as writeFile:
reader = csv.DictReader(csvfile,delimiter=";")
fieldNamesWrite = reader.fieldnames
writer = csv.DictWriter(writeFile, fieldnames=fieldNamesWrite,dialect=excel_semicolon)
writer.writeheader()
eventsAfter = 0
next(reader)
for row in reader:
if not row[variantColName] in variantsViolatingTcloseness:
eventsAfter += 1
writer.writerow(row)
print("Events before " + str(eventsBefore))
print("Events after " + str(eventsAfter))
print("Remaining " + str(eventsAfter/eventsBefore))