Skip to content

Instantly share code, notes, and snippets.

@CalvinHarrisUK
Forked from ah3rz/WineGraph
Last active December 31, 2015 16:49
Show Gist options
  • Save CalvinHarrisUK/8016408 to your computer and use it in GitHub Desktop.
Save CalvinHarrisUK/8016408 to your computer and use it in GitHub Desktop.
= Personalized Learning =
Personalized learning is a problem that has yet to be solved in the real world. Students learn in all sorts of different ways and each student could achieve more if concepts are presented to them in a way that matches their personal learning style. It's not possible to have a teacher assigned to every individual student but if we use automation and graph theory, we can start to get closer to just that. In this Gist I will attempt to show that by tracking specific information about learning modules and student's testing achievements, we can present concepts to a student in a way that can help them learn more effectively.
:neo4j-version: 2.0.0
:author: Amanda
:twitter: @pandamonial
:tags: domain:Education
The domain model:
Students complete study of different styles of learning modules.
Learning modules have objectives to teach learning concepts.
Tests contain test questions.
Test questions align to the learning concepts.
If a student does extremely well at answering test questions after they completed study of learning modules of a certain style, a teacher might prefer to continue to assign that style of learning module. If the opposite is true, they might look for a different style of learning module to assign to that student.
//hide
//setup
[source,cypher]
----
//Create our teachers and courses
CREATE (Teach:Teacher {name:'Mrs. French', grade:3})
CREATE (Math:Class {courseName:'Math'})
CREATE (Teach)-[:TEACHES]->(Math)
//create some students
CREATE
(Tim:Student {name:'Tim', grade:3}),
(Jan:Student {name:'Jan', grade:3}),
(Lisa:Student {name:'Lisa', grade:3}),
(Rylan:Student {name:'Rylan', grade:3}),
(Kelly:Student {name:'Kelly', grade:3}),
(Austin:Student {name:'Austin', grade:3}),
(Caitlyn:Student {name:'Caitlyn', grade:3}),
(Zack:Student {name:'Zack', grade:3}),
(Zelda:Student {name:'Zelda', grade:3})
//Create some learning concepts for the students to learn
CREATE
(Fractions:Concept {name:'CCSS.Math.Content.4.NF.A.1', description: 'Fractions'}),
(Addition:Concept {name:'CCSS.Math.Content.3.NBT.A.2', description: 'Addition'}),
(Multiplication:Concept {name:'CCSS.Math.Content.3.NBT.A.3', description: 'Multiplication'})
CREATE
(Fractions)-[:AlignsTo{quarter:3}]->(Math),
(Addition)-[:AlignsTo{quarter:1}]->(Math),
(Multiplication)-[:AlignsTo{quarter:2}]->(Math)
//Create some learning modules to teach the learning concepts
CREATE (LM1:LearningModule {name:'BreakThePieApart', learningStyle:'Interactive', link:'http://lms.school.edu/BreakPieLM1'}),
(LM2:LearningModule {name:'AddingGame', learningStyle:'Interactive', link:'http://lms.school.edu/AddingGame'}),
(LM3:LearningModule {name:'ReadAboutAddition', learningStyle:'Document', link:'http://lms.school.edu/ReadAboutAddition'}),
(LM4:LearningModule {name:'BreedingBunnies', learningStyle:'Interactive', link:'http://lms.school.edu/BreedingBunnies'}),
(LM5:LearningModule {name:'ReadAboutFractions', learningStyle:'Document', link:'http://lms.school.edu/ReadAboutFractions'}),
(LM6:LearningModule {name:'ReadAboutMultiplication', learningStyle:'Document', link:'http://lms.school.edu/ReadAboutMultiplication'})
CREATE
(LM1)-[:OBJECTIVE]->(Fractions),
(LM5)-[:OBJECTIVE]->(Fractions),
(LM2)-[:OBJECTIVE]->(Addition),
(LM3)-[:OBJECTIVE]->(Addition),
(LM4)-[:OBJECTIVE]->(Multiplication),
(LM6)-[:OBJECTIVE]->(Multiplication)
//Have the students complete the learning modules
CREATE
(Zelda)-[:COMPLETED_STUDY {date: '1-1-13'}]->(LM1),
(Zack)-[:COMPLETED_STUDY {date: '1-1-13'}]->(LM1),
(Caitlyn)-[:COMPLETED_STUDY {date: '1-1-13'}]->(LM1),
(Austin)-[:COMPLETED_STUDY {date: '1-1-13'}]->(LM1),
(Kelly)-[:COMPLETED_STUDY {date: '1-1-13'}]->(LM1),
(Jan)-[:COMPLETED_STUDY {date: '1-1-13'}]->(LM1),
(Rylan)-[:COMPLETED_STUDY {date: '1-1-13'}]->(LM1),
(Lisa)-[:COMPLETED_STUDY {date: '1-1-13'}]->(LM1),
(Tim)-[:COMPLETED_STUDY {date: '1-1-13'}]->(LM1),
(Zelda)-[:COMPLETED_STUDY {date: '3-1-13'}]->(LM3),
(Zack)-[:COMPLETED_STUDY {date: '3-1-13'}]->(LM3),
(Caitlyn)-[:COMPLETED_STUDY {date: '3-1-13'}]->(LM3),
(Austin)-[:COMPLETED_STUDY {date: '3-1-13'}]->(LM3),
(Kelly)-[:COMPLETED_STUDY {date: '3-1-13'}]->(LM3),
(Jan)-[:COMPLETED_STUDY {date: '3-1-13'}]->(LM3),
(Rylan)-[:COMPLETED_STUDY {date: '3-1-13'}]->(LM3),
(Lisa)-[:COMPLETED_STUDY {date: '3-1-13'}]->(LM3),
(Tim)-[:COMPLETED_STUDY {date: '3-1-13'}]->(LM3),
(Zelda)-[:COMPLETED_STUDY {date: '8-1-13'}]->(LM4),
(Zack)-[:COMPLETED_STUDY {date: '8-1-13'}]->(LM4),
(Caitlyn)-[:COMPLETED_STUDY {date: '8-1-13'}]->(LM4),
(Austin)-[:COMPLETED_STUDY {date: '8-1-13'}]->(LM4),
(Kelly)-[:COMPLETED_STUDY {date: '8-1-13'}]->(LM4),
(Jan)-[:COMPLETED_STUDY {date: '8-1-13'}]->(LM4),
(Rylan)-[:COMPLETED_STUDY {date: '8-1-13'}]->(LM4),
(Lisa)-[:COMPLETED_STUDY {date: '8-1-13'}]->(LM4),
(Tim)-[:COMPLETED_STUDY {date: '8-1-13'}]->(LM4)
//Create some test questions, tests, and test events to assess the students comprehension.
CREATE
(Item1:TestQuestion{name:'MCQuarterOf32', type:'Multiple Choice',question:'What is 1/4 of 32? Hint 32/8 + 32/8', a:2, b:4,c:6,d:8, correct:'d'}),
(Item2:TestQuestion{name:'MCTripleDigitsAddition', type:'Multiple Choice',question:'What is 356 + 234?', a:543,b:580, c:590,d:490, correct: 'c'}),
(Item3:TestQuestion{name:'ITripleDigitsAddition', type:'Interactive',question:'Hit stop when the man climbs to the correct number', correct:'590'}),
(Item4:TestQuestion{name:'EssayMultiplication', type:'Essay',question:'If three bunnies each have 5 babies, how many baby bunnies will there be? Explain your answer.', correct:'15, 3 * 5 = 15. Ensure that the explanation is correct'}),
(Test1:Assessment{name:'TestA'}),
(TE1:TestEvent{date:'9-2-13'})
//Align test questions to the concepts that they are testing
CREATE
(Item1)-[:ALIGNS]->(Fractions),
(Item2)-[:ALIGNS]->(Addition),
(Item3)-[:ALIGNS]->(Addition),
(Item4)-[:ALIGNS]->(Multiplication),
(Item5)-[:ALIGNS]->(Addition)
//Put test questions on tests
CREATE
(Test1)-[:CONTAINS]->(Item1),
(Test1)-[:CONTAINS]->(Item2),
(Test1)-[:CONTAINS]->(Item4)
//Assign our test event a teacher
CREATE
(TE1)-[:ADMINISTRATION]->(Test1),
(Teach)-[:ADMINISTERS {date:'9-1-13'}]->(TE1)
//Give the tests to students and record their scores as well as what questions they missed
CREATE
(Zelda)-[:ASSESSED {score:'66%'}]->(TE1),
(Zack)-[:ASSESSED {score:'66%'}]->(TE1),
(Caitlyn)-[:ASSESSED {score:'33%'}]->(TE1),
(Austin)-[:ASSESSED {score:'66%'}]->(TE1),
(Kelly)-[:ASSESSED {score:'66%'}]->(TE1),
(Jan)-[:ASSESSED {score:'100%'}]->(TE1),
(Rylan)-[:ASSESSED {score:'33%'}]->(TE1),
(Lisa)-[:ASSESSED {score:'66%'}]->(TE1),
(Tim)-[:ASSESSED {score:'66%'}]->(TE1),
(Zelda)-[:INCORRECT {date: '9-2-12', response:'b', testName:'Test1'}]->(Item2),
(Zack)-[:INCORRECT {date: '9-2-12', response:'b', testName:'Test1'}]->(Item2),
(Austin)-[:INCORRECT {date: '9-2-12', response:'b', testName:'Test1'}]->(Item2),
(Kelly)-[:INCORRECT {date: '9-2-12', response:'a', testName:'Test1'}]->(Item2),
(Rylan)-[:INCORRECT {date: '9-2-12', response:'b', testName:'Test1'}]->(Item2),
(Rylan)-[:INCORRECT {date: '9-2-12', response:'a', testName:'Test1'}]->(Item1),
(Lisa)-[:INCORRECT {date: '9-2-12', response:'c', testName:'Test1'}]->(Item2),
(Caitlyn)-[:INCORRECT {date: '9-2-12', response:'c', testName:'Test1'}]->(Item1),
(Caitlyn)-[:INCORRECT {date: '9-2-12', response:'c', testName:'Test1'}]->(Item4),
(Tim)-[:INCORRECT {date: '9-2-12', response:'b', testName:'Test1'}]->(Item2)
----
== What are the questions on the test?
[source, cypher]
----
MATCH (test)-[:CONTAINS]->(testQuestion)
RETURN testQuestion.name as Name, testQuestion.question as Question
----
//table
== Who took the test on what date and who was the administrator?
[source, cypher]
----
MATCH (student)-[:ASSESSED]->(TE)<-[:ADMINISTERS]-(teacher)
RETURN student.name as Student, TE.date as Date, teacher.name as Teacher
----
//table
== How did the students score?
[source, cypher]
----
match (student)-[r:ASSESSED]->(TE)<-[:ADMINISTERS]-(teacher)
return student.name as Student, r.score as Score, teacher.name as Teacher
----
//table
== What style of learning helped the students get questions correct?
[source, cypher]
----
MATCH
(test)-[:CONTAINS]->(testQuestion)-[:ALIGNS]->(testConcept),
(testConcept)<-[:OBJECTIVE]-(LM:LearningModule),
(LM:LearningModule) <-[:COMPLETED_STUDY]-(student),
(student)-[:ASSESSED]->(TE)
WHERE NOT ((student)-[:INCORRECT]->(testQuestion))
RETURN student.name as Student,LM.learningStyle as LearningStyle,count(testQuestion) as Correct
ORDER BY student.name
----
//table
//graph
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment