Register for InstructureCon25 • Passes include access to all sessions, the expo hall, entertainment and networking events, meals, and extraterrestrial encounters.
A feature request was just posted about Course Analytics and adding . While the data is right there, in Canvas, there is not a way for the teacher to simply and quickly see things like "this number of students" or "this percentage of students" received an A, B, C, etc.
So I was thinking back to InstructureCon 2015 and a presentation from @jblumberg where he showcased and shared his . This made me wonder how difficult it would be to create a similar spreadsheet that teachers could easily copy and run to find different variations of grade distribution, and possibly other course analytics that are not offered natively in Canvas.
As a worse case scenario, it would be great to have a simple spreadsheet where a teacher could copy/paste the percentages for all of their students, from the UI and paste into a spreadsheet, and then have the grade distributions auto calculated and conveniently displayed in one of the sheets.
Any takers?
FYI @nicole_stahl and @kmeeusen
Deactivated user, here is a paraphrased version what I told @kona when she asked me about this (I saw @jblumberg presentation, one of the best I encountered at InstructureCon, amazing what he accomplished with a Google Spreadsheet):
Stop focusing so much on grades, it gets in the way of learning.
@James
I agree that obsessing on grades is not a good thing for either teachers or students, but grades are a tool and a valuable tool. When your grading system is properly structured to measure student achievement of the stated learning objectives, then grades become a tool for both measuring how well a student is doing and how well a teacher is doing. I don't mean this is the sense of a performance evaluation for faculty - there are just too many variables for this to be a reliable tool for that use despite what many federal, state and local governments like to think. But those grades can be used as a component of a teachers own quality improvement activities. Grades can be indicators of:
Don't throw out the baby with the bath water! Make better use of the grades to make grading more representative of student achievement of the course objectives, and make your instructional materials and activities more effective.
If someone wants to take on the challenge, I'll share what I've discovered and maybe it can help someone put it together.. I've started doing this, but then got lost in trying to find an API call that returned the grade and wasted a couple of hours looking, just to discover it's the list enrollments one.
I spent most of the night teaching myself javascript and GoogleScripts. Josh's code was awesome, but way too complicated, so I started over and wrote variable substitution and pagination into a single api call to make life easier. I've got step 1 hardcoded for the time being and step 2 is done (and the api call with pagination). Now that I know what to do for step 3, it shouldn't be that hard or take very long. I've written VBA code for Excel to create tables, so it shouldn't be that hard to transfer to Google Spreadsheets. But I need to get up for the morning in less than 2 hours, so I need to quit for tonight.
It does appear that Google Sheets will ask you to authorize accessing external data and possibly another one. Maybe I was putting the code in the wrong spot. That appeared to be a one time thing, though, and probably not too obtrusive for the instructor. I just don't remember Josh mentioning it.
Although, I still stick by my previous comment: grades are overrated and focusing on them gets in the way of learning.
I'm trying to take on the challenge
I used a script that Brian Whitmer created to pull data from Canvas into a Google Sheet using API calls: whitmer/gsheet_canvas_api · GitHub
Once I pull the data in, I can then use formulas to manipulate the data.
The problem that I'm having is pulling in all the grades. I can pull the enrollments (grades) for an individual user (GET /api/v1/users/:user_id/enrollments); but according to the Implementation team at Instructure, there is no GET command to pull the enrollments from all users. I can do it as a report that generates the grade_export_CSV file, and then the script pulls it into the sheet, but that’s a manual multi-step process.
I'd like to find a better way to pull in all the enrollments automatically.
@trlaputka ,
Use the List Course Enrollments API endpoint.
GET /api/v1/courses/:course_id/enrollments
You can also use sections or users, but the user one is the most specific and gives just one user.
Inside the object returned from the call is a grades object that contains the information needed.
grades: {
html_url: "https://<canvas_instance>.instructure.com/courses/123/grades/456"
current_score: 59.16
final_score: 59.16
current_grade: "F+"
final_grade: "F+"
}
The 123 in the example is the :course_id specified in the API call. The 456 is the Canvas user_id. I've obscured both for privacy.
The List Course Enrollments lists every student in the course, so I'm not sure what information you're getting from the Implementation Team unless it's a permissions issue (my token gives me admin access).
I just whipped up your worst case scenario real quick if someone needs this badly. You can export your gradebook from the Grades screen and copy and paste the informational columns and the Final Score column.
Excel File: Grade Distribution.xlsx
Google Sheets: Grade Distribution - Google Sheets
Video on how to use the sheet: Grade Distribution Sheet For Canvas - YouTube
Hey Matt! This "worst case" looks great!
I thought it might be nice if you included a quick video screencast of you following the process to use those resources you provided? To help our less tech savvy customers see, step-by-step what to do!
You might also want to chime in on this feature idea " modifiedtitle="true" title="Grade Distribution to share these cool tools!
@James - you have reasonably presented a level of complexity that I had not considered. I'll be excited to see where you end up, with the new API call 😉
I updated my post with a video.
One of the issues people are running in to here with this challenge is the lack of the ability to get the grading scheme (grading standard). The existing API calls allow you to get grades for students if the instructor has enabled, but then you only get those grades that are actually being used. So, if there are A, A-, B+, C+, and D in a class, you don't get any grades returned for C and the programmer would have to infer from the presence of any +/- whether or not the plus-minus system is used.
That doesn't sound so bad, but let's say you think grades are bad and so you've decided to label your grade M, N, P, Q, R, S, and T to get students to top focusing on the A, B, C, thing. Or perhaps, a more reasonable expectation, is that you're from a school that uses A, B, C, D, E instead of A, B, C, D, F. Shy of having the instructor manually put these into the spreadsheet, there is no way that I can find to get this information out of Canvas.
Yet.
I was looking at this problem again today and noticed that in the Grading Standards controller canvas-lms/grading_standards_api_controller.rb, there is a List grading standards API call. That's not available in the Grading Standards API documentation, though. Looking at the source code, there was a little note that said it was added one day ago with a link to a diff that shows it was created 8 days ago.
So, it is coming, hopefully soon.
One thing I'm not sure about it and can't test since it's not actually in use is there is no indication whether the grading scheme in use a grading scheme for the course or a grading scheme for an account. Hopefully it will return the grading scheme in use no matter what. It would just add another set of complexity to call the API for the course and not get the grading scheme you want and then have to turn around and call it for the account. Maybe I just overthink things.
In the meantime, you may be able to only list those grades that actually have students achieving them. That might be okay, since the others aren't used, but if you have 4 A's, 8 B's and 3 D's, it might be nice to see that there are 0 C's.
Just wanted to pass along that there appears to be a new API call on the horizon that will help with this challenge.
Just a note that the List Grading Standards API endpoint is now available (yay!)
Depending on your application, though, you may need to be careful using it. It will list either those available at the account level or those available at a course level, depending on which method you call.
If you are interested in assigning a grading standard to a course, then Canvas has your back. This is the way the API is designed to work.
However, if you are working on this challenge and need to look up the grading standard so you can create a distribution of the grades, then you may need to make two calls --- one to the course and one to the account --- before you get the actual grading standard.
This makes sense within the API confines, but it doesn't match the behavior of the non-API call. Normally, the API routes and the main routes are similar and return similar functionality.
They didn't keep that dualism going here, though.
If you view the page within the course, but not using the matching API call, it returns all grading standards available to that course.
https://<canvas instance>/courses/<123>/grading_standards
However, if you use the corresponding API call, then it only returns the grading standards that are created at the course level.
GET /api/v1/courses/<123>/grading_standards
So although you can get the list of Grading Standards with two API calls, what is missing is
Not a show stopper, because you can work around it.
The main point, though, is that you can now get your Grading Standard to help with the grade distribution.
To interact with Panda Bot in the Instructure Community, you need to sign up or log in:
Sign In
This discussion post is outdated and has been archived. Please use the Community question forums and official documentation for the most current and accurate information.