aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/metrics_plot/utils
diff options
context:
space:
mode:
authorLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-07-10 10:56:00 -0400
committerLibravatar 20001LastOrder <boqi.chen@mail.mcgill.ca>2019-07-10 10:56:00 -0400
commit991dacefdb8f78fccc359d3d2ec836dc2e7fc80a (patch)
tree6b18aa59c5f711a845aa9e3e5cf3fd3632ad7a33 /Metrics/Metrics-Calculation/metrics_plot/utils
parentadd sample domain for measuring realistic metrics (diff)
downloadVIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.tar.gz
VIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.tar.zst
VIATRA-Generator-991dacefdb8f78fccc359d3d2ec836dc2e7fc80a.zip
measurements for the different violation types, comparison for differenct generation config
Diffstat (limited to 'Metrics/Metrics-Calculation/metrics_plot/utils')
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py43
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py2
-rw-r--r--Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py7
3 files changed, 49 insertions, 3 deletions
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py
new file mode 100644
index 00000000..6e707108
--- /dev/null
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/DistributionMetrics.py
@@ -0,0 +1,43 @@
1from scipy import stats
2from scipy.spatial import distance
3
4def ks_distance(samples1, samples2):
5 value, p = stats.ks_2samp(samples1, samples2)
6 return (value, p)
7
8def js_distance(samples1, samples2):
9 map1 = fromSamples(samples1)
10 map2 = fromSamples(samples2)
11 allKeys = set(map1.keys()) | set(map2.keys())
12 dist1 = distributionFromMap(map1, allKeys)
13 dist2 = distributionFromMap(map2, allKeys)
14 return distance.jensenshannon(dist1, dist2, 2)
15
16def euclidean_distance(samples1, samples2):
17 map1 = fromSamples(samples1)
18 map2 = fromSamples(samples2)
19 allKeys = set(map1.keys()) | set(map2.keys())
20 dist1 = distributionFromMap(map1, allKeys)
21 dist2 = distributionFromMap(map2, allKeys)
22 distance = 0
23 for i in range(len(dist2)):
24 distance += pow(dist1[i] - dist2[i], 2)
25 return pow(distance, 0.5)
26
27def fromSamples(samples):
28 m = {}
29 length = len(samples)
30 for sample in samples:
31 value = m.get(sample, 0)
32 m[sample] = value + 1
33 for key in list(m.keys()):
34 m[key] /= length
35 return m
36
37def distributionFromMap(m, allKeys):
38 dist = []
39 for key in allKeys:
40 value = m.get(key, 0)
41 dist.append(value)
42 return dist
43
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
index 13754e80..827c2a5e 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/GraphType.py
@@ -11,13 +11,13 @@ class GraphCollection:
11 self.nas = [] 11 self.nas = []
12 self.mpcs = [] 12 self.mpcs = []
13 self.name = name 13 self.name = name
14 self.size = number
14 models = reader.readmultiplefiles(path, number, shouldShuffle) 15 models = reader.readmultiplefiles(path, number, shouldShuffle)
15 for i in range(len(models)): 16 for i in range(len(models)):
16 contents, out_d, na, mpc = reader.getmetrics(models[i]) 17 contents, out_d, na, mpc = reader.getmetrics(models[i])
17 self.out_ds.append(out_d) 18 self.out_ds.append(out_d)
18 self.nas.append(na) 19 self.nas.append(na)
19 self.mpcs.append(mpc) 20 self.mpcs.append(mpc)
20 print(len(self.out_ds))
21 21
22#Graph stat for one graph 22#Graph stat for one graph
23class GraphStat: 23class GraphStat:
diff --git a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
index e0402519..b27a0ffc 100644
--- a/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
+++ b/Metrics/Metrics-Calculation/metrics_plot/utils/readCSV.py
@@ -24,9 +24,12 @@ def readcsvfile(filename):
24 # meta models are string 24 # meta models are string
25 elif(arr[0] == constants.METAMODEL): 25 elif(arr[0] == constants.METAMODEL):
26 contents[constants.METAMODEL] = arr[1:] 26 contents[constants.METAMODEL] = arr[1:]
27 # all other contants are integer 27 # NA and OD are integers
28 else: 28 else:
29 contents[arr[0]] = list(map(int, arr[1:])) 29 try:
30 contents[arr[0]] = list(map(int, arr[1:]))
31 except:
32 print(arr[0], ' is not integer')
30 f.close() 33 f.close()
31 return contents 34 return contents
32 35