Skip to content

Instantly share code, notes, and snippets.

@ischoegl
Last active July 1, 2021 12:55
Show Gist options
  • Save ischoegl/ad12a98ef5878e12c81c0514cd1b36d1 to your computer and use it in GitHub Desktop.
Save ischoegl/ad12a98ef5878e12c81c0514cd1b36d1 to your computer and use it in GitHub Desktop.
Extract grades from MATLAB Grader report
import pandas as pd
import argparse
def matlab_grader(report, accept_late=False):
""" Extract grades from MATLAB Grader reports """
df = pd.read_csv(report)
components = df['Problem Component ID'].unique()
count = len(components)
emails = df['Student Email'].unique()
if accept_late:
df_valid = df
else:
df_valid = df[df['Late Submission?'] == 'N']
columns = ['email'] + list(components) + ['total score']
df_out = pd.DataFrame(columns=columns)
# loop over emails
for j, email in enumerate(emails):
# extract portion done by student
df_student = df_valid[df_valid['Student Email'] == email]
# loop over components
scores = []
for i, component in enumerate(components):
if component in df_student['Problem Component ID'].values:
df_component = df_student[df_student['Problem Component ID'] == component]
#score = df_component['% Score'].apply(lambda x: float(x.rstrip('%')))
score = df_component['Tests Passed']/df_component['Total Tests']
scores.append(100 * score.max())
else:
scores.append(0.)
scores.append(sum(scores)/count)
df_out.loc[j] = [email] + scores
return df_out
def main():
"""
Main function
"""
# set up argument parser
parser = argparse.ArgumentParser(
description='Extract MATLAB Grader scores')
parser.add_argument(
'report_file',
help='MATLAB Grader Report as CSV file')
parser.add_argument(
'score_file',
help='Scores as CSV file')
parser.add_argument(
"--late",
action="store_true",
default=False,
help="Accept late work (default: False)")
args = parser.parse_args()
df = matlab_grader(args.report_file, args.late)
df = df.sort_values('email')
df.to_csv(args.score_file, index=False)
if __name__ == '__main__':
main()

Convert MATLAB Grader reports to scores

This Python function converts MATLAB Grader reports to CSV files with (highest) scores sorted by student e-mails.

Steps:

  1. Create MATLAB Grader report - assume file name of the report is myreport.csv
  2. Run python matlab_grader.py myreport.csv matlab_grader_scores.csv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment