Sections:

The Big Idea

Our README

The Narrative

The Big Idea

A diagram demonstrating how our code produces a course plan

Currently, it is very challenging to plan what classes you have to take at Olin and at what point in time you should take them so that you can optimize your time and energy. In order to plan when to take a course you have to consult your advisor, talk to many upperclassman, and refer to the course listings website which is very challenging to navigate. To improve upon this current system, we created an interactive program that allows you to input your intended major and the classes you have taken and then generate a proposed plan for what future classes you can take and when you should take them.

Our README

Project Description:

The goal of our project is to create a tool for Olin students to help them create a course plan for their time at Olin. The program takes into account a variety of factors including: courses already taken, area of academic interest, level of difficulty desired for each semester, and balance of project-based and individual work (this bit isn't implemented yet) desired for each semester. The program uses a recommendation algorithm that optimizes these chosen factors to suggest specific courses as well as more general course colorings to take in each semester.

What to Install:

How to Use:

First download dictionaries.py, student.py, and display.py. The user only needs to run display.py, but it imports classes and methods from the other two. After running display.py, a screen will appear prompting the user to select a major and input courses they have taken so far. The program is seperated into specific course requirements (i.e. Prob Stat, SoftDes, or DesNat) the user should select which of these courses they have taken and then select which electives they have taken. The two categories are grouped as they are so that the user can select more than one elective if they have taken multiple.

The User Input Screen

After selecting the all necessary fields, the user should click "Submit".

The User Input Screen after theoretical selection

The program will then render an image like this:

An image to be ignored

But this image can be ignored because it does not allow the user to access all of the infomration. The program also outputs a link, like so:

Copy this link

When the user copies that link and pastes into their browser

Paste it into your web browser

It will bring them to a plot with classes to be taken in the student's remaining semesters, looking something like this:

Hover over the bubles to view your predicted course path

The blue circles refer to engineering credits, the purple to ahse, green to science, orange to math, and gray to general credits where the course coloring does not matter.

How it Works:

We have created a csv file of all of the required courses offered at Olin with information about how many credits they are worth, what subject areas they are in, when they should be taken, and how difficult they are. We have also created another scv file with each of the common majors offered at Olin and what courses are required for graduation for each. We use the pandas library to import that csv file into python and convert it into a dictionary.

Our program has four classes: Student, Major, Course, and Semester. The latter three are used primarily for storage. The Semester class is used as a way to store information about a semester: its number, courses, and difficulty. A Semester is created for each of the user's remaining semesters at Olin during the course-recommender algorithm.

The Major class stores the major name and a list of the courses it requires.

The Course class stores properties about the course like name, credits, and difficulty. It has one method that returns the coloring of the course (ENGR, AHSE, MATH, or SCI).

The Student class contains information about that stduent such as their Major, how many semesters they have left at Olin, which Courses they have taken up to this point, and which Courses they still have to take (courses_left). This class has methods that calculate the number of course credits left in each subject area necessary to graduate and a method that uses that information to populate courses_left with major requirements and general course colorings. It has a method called make_course_plan that looks at courses_left, creates Semester objects to put those courses in, and sorts each course randomly among its suggested semesters. It tries this 1000 times and stores the arrangement of Courses with the most even spread of difficulty.

Change Log:

Version 1 - Given a limited list of courses, the program sorts the courses between two semesters in order to optimize for the lowest overall difficulty for both semesters

Version 2 - Same optimization protocol but using a dictionary of all courses available at Olin

Version 3 - Expanded functionality to account for all semesters, not just 2

Version 4 - Added checkbox inputs and required semesters

Version 5 - Checkbox inputs, dot-plot outputs, and a course plan that takes into account suggested semesters and also recommends other classes to ensure enough credits in each course coloring to graduate

Contributors:

Ellie Funkhouser, Becca Getto & Emma Price

. Additional software assistance was procured through PyGal and TKinter documentation as well as numeroud Stack Overflow threads.

FAQs:

The Narrative

The course paths program has undergone many iterations and changes on its way to becoming the functional tool it is today! It started as a simple algorithm that simply randomly assigned a small list of course to one of two semesters and displayed the results as text. As the program developed, the algorithm grew in complexity to be able to intake an entire dictionary of courses, remove the courses that the student has already taken, and assign the courses to a any numbers of semesters as determined by the student input. The advanced algorithm sorts the courses while considering suggested and required semesters that certain courses must be taken and calculates the difficulty of each semester. It sorts the courses 1000 times, calculating the difficulties each time and picks the option with the most even difficulty distribution. While the program used to simply display the courses to be taken as a list of names, through co-design with oyr peers, we determined that a graphical output would be more intuitive and interesting. Thus, the current iteration of the program displays the courses to be taken in each semester as an interactive dot plot. Each dot represents a single course. The dots are colored based on what credits it satisfies (engineering, math, science, or AHSE) and their size is determined by their difficulty. The user must simply hover their mouse of the dot they are interested in to reveal the course name as well as the course coloring and difficulty in text form. WHile the course pths program started as a simple piece of code, through many iterations and carefully adding functionality, it has become a valuable tool that we hope students at Olin will utilize to help them plan their time here.