aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/BoxPlot.ipynb
blob: 83ccfd67bc6eae5b4b4709ddb5cd6283d6c75e1f (plain) (blame)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import statistics\n",
    "import os\n",
    "import sys\n",
    "lib_path = os.path.abspath(os.path.join('..','..', '..', 'utils'))\n",
    "sys.path.append(lib_path)\n",
    "from GraphType import GraphStat\n",
    "import readCSV as reader\n",
    "import constants\n",
    "import DistributionMetrics as metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "def getModels(folderName, numberOfModels):\n",
    "    filenames = reader.readmultiplefiles(folderName, numberOfModels, False)\n",
    "    graphStats = [GraphStat(filename) for filename in filenames]\n",
    "    return graphStats"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [],
   "source": [
    "domain = 'yakindu'\n",
    "mpc_guide = getModels('../input/{}/MPC/'.format(domain), 100)\n",
    "na_guide = getModels('../input/{}/NodeActivity/'.format(domain), 100)\n",
    "od_guide = getModels('../input/{}/OutDegree/'.format(domain), 100)\n",
    "nt_guide = getModels('../input/{}/NodeType/'.format(domain), 100)\n",
    "composite_guide = getModels('../input/{}/Composite/'.format(domain), 100)\n",
    "composite_no_violations_guide = getModels('../input/{}/Composite_Without_Violations/'.format(domain), 100)\n",
    "violations_guide = getModels('../input/{}/Violations/'.format(domain), 100)\n",
    "human = getModels('../input/{}/Human/'.format(domain), 304)\n",
    "model_types = [human, composite_guide, composite_no_violations_guide, mpc_guide, na_guide, od_guide, nt_guide, violations_guide]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [],
   "source": [
    "if domain == 'yakindu':\n",
    "    type_map = {'Entry': 0.04257802080554814, 'Choice': 0.1267671379034409, 'State': 0.1596092291277674, 'Transition': 0.6138636969858629, 'Statechart': 0.010136036276340358, 'Region': 0.04467858095492131, 'Exit': 0.0018338223526273673, 'FinalState': 0.0005334755934915977}\n",
    "elif domain == 'ecore':\n",
    "    type_map = {'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}\n",
    "elif domain == 'github':\n",
    "    type_map = {'Project': 0.012636538873420432, 'Commit': 0.5525808524309276, 'User': 0.05847076461769116, 'Issue': 0.12743628185907047, 'PullRequest': 0.07560505461554937, 'IssueEvent': 0.17327050760334123}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import rep\n",
    "mpc_rep = getModels('../input/{}/MPC_REP/'.format(domain), 1)\n",
    "na_rep = getModels('../input/{}/NA_REP/'.format(domain), 1)\n",
    "od_rep = getModels('../input/{}/OUT_DEGREE_REP/'.format(domain), 1)\n",
    "rep = mpc_rep[0]\n",
    "rep.na = na_rep[0].na\n",
    "rep.out_d = od_rep[0].out_d\n",
    "rep.nodeTypeStat = type_map"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Helper Functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_ks(dist1, dist2):\n",
    "    value, p= metrics.ks_distance(dist1, dist2)\n",
    "    return value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mkdir(path):\n",
    "    if not os.path.exists(path):\n",
    "        os.makedirs(path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot Config"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {},
   "outputs": [],
   "source": [
    "output_path = '../output/{}/'.format(domain)\n",
    "mkdir(output_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Draw diagrams"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [],
   "source": [
    "def drawBoxDiagram(title, target, types, distance_func, label_position):\n",
    "    distances = []\n",
    "    for distributions in types:\n",
    "        distances.append([distance_func(target, distribution) for distribution in distributions])\n",
    "    fig, ax1 = plt.subplots()\n",
    "    fig.set_size_inches(5, 2)\n",
    "    result = plt.boxplot(distances)\n",
    "    ax1.xaxis.set_ticks_position(label_position)     \n",
    "    texts = ax1.set_xticklabels(labels, rotation=90, fontsize=12)\n",
    "    plt.savefig('{}/{}.jpg'.format(output_path, title), dpi=500, bbox_inches=\"tight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw mpc\n",
    "mpc_types = []\n",
    "labels = ['Hum', 'Comb+V', 'Comb-V', 'MPC', 'NA', 'OD',  'NTD', 'VIO']\n",
    "for models in model_types:\n",
    "        mpc_types.append([model.mpc for model in models])\n",
    "drawBoxDiagram('MPC', rep.mpc, mpc_types, calculate_ks, 'top')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAATwAAAB/CAYAAAByvn5wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAKlElEQVR4nO3dT2gc5x3G8e9TJ+mlia211Uv8Rzk4oFgEAotTqKARxJaTg00hbS0o9CBq7OL00FJwESROii7JoZcmpAH1UqjSNIdWFBXbtC5UhQTLtBTLwkW4DRE5RHFk51DSJOTXgyV3vV5pJ5pZ7ey+zwcW7cy8O/Ozd/fZ952dmVVEYGaWgi+0uwAzs83iwDOzZDjwzCwZDjwzS4YDz8yS4cAzs2R0fOBJOtbuGqA8dYBrWYtraSylWjo+8ICyPFllqQNcy1pcS2PJ1NINgWdmlonadabFjh07oq+vL/d6lpaW6O3tzV9Ql9QBrmUtrqWxbqvl4sWL70dEw5XclWvNOfT19TE7O9uuzZtZl5L09lrLPKQ1s2Q48MwsGQ48M0tG2/bhmVnaJGVqV+QXq5l6eJIOSboiaUHSqTXafFPSZUlzkn5VWIVm1pUi4o5bo/lFatrDk7QFeAk4ACwCFyRNRcTlmjZ7gR8DX42IZUlfLrRKM7MCZOnh7QcWIuJqRHwMvAYcqWvzXeCliFgGiIj3ii3TzCy/LIF3P/BOzfTiyrxaDwIPSvqrpDclHSqqQDOzomT50qLRnsX6gfVdwF7gMWAn8BdJAxFx/bYV3Twx+BjA7t27P3exZmZ5ZOnhLQK7aqZ3Au82aPO7iPgkIv4FXOFmAN4mIl6NiGpEVMtyKouZpSNL4F0A9kp6QNI9wFFgqq7Nb4EhAEk7uDnEvVpkoWZmeTUNvIj4FDgJnAHmgdcjYk7S85IOrzQ7A1yTdBk4D/woIq61qmgzs41o29VSqtVq+OIBZlZLUu5j7yRdjIhqo2U+tczMkuHAM7NkOPDMLBkOPDNLhgPPzJLhwDOzZDjwzCwZDjwzS4YDz8yS4cAzs2Q48MwsGQ48M0uGA8/MkuHAM7NkOPDMLBkOPDPbFJVKBUnr3oB1l1cqlVw1ZPkRHzOz3JaXl4u4uGeux7uHZ2bJcOCZWTIceGaWDAeemSXDgWdmyXDgmVkyMgWepEOSrkhakHRqnXZPSQpJDX8T0sysnZoGnqQtwEvAE8BDwIikhxq0uxf4PvBW0UWamRUhSw9vP7AQEVcj4mPgNeBIg3Y/AV4APiqwPjOzwmQJvPuBd2qmF1fm3SLpEWBXRPx+vRVJOiZpVtLs0tLS5y7WzCyPLIHX6FyOW+eHSPoC8FPgh81WFBGvRkQ1Iqq9vb3ZqzQzK0CWwFsEdtVM7wTerZm+FxgA/izp38BXgCl/cWFmZZMl8C4AeyU9IOke4CgwtbowIm5ExI6I6IuIPuBN4HBEzLakYjOzDWoaeBHxKXASOAPMA69HxJyk5yUdbnWBZmZFyXR5qIiYBqbr5j2zRtvH8pdlZlY8n2lhZslw4JlZMhx4ZpYMB56ZJcOBZ2bJ8I/4mNmmiGfvg9Nb868jBweemW0KPfdhIb9aFqc3/ngPac0sGQ48M0uGA8/MkuHAM7NkOPDMLBkOPDNLhgPPzJLhwDOzZDjwzCwZDjwzS4YDz8yS4cAzs2Q48MwsGQ48M0uGA8/MkpEp8CQdknRF0oKkUw2W/0DSZUn/kPRHSXuKL9XMLJ+mgSdpC/AS8ATwEDAi6aG6Zn8DqhHxMPAG8ELRhZqZ5ZWlh7cfWIiIqxHxMfAacKS2QUScj4j/rEy+Cewstsw7TU5OMjAwwJYtWxgYGGBycrLVmzSzDpflEu/3A+/UTC8Cj67TfhT4Q6MFko4BxwB2796dscQ7TU5OMjY2xsTEBIODg8zMzDA6OgrAyMjIhtdrZq0lKdfje3p6cj0+Sw+vUYUNL0wv6dtAFXix0fKIeDUiqhFR7e3tzV5lnfHxcSYmJhgaGuLuu+9maGiIiYkJxsfHN7xOK5Z74FYvIpremrX74IMPctWQpYe3COyqmd4JvFvfSNLjwBjwtYj4b66qmpifn2dwcPC2eYODg8zPz7dys5aRe+BWVll6eBeAvZIekHQPcBSYqm0g6RHg58DhiHiv+DJv19/fz8zMzG3zZmZm6O/vb/WmLQP3wK2smgZeRHwKnATOAPPA6xExJ+l5SYdXmr0IfAn4jaS/S5paY3WFGBsbY3R0lPPnz/PJJ59w/vx5RkdHGRsba+VmLSP3wK2sMv0ubURMA9N1856puf94wXWta3VY9PTTTzM/P09/fz/j4+MeLpXEag98aGjo1jz3wK0MOvaHuEdGRhxwJbXaA6/fh+chrbVbxwaelZd74FZWWv0qeLNVq9WYnZ3d8OOHh4c5d+4cEYEkDhw4wJkzZwqs0DYiy3FW7XrNWfbj4DbjOWpVLZIuRkS10bKOvHjA8PAwZ8+e5fjx41y/fp3jx49z9uxZhoeH211a8rIcV2Xtk/XYt3bVslZ9RenIIe25c+c4ceIEL7/8MsCtv6+88ko7yzKzkuvIIa0krl+/ztatW2/Nu3HjBtu2bXMPomQk+Tmh3EP9bnuO1hvSdlQPr/ZFs23btjXbdNOTZ92h/jXp12l7dNQ+vNUx/cGDBwE4ceLEbX8PHjzoF5FZjUqlgqR1b8C6yyuVSpv/FcXpyCEt+FvaTuGeTGOb9f9SxHY67TnsmiFtrdVwk8Rnn33W5mqsjNq136xSqbC8vNy0XbP6enp6cl8dJJ69D05vbd6w2Tq6RMcGnrVfmd7YjbRrv9ny8nIh28l77TgAPfdh7nX09PTwwencqykFB55tWJne2GVSRK/q1nryriPD89NpQ9Y8HHhmBdNzHxb2QRCn89dj/+fA6wLtOl2oTD2Zsg2vi+i15r2cud3JgdcF2rWvqkw9mTINrz2MLK9SH4fnY4jMipX1PdStSt3DK+JTuxufvCzDt9SGbmUaXpdZ6r3KUgdeJ9i+ffttwVGpVLh27VpLt1mWD4IyDd3KNLy28nLg5bAadvv27WN6eponn3ySubk5tm/f3tLQ88GknafRB0z9vNR7X5vBgZfDathdunQJgEuXLjEwMMDc3FxLt1tEb8Y9mc3lMCuHUgdeJ/Rkpqen75jes2dPS7cJ7f8F97W0sydTlv2JVl6lDrwy92RW31xrhdvq8la8uRsdhrKRx7VCu3oyZdqfaOWV6bAUSYckXZG0IOlUg+VflPTrleVvSeorqsBmh6U0u7XqEzsibh3ysm/fvtv+ViqVrr9Utlknanp5KElbgH8CB4BF4AIwEhGXa9p8D3g4Io5LOgp8PSK+td56814eqmbbm/NmLuCQh5vruVHMeuxzcw8vDXkvD7UfWIiIqysrew04AlyuaXMEOL1y/w3gZ5IUXfTq8lUnOo+/GbV6WQLvfuCdmulF4NG12kTEp5JuANuB94sosgz8xug8fs6sXpZ9eI32iNe/krK0QdIxSbOSZpeWlrLUV//4pE+LMbN8sgTeIrCrZnon8O5abSTdBWwF7jhvKSJejYhqRFR7e3s/d7HeOW9meWQJvAvAXkkPSLoHOApM1bWZAr6zcv8p4E/dtP/OzLpD0314K/vkTgJngC3ALyJiTtLzwGxETAETwC8lLXCzZ3e0lUWbmW1EpgOPI2IamK6b90zN/Y+AbxRbmplZsdr2M42SloC327JxM+tmeyKi4ZcEbQs8M7PNVuorHpuZFcmBZ2bJcOCZWTIceGaWDAeemSXDgWdmyfgfZf2hKG824J4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw node activity\n",
    "na_types = []\n",
    "labels = []\n",
    "for models in model_types:\n",
    "        na_types.append([model.na for model in models])\n",
    "drawBoxDiagram('Node_Activity', rep.na, na_types, calculate_ks, 'top')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw out degree\n",
    "out_d_types = []\n",
    "labels = []\n",
    "for models in model_types:\n",
    "        out_d_types.append([model.out_d for model in models])\n",
    "drawBoxDiagram('Out_Degree', rep.out_d, out_d_types, calculate_ks, 'top')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [],
   "source": [
    "def manual_manhatten(pdf1, pdf2):\n",
    "    result = 0\n",
    "    sum1 = 0\n",
    "    sum2 = 0\n",
    "    for(a, b) in zip(pdf1, pdf2):\n",
    "        sum1 += a\n",
    "        sum2 += b\n",
    "        result += abs(sum1-sum2)\n",
    "    return result\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Choice', 'Entry', 'Exit', 'FinalState', 'Region', 'State', 'Statechart', 'Transition']\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw node type\n",
    "labels = []\n",
    "types = sorted(rep.nodeTypeStat.keys())\n",
    "rep_type_dist = [float(rep.nodeTypeStat[key]) for key in types]\n",
    "print(types)\n",
    "node_type_types = []\n",
    "for models in model_types:\n",
    "    type_dists = []\n",
    "    for model in models:\n",
    "        type_dists.append([float(model.nodeTypeStat.get(key, 0)) for key in types])\n",
    "    node_type_types.append(type_dists)\n",
    "\n",
    "#since we already know the pdf, we can compute the ks distance manually\n",
    "drawBoxDiagram('Node_Type', rep_type_dist, node_type_types, manual_manhatten, 'top')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw violations\n",
    "violation_types = []\n",
    "labels = ['Hum', 'Comb+V', 'Comb-V', 'MPC', 'NA', 'OD',  'NTD', 'VIO']\n",
    "for models in model_types:\n",
    "        violation_types.append([model.violations for model in models])\n",
    "drawBoxDiagram('Violations', None, violation_types, lambda a, b:b, 'bottom')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}