Grading curve#
This course has a curve due to SIPA policy:
Grades submitted for SIPA core courses must have an average GPA between 3.2 and 3.4, with the goal being 3.3. Courses with enrollments over 35 are also recommended to follow this rule.
As a compromise with Academic Affairs, the upper limit will be set to 3.8.
Getting your estimated course grade#
Go to
Grades
.View the current grade.
How course grades work#
Within the Grades
section of CourseWorks: The Total
course grade for each student is computed as a percentage, based on the weighted scores. It also shows an estimated letter grade.
A few times during the semester:
The full gradebook is exported and run through this notebook.
The percentage required for all the letter grades is adjusted up or down as necessary to hit the target GPA range.
Those cutoffs are updated in CourseWorks.
The estimated letter grades potentially change.
The min_score
column of the new cutoffs shows the current minimum Total
percentage required for each letter grade.
Methodology#
The rest of this notebook shows how the grade cutoffs are computed. This methodology, the distribution of student percentages, and thus your estimated course grade are subject to change up until final grades are submitted.
MIN_AVG_GPA = 3.2
MAX_AVG_GPA = 3.8
Load current scores#
The scores below are the total scores based on everything that has grades released thus far across both sections. See the timestamp in the filename below to know when it was updated. The grade data is anonymous for privacy reasons.
import pandas as pd
path = "/Users/afeld/Downloads/2024-03-20T2340_Grades-INAFU6504_ALL_2024_1_-_Python_for_Public_Policy.csv"
grades = pd.read_csv(path, skiprows=[1, 2])
# exclude the test student built into CourseWorks
grades = grades[grades["Student"] != "Student, Test"]
# obfuscate whose score is whose
grades = grades[["Current Score"]]
grades = grades.sort_values("Current Score").reset_index(drop=True)
grades
Current Score | |
---|---|
0 | 0.14 |
1 | 64.91 |
2 | 77.05 |
3 | 86.21 |
4 | 86.48 |
... | ... |
76 | 100.00 |
77 | 100.00 |
78 | 100.00 |
79 | 100.00 |
80 | 100.00 |
81 rows × 1 columns
Distribution#
import plotly.express as px
fig = px.histogram(
grades,
x="Current Score",
title="Distribution of the overall grades as a percentage, computed by CourseWorks",
labels={"Current Score": "Current Score (percent)"},
)
fig.update_layout(yaxis_title_text="Number of students")
fig.show()