Need help coding a grading system to a data set.
93 views (last 30 days)
Show older comments
So I have a data set of grades from Excel that i'm putting in matlab. In Matlab my objective is to find the average of each student, then assign grades to each student based on their average using if-then statements. I'm having trouble with the assigning grades to each student part. I need help assigning grades to each student then using the display command to show it. I'll put in my dataset(incase it helps), the names don't come into matlab from excel but that's ok.
66 66 67 68 92
90 90 90 90 90
75 80 95 65 75
75 45 25 70 70
75 90 90 90 95
85 88 76 88 90
90 80 50 80 90
100 100 50 50 100
55 65 66 68 75
65 90 90 60 50
100 40 60 60 70
55 100 95 88 90
75 80 85 77 82
80 82 88 84 86
66 68 64 70 62
90 92 88 75 90
100 40 60 60 70
55 100 95 88 90
75 80 85 77 82
80 82 88 84 86
66 68 64 70 62
90 92 88 75 90
75 90 67 68 92
85 88 90 90 90
90 80 95 65 75
100 100 25 70 70
55 65 90 90 95
65 90 76 88 90
100 40 50 80 90
55 100 50 50 100
Everything after "Student_Average = mean(data,2);" is where i'm not getting it right.
>> data = xlsread ('Exam_Grades_Data(2).xlsx'); %Loads data into matlab
Student_Average = mean(data,2); % Calculates average of each row(Student)
grade = Student_Average;
if n>=90
grade = 'A';
elseif n >= 80
grade ='B';
elseif n >= 70
grade ='C';
elseif n >= 60
grade ='D';
elseif n <=59
grade = 'E';
end
0 Comments
Answers (5)
Akira Agata
on 5 Oct 2017
Edited: Akira Agata
on 5 Oct 2017
Using table type variable and discretize function, you can discretize the average score and assign 'A' - 'E' for each bin, like:
% Sample data
data = array2table(randi([50,100],10,5));
% Calculate mean for each row
data.Mean = mean(data{:,:},2);
% Discretize the mean value and assign categorical value
data.grade = discretize(data.Mean,...
[0, 60, 70, 80, 90, 100],...
'categorical',...
{'E','D','C','B','A'});
The output is as follows.
data =
10×7 table
Var1 Var2 Var3 Var4 Var5 Mean grade
____ ____ ____ ____ ____ ____ _____
84 62 92 97 61 79.2 C
77 56 92 82 55 72.4 C
71 80 63 74 55 68.6 D
82 72 81 82 53 74 C
83 73 79 77 70 76.4 C
84 83 77 83 72 79.8 C
82 89 94 77 68 82 B
98 67 63 86 88 80.4 B
60 83 66 76 82 73.4 C
86 71 56 100 89 80.4 B
0 Comments
James Tursa
on 5 Oct 2017
Edited: James Tursa
on 5 Oct 2017
The averages you calculate are in a column vector called Student_Average, but your subsequent code does not even use that variable. So you need to alter your code to use that variable.
Also, for a beginner, I would advise using a simple for loop to calculate the grades result, which it appears you want to be a char variable.
So an outline of your code would be:
Student_Average = etc.
for k=1:numel(Student_Average)
% YOU FILL IN CODE HERE TO CALCULATE GRADE
end
The code you fill in above is going to be your if-then-else stuff you show above. You will calculate the grade based on Student_Average(k), and you will assign the result to grade(k).
And your current code doesn't assign anything if the average is between 59 and 60. So I would advise changing this line
elseif n <=59
to this instead
else
(Side note: What is an 'E' grade?)
0 Comments
Chad Greene
on 5 Oct 2017
I'd skip the if statement entirely and treat it like a histogram. You can use histcounts to get to bin the averages. Something like this:
Student_Average = mean(data,2); % Calculates average of each row(Student)
% Grades:
grades = {'F','D','C','B','A'};
% Corresponding bin edges of each grade:
edges = [0 60 70 80 90 Inf];
% Indices of which bin each Student_Average corresponds to:
[~,~,ind] = histcounts(Student_Average,edges);
% Letter grades for all students:
grade = grades(ind)'
% Make a nice figure:
histogram(ind,.5:5.5)
set(gca,'xtick',1:5,'xticklabel',grades)
box off
axis tight
1 Comment
Jay Sheikh
on 24 Jul 2019
I was able to implement your example. I am confused on what the 2 in "(data,2)" is actually doing. i noticed i was able to succesfully calculate the average for each row of the file i was reading from excel, just wanted some clarification to understand completely.
ranjana roy chowdhury
on 16 Jul 2019
if i have a matrix named A of dimension of 339 *5825,how do i randomly make 96% of the matrix 0 ?
0 Comments
See Also
Categories
Find more on Data Import from MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!