Gradebooks
The main object in gradelib is the Gradebook
. It stores all of the
data about a course’s grades, and provides basic methods for manipulating that
data.
You normally don’t need to create a Gradebook
from scratch; instead,
you will typically import grades from Gradescope or Canvas using one of the
function described in the next section. But it can be useful to know a little
about how the Gradebook
is structured, in order to have a sense of how
gradelib works, and in case you want to implement a grading strategy that
isn’t in this package.
You can think of a Gradebook
as being comprised of four “core” pieces
of information:
Gradebook.points_earned
is a pandas DataFrame containing the points earned by each student on each assignment.Gradebook.points_possible
is a pandas Series containing the number of points possible on each assignment.Gradebook.lateness
is a pandas DataFrame measuring how late each student’s submission was for each assignment.Gradebook.dropped
is a pandas DataFrame indicating whether a student’s submission was dropped for a given assignment.
These four attributes contain all of the information about a student’s
performance on each assignment. Together with a fifth attribute,
Gradebook.grading_groups
, which determines how the assignments should
be grouped together for grading purposes, these are sufficient to compute a
student’s overall grade in the course.
Beyond the “core” data attributes above, a Gradebook
also contains
many “derived” attributes, which are computed from the core data. For example,
Gradebook.score
is a pandas DataFrame containing the score earned
by each student on each assignment, which is computed by dividing
Gradebook.points_earned
by Gradebook.points_possible
. The
derived attributes are all computed dynamically from the core data.
In gradelib, the grading process amounts to starting with a “raw” gradebook
and making a sequence of modifications to the core attributes that reflect the
course’s grading policies. For example, you might drop the lowest homework
score and penalize late assignments; this is done by modifying the
Gradebook.dropped
and Gradebook.points_earned
attributes,
respectively. gradelib provides a number of functions for making these
modifications without having to worry about the details of how the core data
are structured, but you can also modify the core data directly if you want to
implement a grading policy that isn’t supported.