The primary aim of this project is to investigate the viability of using graph data structures for enhanced timetabling analytics and reporting.
Objectives
Designing an extensible, system-agnostic graph data model for university timetables
Developing a configurable ETL (extract, transform, load) pipeline to transition from relational to graph database representations of timetables
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!
G
4zj99lz2
666n359b
u0upp5hj
666n359b->u0upp5hj
4s3xzocl
k8yaaeoi
4s3xzocl->k8yaaeoi
9bbhq0e8
4s3xzocl->9bbhq0e8
4s3xzocl->9bbhq0e8
5cymetka
e4qukjnm
5cymetka->e4qukjnm
hx0hp6dr
hx0hp6dr->hx0hp6dr
k8yaaeoi->k8yaaeoi
14ae1pfz
k8yaaeoi->14ae1pfz
jrtct42d
glv43ych
xpzdirk1
glv43ych->xpzdirk1
06x4bmzo
glv43ych->06x4bmzo
mis1btmm
glv43ych->mis1btmm
ce1516j0
glv43ych->ce1516j0
gzxrlpod
c114j2tw
gzxrlpod->c114j2tw
8bpimk72
8bpimk72->k8yaaeoi
8bpimk72->14ae1pfz
ur4yo3tx
8bpimk72->ur4yo3tx
onkctu6x
onkctu6x->onkctu6x
85hi4ca2
onkctu6x->85hi4ca2
x0n5twep
onkctu6x->x0n5twep
c1sdjw8j
c1sdjw8j->hx0hp6dr
c1sdjw8j->u0upp5hj
xh1xin78
xztqibcz
xh1xin78->xztqibcz
vr6qql5z
vr6qql5z->666n359b
wxhhelge
vr6qql5z->wxhhelge
3ytehise
vr6qql5z->3ytehise
2m5wokx2
mfp9is99
2m5wokx2->mfp9is99
v4x5duoh
v4x5duoh->2m5wokx2
fovglxww
v4x5duoh->fovglxww
v4x5duoh->xztqibcz
89w9dxkj
89w9dxkj->glv43ych
89w9dxkj->glv43ych
1chkeldv
89w9dxkj->1chkeldv
89w9dxkj->mis1btmm
xpzdirk1->gzxrlpod
fovglxww->fovglxww
fsp8cdjo
fovglxww->fsp8cdjo
fovglxww->mfp9is99
jnazmo3s
jnazmo3s->e4qukjnm
72a2d6xd
sj35t4ss
72a2d6xd->sj35t4ss
lfwuczry
35yrnabr
lfwuczry->35yrnabr
8cgoonso
lfwuczry->8cgoonso
hv8k4g84
lfwuczry->hv8k4g84
lfwuczry->hv8k4g84
hcqaqm1o
hcqaqm1o->666n359b
qy17mwag
hcqaqm1o->qy17mwag
53bgisfb
hcqaqm1o->53bgisfb
1k9klz8v
eacs5e9j
1k9klz8v->eacs5e9j
j812m8am
1k9klz8v->j812m8am
ieb7bdce
1k9klz8v->ieb7bdce
bav7hkue
c114j2tw->bav7hkue
e7injpqb
c114j2tw->e7injpqb
hj4rycy9
s3okac0a
hj4rycy9->s3okac0a
85hi4ca2->hj4rycy9
85hi4ca2->9bbhq0e8
akih91pi
85hi4ca2->akih91pi
wxhhelge->72a2d6xd
wxhhelge->53bgisfb
iw0pfpmk
wt9rtovp
iw0pfpmk->wt9rtovp
dtmww06j
iw0pfpmk->dtmww06j
x0n5twep->onkctu6x
x0n5twep->onkctu6x
x0n5twep->85hi4ca2
x0n5twep->85hi4ca2
w084j1ko
x0n5twep->w084j1ko
y0sap20o
y0sap20o->y0sap20o
dxppp23s
y0sap20o->dxppp23s
y0sap20o->dxppp23s
pveq6y3l
y0sap20o->pveq6y3l
zefyvzdp
pzodwhlw
hxejkaog
pzodwhlw->hxejkaog
9bbhq0e8->dxppp23s
m0ggeeei
9bbhq0e8->m0ggeeei
06x4bmzo->c114j2tw
v850hpzb
06x4bmzo->v850hpzb
8bx5ks88
06x4bmzo->8bx5ks88
zyz74rqy
zyz74rqy->hx0hp6dr
zyz74rqy->c1sdjw8j
2cicgpkb
zyz74rqy->2cicgpkb
zyz74rqy->2cicgpkb
c21k3g41
zyz74rqy->c21k3g41
6e82t0az
si800de6
si800de6->fovglxww
si800de6->si800de6
4rv1fae9
4rv1fae9->v4x5duoh
dogjcfze
4rv1fae9->dogjcfze
4rv1fae9->dtmww06j
4rv1fae9->3ytehise
qvvjbgxm
qy17mwag->vr6qql5z
kjba91s3
qy17mwag->kjba91s3
9ifdi52l
s3tdzgmu
9ifdi52l->s3tdzgmu
14ae1pfz->eacs5e9j
hxejkaog->s3tdzgmu
lijfw7my
lijfw7my->4zj99lz2
eacs5e9j->k8yaaeoi
ur4yo3tx->hxejkaog
1tdjps87
ur4yo3tx->1tdjps87
l9axxrot
ur4yo3tx->l9axxrot
fsp8cdjo->v4x5duoh
fsp8cdjo->fovglxww
9xro7toh
4pocwaxo
akih91pi->4pocwaxo
akih91pi->3ytehise
v850hpzb->89w9dxkj
v850hpzb->qvvjbgxm
v850hpzb->e7injpqb
e4qukjnm->u0upp5hj
1bkcwtuf
1bkcwtuf->c114j2tw
1bkcwtuf->06x4bmzo
1bkcwtuf->06x4bmzo
1bkcwtuf->lijfw7my
dvhx7p1e
1bkcwtuf->dvhx7p1e
u0upp5hj->hcqaqm1o
u0upp5hj->wxhhelge
u0upp5hj->c21k3g41
j33a36gy
j33a36gy->9ifdi52l
j33a36gy->j812m8am
ewthkxdz
efvvduxt
efvvduxt->onkctu6x
efvvduxt->4pocwaxo
twne0skc
twne0skc->xpzdirk1
twne0skc->1bkcwtuf
2cicgpkb->l9axxrot
ozdu79aw
ozdu79aw->hx0hp6dr
ozdu79aw->1tdjps87
j812m8am->j33a36gy
sj35t4ss->72a2d6xd
sj35t4ss->53bgisfb
1tdjps87->8bpimk72
1tdjps87->8cgoonso
qcsg1epp
qcsg1epp->k8yaaeoi
kjba91s3->53bgisfb
mis1btmm->c114j2tw
mis1btmm->efvvduxt
35yrnabr->4zj99lz2
35yrnabr->y0sap20o
35yrnabr->dvhx7p1e
wmnsxqhi
wmnsxqhi->wxhhelge
tyoit3iq
tyoit3iq->v4x5duoh
tyoit3iq->v4x5duoh
tyoit3iq->fovglxww
tyoit3iq->1chkeldv
8cgoonso->j33a36gy
8bx5ks88->mis1btmm
8bx5ks88->mis1btmm
ez7k5sb5
ez7k5sb5->72a2d6xd
ez7k5sb5->9ifdi52l
ieb7bdce->xh1xin78
4pocwaxo->85hi4ca2
4pocwaxo->4pocwaxo
qez5iiiz
4pocwaxo->qez5iiiz
mfp9is99->wt9rtovp
mfp9is99->1chkeldv
yezs4jbg
yezs4jbg->tyoit3iq
yezs4jbg->w084j1ko
qez5iiiz->onkctu6x
qez5iiiz->4pocwaxo
qez5iiiz->4pocwaxo
s3okac0a->5cymetka
s3okac0a->vr6qql5z
s3okac0a->72a2d6xd
1pk6uryz
1pk6uryz->xh1xin78
1pk6uryz->2m5wokx2
1pk6uryz->v4x5duoh
1pk6uryz->fovglxww
1pk6uryz->iw0pfpmk
1pk6uryz->1chkeldv
hv8k4g84->89w9dxkj
83ayee0w
83ayee0w->y0sap20o
83ayee0w->bav7hkue
83ayee0w->lijfw7my
dxppp23s->glv43ych
dxppp23s->m0ggeeei
dogjcfze->1chkeldv
dogjcfze->dtmww06j
53bgisfb->666n359b
53bgisfb->72a2d6xd
53bgisfb->9ifdi52l
53bgisfb->xztqibcz
b463lw81
53bgisfb->b463lw81
e7injpqb->bav7hkue
dvhx7p1e->5cymetka
dvhx7p1e->8bx5ks88
pveq6y3l->4s3xzocl
pveq6y3l->pveq6y3l
m0ggeeei->4s3xzocl
m0ggeeei->qez5iiiz
l9axxrot->pzodwhlw
l9axxrot->akih91pi
l9axxrot->c21k3g41
c21k3g41->c1sdjw8j
c21k3g41->ozdu79aw
c21k3g41->ieb7bdce
c21k3g41->ieb7bdce
b463lw81->hcqaqm1o
b463lw81->wxhhelge
ce1516j0->4s3xzocl
ce1516j0->83ayee0w
ce1516j0->ce1516j0
ce1516j0->ce1516j0
w084j1ko->onkctu6x
w084j1ko->dxppp23s
s3tdzgmu->vr6qql5z
s3tdzgmu->ez7k5sb5
s3tdzgmu->b463lw81
: A randomly generated graph for illustrative purposes.
See Appendix for graph generator code