Gopher Grades V2

November 2022

Python
NumPy
Pandas
SQLAlchemy
Next.js
Multiprocessing
Asyncio

Gopher Grades Version 2 (GGV2) is a grade transparency platform tailored for students at the University of Minnesota - Twin Cities. Widely adopted by the student body, the tool is utilized by over 50,000 students and garners more than 5 million page views annually. The project is actively maintained and welcomes contributions, fostering student participation in its ongoing development.

GGV2’s frontend is built using Next.js and Chakra UI, while the backend—under my leadership—is powered by Python, NumPy, Pandas, and SQLAlchemy. Additionally, we developed a Google Chrome extension, written in JavaScript, enabling students to view grade distributions directly on the University’s Schedule Builder.

Background

Upon enrolling at the University of Minnesota as a Computer Science and Data Science major, I was introduced to GopherGrades, a tool aimed at helping students plan a balanced course load. Initially, it served its purpose, but as I progressed into upper-division classes, I noticed that the data was often inaccurate or outdated, especially for advanced courses. This led me to take initiative and co-develop a solution that would offer reliable grade distribution data. Along with fellow contributors from Social Coding , including Samyok Nepal and Joey McIndoo , we began working on GGV2.

Backend Development

As the lead data engineer, I analyzed a dataset of 150,000 records from the University of Minnesota, spanning from Summer 2017 to Spring 2020. I designed a relational database schema in SQLite, ensuring grades could be accurately attributed to both professors and courses. One key enhancement over the original GopherGrades was linking courses to their respective departments, giving students more refined options when selecting courses for their major or minor.

GGV2 Schema
The original schema, simplistic in design and capable of storing the necessary information for easy retrieval.

Prototyping

Once the data was ingested into the database, the team and I began prototyping the frontend. Initial designs were built using Bootstrap with a table-like structure, but after multiple iterations, we settled on a more polished and visually engaging interface that better captured school spirit. The final design, created in Figma, was implemented using Next.js and Chakra UI.

Original Prototype
The original prototype for GGV2, designed in bootstrap.
Final Prototype
The final prototype for GGV2, designed in Figma.

Data Validation

While examining the data, it became evident that GopherGrades had several inconsistencies. For instance, teaching assistants were often mislabeled as professors, and key grading categories like Satisfactory/Non-Satisfactory and Withdrawal (S/N/W) were not reflected, skewing grade distributions. To address this, I introduced a “most-common” grade attribute to ensure that outliers did not distort a course’s overall performance.

Grade Distributions
Grade distributions as displayed on the Gopher Grades prototype.

Improvements

After refining the data validation process, we expanded the scope of the information available to students. Joey and I integrated data from ClassInfo (now Coursedog), ASR, and the Student Rating of Teaching, adding details such as course titles, RateMyProfessor scores, liberal education requirements, and course ratings. We also developed a Chrome extension , allowing students to access grade distributions directly through the University’s Schedule Builder.

Chrome Extension
The chrome extension that allows students to view grade distributions directly on the University's Schedule Builder.

Version 2.1

By the conclusion of the Fall 2022 semester, our team had grown significantly, enabling us to implement new features to improve user experience. We extended the database schema to allow students to view grade distributions by term, which also helped us flag anomalies, such as changes due to the COVID-19 pandemic. We also launched a Firefox version of the extension to increase accessibility.

New Schema
The new schema, capable of storing grade distributions over time.

Version 2.2

With the project’s growing complexity, optimizing data processing became a priority. Our initial API request structure led to long delays in fetching data, so I implemented Multiprocessing and Asyncio to significantly reduce data processing time—from hours to minutes.

Multiprocessing RMP
The results of implementing Multiprocessing and Asyncio for Rate My Professor.
Multiprocessing General
The results of implementing Multiprocessing and Asyncio for general data processing.

Version 2.3

For the Spring 2023 semester, we introduced several highly requested features, including a class map viewer and a schedule-to-Google Calendar converter. The class map viewer helps students visualize their course locations on campus, and allows them to export their route to Google Maps for better commute planning. The schedule converter streamlines the process of adding courses to a calendar, simplifying schedule sharing and organization.

Class Map Viewer
The class map viewer that allows students to see where their courses are located across campus.
Schedule to Google Calendar
The schedule to google calendar converter that allows students to export their schedule to Google Calendar.

Impact

I’m extremely proud of the progress the team and I have made on Gopher Grades. The platform has become an indispensable tool for over 50,000 students and continues to evolve with over 5 million page views per year. With an open and collaborative development process, I’m excited to see where the project heads in the future, ensuring it remains a trusted resource for students to make informed academic decisions.