Need help coding a grading system to a data set.
    17 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
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 commentaires
Réponses (5)
  Akira Agata
    
      
 le 5 Oct 2017
        
      Modifié(e) : Akira Agata
    
      
 le 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 commentaires
  James Tursa
      
      
 le 5 Oct 2017
        
      Modifié(e) : James Tursa
      
      
 le 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 commentaires
  Chad Greene
      
      
 le 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 commentaire
  Jay Sheikh
 le 24 Juil 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
 le 16 Juil 2019
        if i have a matrix named A of dimension of 339 *5825,how do i randomly make 96% of the matrix 0 ?
0 commentaires
Voir également
Catégories
				En savoir plus sur Spreadsheets dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





