Community

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
wlangley
New Member

Is there any way to view how many students got a certain criteria on a rubric? For example, I have a writing rubric, and want to know the break down of how students did on spelling, for example.

1 Solution

Accepted Solutions
James
Community Member

This feature is not available without some additional programming.

You would have to use the API to download the submissions for each student, iterate through the rubrics, and then compile the report.

Depending on the number of students and the type of assignment, you might be able to do this without programming. It doesn't work particularly well on discussions (each reply generates a bunch of columns) and if there are more than 100 submissions.

For example, in my course id=2151249 I have an assignment id=14241214

I would make the API call (this is all on one line, I just broke it to avoid line wrap)

/api/v1/courses/2151249/assignments/14241214/submissions
?include[]=rubric_assessment
&include[]=assignment
&per_page=100‍

This returns an array of items, each of which contains a section for the rubric_assessment (inside the red box)

251998_pastedImage_1.png

Mine only has one entry, but that's because my rubric only has one criterion in it. If there were additional criteria, they would be shown here.

Then, a little later in the structure, there is an assignment block. Within that section, there is a rubric item.

252004_pastedImage_2.png

This is an array and contains one item for each criterion in the rubric. When you look at the rubric_assessment, you see that the property_name is 838326_6840 and that corresponds to the id in the assignment.rubric[0].id value. That means that the score from the rubric_assessment is tied to this item.

The ids on the ratings are irrelevant for this purpose as it's the point values that determine the match. But the point values do not have to match the criterion ratings as someone can always manually type the points rather than clicking on an item.

That means that we don't really need the include[]=assignment information for what you want to do, but it's going to be difficult to tell which rubric criteria corresponds to what without the assignment information. You may want to fetch that separately and save some time and space.

So, what you do is take each submission and then record each item from the rubric_assessment.

Now for the non-programming part. You can take that URL above and add it to the end of your Canvas instance inside your browser, changing the numbers to match your assignment. It may be better to leave off the assignment part for this. The results will look be a JSON data structure, with possibly a while(1); at the beginning (depending on your browser settings).

Copy everything after the while(1); into the clipboard and then go to a website that will convert JSON to CSV. I've used ConvertCSV.com before and it has an JSON to Excel button if you'd rather not mess with CSV.

What you'll get is a file where each property in the JSON data structure is a column in the spreadsheet.

The example I gave above was for a discussion, which as I said was a bad case to use. But since I've started down that treacherous road, I continued. I did remove the include[]=assignment from the query.

Anyway, I did a search for 838326_6840 and it came up in column NG. That will vary a lot depending on the assignment type. You want to keep that column. You want to do the same thing for all of the other rubric codes that came up. Again, I only have the one.  By the way, it doesn't matter, but my column heading at the top of column NG was rubric_assessment/838326_6840/points

I would consider taking all of the columns that you have with rubric scores in them and copy/paste them to a new spreadsheet. This would also be a good chance to rename the columns based on the information about the assignment. I renamed mine to be "Holistic".

I then created a pivot table to perform the count. There are other ways to do that, this was just quick for me and saved a bunch of programming formulas. I put "Holistic" as the column variable and as the Values variable as well.

That gave me this result

252005_pastedImage_5.png

Note that the values carried over as text, which is why 0 comes first, followed by 10.5, then 4.5. If you want to have them appear in numeric order, then you need to convert the number-like text values to actually be numbers. Microsoft recommends these methods -- method 3 is pretty quick.

