As freshmen students, we were overwhelmed with the number of courses available to us. Not haven taken any of the courses expected as prerequisites, it was unclear how we could plan our course progression based on requirements. Stanford has many ways to search for courses, but nothing that specifically refines courses based on prerequisites. Providing students with a way to view the courses that they can take given the classes they have already taken would make it easier to limit the number of courses students need to screen from the total 10,000 courses available for Stanford students. We also hope that we can make this solution university-ambiguous, so course registries can be scraped and stored in our database for each respective college.
What it does
Cardinal Direction adds a course refinement option by filtering courses based on the courses for which you have prerequisites. This can help reduce your searches significantly, limiting the number of classes you consider. We also build a course registry visualizer that lets you select a course and see the classes that depend on it as a prerequisite. For example, if you clicked on CS 106B, it would display the classes that you need to take before 106B (106A for example) and the new courses you can take after taking it (CS 107 for example).
How we built it
We began with a forked version of the Stanford-specific, fastcourses. Fastcourses had implemented a fast search service, Algolia, with data available only for Stanford students. We took down the Stanford-specific authentication and scraped our own data from public Stanford websites about courses and details, without ratings available only for students. After repeating this scrapping process for open MIT courses, we populated our Angolia service and ensured core course search functionality was working. Then, we wrote Python code that took the Stanford course description text and identified prerequisites to build a graph of course references. The result of this was put into a graph visualizer and implemented as a function in the back end that we could call from the website front end. This allows users to do course search refinement based on courses already listed in their planner. We then put all of our website code on a GCP instance.
Challenges we ran into
Unfortunately most universities do not have a public API for non-students and as a result, do not have course information available in a consistent, easily accessible form. We worked quite a bit on scraping public data from Explorecourses and MIT's public course database in an XML schema rather than with a private API. Much of our challenge was integrating the public course information with our current search. We wanted to query the courses in the same way and include them in our planner, but without the university specific data. It was also quite challenging to implement our Python course graph as a server function to be called for filtering.
Accomplishments that we're proud of
We're proud of the courses knowledge graph. It provides an easy visualization of all of the possible courses with the necessary prerequisites and the course options leading from a given class.
What we learned
We learned quite a bit of web development from scraping websites for data, putting that data in SAAS programs, using MongoDB databases and building a React front end.
What's next for Cardinal Direction
Students tend to perform better when they have a good study group with whom they take classes. We think that we can improve the course selection process by adding features for friends to share course lists with each other. With this information, they could plan courses with friends