-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path01-04-project.qmd
345 lines (331 loc) · 16 KB
/
01-04-project.qmd
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
---
title: Project Aims and Scope
---
The primary aim of this project is to **investigate the viability of using graph data structures** for enhanced timetabling analytics and reporting.
### Objectives
<br>
1. Designing an **extensible, system-agnostic graph data model** for university timetables
2. Developing a **configurable ETL** (extract, transform, load) pipeline to transition from relational to graph database representations of timetables
3. Discussing how **graph-based approaches to timetabling analysis** could contribute to measuring and improving timetable quality.
To achieve these objectives, I implement and evaluate a set of proof-of-concept analytical metrics which leverage the graph data model whilst discussing performance capabilities (and limitations) against traditional relational approaches.
It is important to note that this project is positioned as a proof-of-concept and exploratory study.
I will **not**:
- reinvent a full-scale timetabling system
- attempt to optimise real-time timetable generation
I will:
- focus on the data engineering aspects of transitioning from relational to graph data models
- demonstrate the potential of graph-based approaches in the analysis of university timetables
- provide a foundation for future analytical work.
Let's graph!
```{dot}
digraph G {
fontname="Helvetica,Arial,sans-serif"
layout=neato
start=random
overlap=false
splines=true
size="6,4"
"4zj99lz2" [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"666n359b" [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"4s3xzocl" [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"5cymetka" [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
hx0hp6dr [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
k8yaaeoi [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
jrtct42d [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
glv43ych [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
gzxrlpod [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"8bpimk72" [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
onkctu6x [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
c1sdjw8j [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
xh1xin78 [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
vr6qql5z [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"2m5wokx2" [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
v4x5duoh [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"89w9dxkj" [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
xpzdirk1 [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
fovglxww [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
jnazmo3s [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"72a2d6xd" [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
lfwuczry [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
hcqaqm1o [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"1k9klz8v" [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
c114j2tw [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
hj4rycy9 [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"85hi4ca2" [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
wxhhelge [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
iw0pfpmk [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
x0n5twep [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
y0sap20o [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
zefyvzdp [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
pzodwhlw [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
wt9rtovp [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"9bbhq0e8" [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"06x4bmzo" [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
zyz74rqy [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"6e82t0az" [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
bav7hkue [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
si800de6 [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"4rv1fae9" [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
qvvjbgxm [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
qy17mwag [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"9ifdi52l" [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"14ae1pfz" [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
hxejkaog [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"1chkeldv" [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
lijfw7my [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
eacs5e9j [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
ur4yo3tx [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
fsp8cdjo [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"9xro7toh" [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
akih91pi [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
v850hpzb [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
e4qukjnm [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"1bkcwtuf" [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
u0upp5hj [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
j33a36gy [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
ewthkxdz [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
efvvduxt [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
twne0skc [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"2cicgpkb" [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
ozdu79aw [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
j812m8am [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
sj35t4ss [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"1tdjps87" [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
qcsg1epp [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
kjba91s3 [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
mis1btmm [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"35yrnabr" [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
wmnsxqhi [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
tyoit3iq [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
xztqibcz [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"8cgoonso" [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"8bx5ks88" [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
ez7k5sb5 [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
ieb7bdce [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"4pocwaxo" [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
mfp9is99 [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
yezs4jbg [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
qez5iiiz [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
s3okac0a [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"1pk6uryz" [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
hv8k4g84 [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"83ayee0w" [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
dxppp23s [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
dogjcfze [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"53bgisfb" [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
e7injpqb [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
dvhx7p1e [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
pveq6y3l [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
dtmww06j [label="" fillcolor="#72f323" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
m0ggeeei [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
l9axxrot [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
"3ytehise" [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
c21k3g41 [label="" fillcolor="#b2e25f" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
b463lw81 [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
ce1516j0 [label="" fillcolor="#c887ce" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
w084j1ko [label="" fillcolor="#4ddd8e" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
s3tdzgmu [label="" fillcolor="#1a40e0" fontsize=1 height=0.12 shape=circle style=filled width=0.12]
glv43ych -> "06x4bmzo"
fovglxww -> fovglxww
c1sdjw8j -> u0upp5hj
"1pk6uryz" -> fovglxww
onkctu6x -> x0n5twep
v850hpzb -> qvvjbgxm
hj4rycy9 -> s3okac0a
ozdu79aw -> "1tdjps87"
y0sap20o -> pveq6y3l
w084j1ko -> dxppp23s
c21k3g41 -> ozdu79aw
"1k9klz8v" -> ieb7bdce
hx0hp6dr -> hx0hp6dr
"1bkcwtuf" -> "06x4bmzo"
"89w9dxkj" -> glv43ych
"4rv1fae9" -> dtmww06j
"85hi4ca2" -> hj4rycy9
v850hpzb -> e7injpqb
zyz74rqy -> "2cicgpkb"
glv43ych -> mis1btmm
j812m8am -> j33a36gy
si800de6 -> fovglxww
twne0skc -> xpzdirk1
"53bgisfb" -> "9ifdi52l"
efvvduxt -> "4pocwaxo"
s3okac0a -> "5cymetka"
"4pocwaxo" -> "4pocwaxo"
x0n5twep -> "85hi4ca2"
"1pk6uryz" -> xh1xin78
"4rv1fae9" -> "3ytehise"
"14ae1pfz" -> eacs5e9j
dxppp23s -> glv43ych
hv8k4g84 -> "89w9dxkj"
qy17mwag -> vr6qql5z
zyz74rqy -> c21k3g41
j33a36gy -> j812m8am
"1tdjps87" -> "8bpimk72"
s3tdzgmu -> b463lw81
ur4yo3tx -> "1tdjps87"
k8yaaeoi -> k8yaaeoi
pveq6y3l -> pveq6y3l
"85hi4ca2" -> akih91pi
zyz74rqy -> hx0hp6dr
"1bkcwtuf" -> dvhx7p1e
tyoit3iq -> v4x5duoh
s3tdzgmu -> ez7k5sb5
"1pk6uryz" -> iw0pfpmk
sj35t4ss -> "72a2d6xd"
dvhx7p1e -> "8bx5ks88"
"35yrnabr" -> y0sap20o
j33a36gy -> "9ifdi52l"
yezs4jbg -> w084j1ko
c1sdjw8j -> hx0hp6dr
qez5iiiz -> "4pocwaxo"
wxhhelge -> "72a2d6xd"
"8bpimk72" -> ur4yo3tx
"666n359b" -> u0upp5hj
vr6qql5z -> wxhhelge
pzodwhlw -> hxejkaog
"4pocwaxo" -> "85hi4ca2"
glv43ych -> ce1516j0
"1tdjps87" -> "8cgoonso"
qez5iiiz -> "4pocwaxo"
"1bkcwtuf" -> c114j2tw
k8yaaeoi -> "14ae1pfz"
ce1516j0 -> "83ayee0w"
"1pk6uryz" -> v4x5duoh
c21k3g41 -> c1sdjw8j
"53bgisfb" -> "72a2d6xd"
fovglxww -> fsp8cdjo
mis1btmm -> efvvduxt
"89w9dxkj" -> glv43ych
y0sap20o -> y0sap20o
"06x4bmzo" -> "8bx5ks88"
c21k3g41 -> ieb7bdce
x0n5twep -> w084j1ko
"2cicgpkb" -> l9axxrot
wmnsxqhi -> wxhhelge
kjba91s3 -> "53bgisfb"
b463lw81 -> wxhhelge
"4s3xzocl" -> "9bbhq0e8"
"2m5wokx2" -> mfp9is99
"1bkcwtuf" -> lijfw7my
"1k9klz8v" -> j812m8am
mfp9is99 -> "1chkeldv"
qcsg1epp -> k8yaaeoi
akih91pi -> "3ytehise"
iw0pfpmk -> dtmww06j
"8bx5ks88" -> mis1btmm
"83ayee0w" -> y0sap20o
lfwuczry -> "35yrnabr"
c114j2tw -> e7injpqb
s3okac0a -> vr6qql5z
ce1516j0 -> "4s3xzocl"
l9axxrot -> c21k3g41
ez7k5sb5 -> "9ifdi52l"
tyoit3iq -> fovglxww
glv43ych -> xpzdirk1
v4x5duoh -> xztqibcz
fsp8cdjo -> v4x5duoh
ieb7bdce -> xh1xin78
zyz74rqy -> c1sdjw8j
dxppp23s -> m0ggeeei
u0upp5hj -> c21k3g41
x0n5twep -> onkctu6x
tyoit3iq -> "1chkeldv"
dogjcfze -> "1chkeldv"
fsp8cdjo -> fovglxww
e4qukjnm -> u0upp5hj
hcqaqm1o -> qy17mwag
l9axxrot -> pzodwhlw
"5cymetka" -> e4qukjnm
xh1xin78 -> xztqibcz
hcqaqm1o -> "53bgisfb"
s3okac0a -> "72a2d6xd"
pveq6y3l -> "4s3xzocl"
twne0skc -> "1bkcwtuf"
ozdu79aw -> hx0hp6dr
ez7k5sb5 -> "72a2d6xd"
v4x5duoh -> fovglxww
u0upp5hj -> hcqaqm1o
"53bgisfb" -> "666n359b"
lfwuczry -> "8cgoonso"
"53bgisfb" -> b463lw81
onkctu6x -> "85hi4ca2"
lfwuczry -> hv8k4g84
"35yrnabr" -> "4zj99lz2"
e7injpqb -> bav7hkue
ce1516j0 -> ce1516j0
c114j2tw -> bav7hkue
tyoit3iq -> v4x5duoh
"8bpimk72" -> "14ae1pfz"
mis1btmm -> c114j2tw
"06x4bmzo" -> c114j2tw
m0ggeeei -> "4s3xzocl"
"4rv1fae9" -> dogjcfze
x0n5twep -> onkctu6x
ur4yo3tx -> hxejkaog
ur4yo3tx -> l9axxrot
"53bgisfb" -> xztqibcz
"06x4bmzo" -> v850hpzb
"8bx5ks88" -> mis1btmm
"4s3xzocl" -> k8yaaeoi
hcqaqm1o -> "666n359b"
lfwuczry -> hv8k4g84
zyz74rqy -> "2cicgpkb"
x0n5twep -> "85hi4ca2"
vr6qql5z -> "666n359b"
"89w9dxkj" -> "1chkeldv"
akih91pi -> "4pocwaxo"
gzxrlpod -> c114j2tw
onkctu6x -> onkctu6x
"9bbhq0e8" -> m0ggeeei
mfp9is99 -> wt9rtovp
"8cgoonso" -> j33a36gy
y0sap20o -> dxppp23s
"1bkcwtuf" -> "06x4bmzo"
"4rv1fae9" -> v4x5duoh
v4x5duoh -> "2m5wokx2"
qez5iiiz -> onkctu6x
wxhhelge -> "53bgisfb"
"83ayee0w" -> bav7hkue
b463lw81 -> hcqaqm1o
l9axxrot -> akih91pi
"9ifdi52l" -> s3tdzgmu
dvhx7p1e -> "5cymetka"
s3tdzgmu -> vr6qql5z
w084j1ko -> onkctu6x
jnazmo3s -> e4qukjnm
y0sap20o -> dxppp23s
"4s3xzocl" -> "9bbhq0e8"
"85hi4ca2" -> "9bbhq0e8"
efvvduxt -> onkctu6x
"89w9dxkj" -> mis1btmm
iw0pfpmk -> wt9rtovp
ce1516j0 -> ce1516j0
"72a2d6xd" -> sj35t4ss
"1pk6uryz" -> "1chkeldv"
lijfw7my -> "4zj99lz2"
u0upp5hj -> wxhhelge
eacs5e9j -> k8yaaeoi
yezs4jbg -> tyoit3iq
qy17mwag -> kjba91s3
fovglxww -> mfp9is99
si800de6 -> si800de6
"1k9klz8v" -> eacs5e9j
"35yrnabr" -> dvhx7p1e
dogjcfze -> dtmww06j
m0ggeeei -> qez5iiiz
"9bbhq0e8" -> dxppp23s
"83ayee0w" -> lijfw7my
"1pk6uryz" -> "2m5wokx2"
"8bpimk72" -> k8yaaeoi
hxejkaog -> s3tdzgmu
c21k3g41 -> ieb7bdce
v850hpzb -> "89w9dxkj"
vr6qql5z -> "3ytehise"
"4pocwaxo" -> qez5iiiz
xpzdirk1 -> gzxrlpod
sj35t4ss -> "53bgisfb"
}
```
: A randomly generated graph for illustrative purposes.
[See Appendix for graph generator code](appendix-random-graph.qmd)