After doing that, refreshing (wasn't sure if that was necessary) and sorting the data, I now have this. I could have easily sorted it in descending order to match the way Canvas rubrics go.

252006_pastedImage_6.png

From this, I see that there 4 Awesome, 12 Good, 8 Okay, 5 Fair, 1 Poor, and 4 None. I matched those numbers with the rubric information from the assignment to get the labels.

You could then swap out the one variable (Holistic) and replace it with the next criterion.

The other way to do this is to write (or find someone to write) some code that will do all that for you. This was one of my many projects that I started and never finished. It is possible (probable) that someone has already done this, but it might require installation of a programming language and configuration of software.

View solution in original post

1 Reply
James
Community Member

This feature is not available without some additional programming.

You would have to use the API to download the submissions for each student, iterate through the rubrics, and then compile the report.

Depending on the number of students and the type of assignment, you might be able to do this without programming. It doesn't work particularly well on discussions (each reply generates a bunch of columns) and if there are more than 100 submissions.

For example, in my course id=2151249 I have an assignment id=14241214

I would make the API call (this is all on one line, I just broke it to avoid line wrap)

/api/v1/courses/2151249/assignments/14241214/submissions
?include[]=rubric_assessment
&include[]=assignment
&per_page=100‍

This returns an array of items, each of which contains a section for the rubric_assessment (inside the red box)

251998_pastedImage_1.png

Mine only has one entry, but that's because my rubric only has one criterion in it. If there were additional criteria, they would be shown here.

Then, a little later in the structure, there is an assignment block. Within that section, there is a rubric item.

252004_pastedImage_2.png

This is an array and contains one item for each criterion in the rubric. When you look at the rubric_assessment, you see that the property_name is 838326_6840 and that corresponds to the id in the assignment.rubric[0].id value. That means that the score from the rubric_assessment is tied to this item.

The ids on the ratings are irrelevant for this purpose as it's the point values that determine the match. But the point values do not have to match the criterion ratings as someone can always manually type the points rather than clicking on an item.

That means that we don't really need the include[]=assignment information for what you want to do, but it's going to be difficult to tell which rubric criteria corresponds to what without the assignment information. You may want to fetch that separately and save some time and space.

So, what you do is take each submission and then record each item from the rubric_assessment.

Now for the non-programming part. You can take that URL above and add it to the end of your Canvas instance inside your browser, changing the numbers to match your assignment. It may be better to leave off the assignment part for this. The results will look be a JSON data structure, with possibly a while(1); at the beginning (depending on your browser settings).

Copy everything after the while(1); into the clipboard and then go to a website that will convert JSON to CSV. I've used ConvertCSV.com before and it has an JSON to Excel button if you'd rather not mess with CSV.

What you'll get is a file where each property in the JSON data structure is a column in the spreadsheet.

The example I gave above was for a discussion, which as I said was a bad case to use. But since I've started down that treacherous road, I continued. I did remove the include[]=assignment from the query.

Anyway, I did a search for 838326_6840 and it came up in column NG. That will vary a lot depending on the assignment type. You want to keep that column. You want to do the same thing for all of the other rubric codes that came up. Again, I only have the one.  By the way, it doesn't matter, but my column heading at the top of column NG was rubric_assessment/838326_6840/points

I would consider taking all of the columns that you have with rubric scores in them and copy/paste them to a new spreadsheet. This would also be a good chance to rename the columns based on the information about the assignment. I renamed mine to be "Holistic".

I then created a pivot table to perform the count. There are other ways to do that, this was just quick for me and saved a bunch of programming formulas. I put "Holistic" as the column variable and as the Values variable as well.

That gave me this result

252005_pastedImage_5.png

Note that the values carried over as text, which is why 0 comes first, followed by 10.5, then 4.5. If you want to have them appear in numeric order, then you need to convert the number-like text values to actually be numbers. Microsoft recommends these methods -- method 3 is pretty quick.

After doing that, refreshing (wasn't sure if that was necessary) and sorting the data, I now have this. I could have easily sorted it in descending order to match the way Canvas rubrics go.

252006_pastedImage_6.png

From this, I see that there 4 Awesome, 12 Good, 8 Okay, 5 Fair, 1 Poor, and 4 None. I matched those numbers with the rubric information from the assignment to get the labels.

You could then swap out the one variable (Holistic) and replace it with the next criterion.

The other way to do this is to write (or find someone to write) some code that will do all that for you. This was one of my many projects that I started and never finished. It is possible (probable) that someone has already done this, but it might require installation of a programming language and configuration of software.