[LON-CAPA-cvs] cvs: loncom /interface/statistics lonstudentassessment.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Wed, 10 Mar 2004 18:41:37 -0000
This is a MIME encoded message
--matthew1078944097
Content-Type: text/plain
matthew Wed Mar 10 13:41:37 2004 EDT
Modified files:
/loncom/interface/statistics lonstudentassessment.pm
Log:
Modified general behavior of sums: If the student has not attempted any
problem part in a sequence, they receive a sum of ' ' instead of '0'.
Modified &StudentTriesOnSequence and &StudentPerformanceOnSequence to return
a score of ' ' when appropriate.
Modified (csv|excel|html)_outputstudent to catch the modified return value.
Modified html_outputstudent and html_finish to compute statistics properly
(Now keep track of the number of students contributing to the statistics,
instead of the number not contributing).
--matthew1078944097
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20040310134137.txt"
Index: loncom/interface/statistics/lonstudentassessment.pm
diff -u loncom/interface/statistics/lonstudentassessment.pm:1.96 loncom/interface/statistics/lonstudentassessment.pm:1.97
--- loncom/interface/statistics/lonstudentassessment.pm:1.96 Mon Mar 8 12:31:37 2004
+++ loncom/interface/statistics/lonstudentassessment.pm Wed Mar 10 13:41:37 2004
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstudentassessment.pm,v 1.96 2004/03/08 17:31:37 www Exp $
+# $Id: lonstudentassessment.pm,v 1.97 2004/03/10 18:41:37 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -715,8 +715,10 @@
$seq,$show_links);
}
my $ratio='';
- if ($chosen_output->{'sequence_sum'}) {
+ if ($chosen_output->{'sequence_sum'} && $score ne ' ') {
$ratio .= sprintf("%3d",$score);
+ } else {
+ $ratio .= ' 'x3;
}
if ($chosen_output->{'sequence_max'}) {
if ($chosen_output->{'sequence_sum'}) {
@@ -739,15 +741,21 @@
}
#
# Total it up and store the statistics info.
- my ($score,$max) = (0,0);
+ my ($score,$max);
while (my ($symb,$seq_stats) = each (%{$studentstats})) {
$Statistics->{$symb}->{'score'} += $seq_stats->{'score'};
if ($Statistics->{$symb}->{'max'} < $seq_stats->{'max'}) {
$Statistics->{$symb}->{'max'} = $seq_stats->{'max'};
}
- $score += $seq_stats->{'score'};
+ if ($seq_stats->{'score'} ne ' ') {
+ $score += $seq_stats->{'score'};
+ $Statistics->{$symb}->{'num_students'}++;
+ }
$max += $seq_stats->{'max'};
}
+ if (! defined($score)) {
+ $score = ' 'x3;
+ }
$Str .= ' '.' 'x(length($max)-length($score)).$score.'/'.$max;
$Str .= " \n";
#
@@ -775,37 +783,42 @@
sub StudentAverageTotal {
my $Str = "<h3>Summary Tables</h3>\n";
- my $num_students = scalar(@Apache::lonstatistics::Students);
- my $total_ave = 0;
- my $total_max = 0;
+# my $max_students;
+# my $total_ave = 0;
+# my $total_max = 0;
$Str .= '<table border=2 cellspacing="1">'."\n";
$Str .= "<tr><th>Title</th><th>Average</th><th>Maximum</th></tr>\n";
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
my $ave;
- if ($num_students > $nodata_count) {
- $ave = int(100*($Statistics->{$seq->{'symb'}}->{'score'}/
- ($num_students-$nodata_count)))/100;
+ my $num_students = $Statistics->{$seq->{'symb'}}->{'num_students'};
+# if ($num_students > $max_students) {
+# $max_students = $num_students;
+# }
+ if ($num_students > 0) {
+ $ave = int(100*
+ ($Statistics->{$seq->{'symb'}}->{'score'}/$num_students)
+ )/100;
} else {
$ave = 0;
}
- $total_ave += $ave;
+# $total_ave += $ave;
my $max = $Statistics->{$seq->{'symb'}}->{'max'};
- $total_max += $max;
+# $total_max += $max;
$ave = sprintf("%.2f",$ave);
$Str .= '<tr><td>'.$seq->{'title'}.'</td>'.
'<td align="right">'.$ave.' </td>'.
'<td align="right">'.$max.' '.'</td></tr>'."\n";
}
- $total_ave = sprintf('%.2f',$total_ave); # only two digit
- $Str .= "</table>\n";
- $Str .= '<table border=2 cellspacing="1">'."\n";
- $Str .= '<tr><th>Number of Students</th><th>Average</th>'.
- "<th>Maximum</th></tr>\n";
- $Str .= '<tr>'.
- '<td align="right">'.($num_students-$nodata_count).'</td>'.
- '<td align="right">'.$total_ave.' '.'</td>'.
- '<td align="right">'.$total_max.' '.'</td>';
+# $total_ave = sprintf('%.2f',$total_ave); # only two digit
$Str .= "</table>\n";
+# $Str .= '<table border=2 cellspacing="1">'."\n";
+# $Str .= '<tr><th>Number of Students</th><th>Average</th>'.
+# "<th>Maximum</th></tr>\n";
+# $Str .= '<tr>'.
+# '<td align="right">'.$max_students.'</td>'.
+# '<td align="right">'.$total_ave.' '.'</td>'.
+# '<td align="right">'.$total_max.' '.'</td>';
+# $Str .= "</table>\n";
return $Str;
}
@@ -1311,7 +1324,12 @@
}
} else {
foreach my $value (@$rawdata) {
- $excel_sheet->write($rows_output,$cols_output++,$value);
+ if ($score eq ' ' || !defined($value)) {
+ $cols_output++;
+ } else {
+ $excel_sheet->write($rows_output,$cols_output++,
+ $value);
+ }
}
}
}
@@ -1336,7 +1354,11 @@
%replaceCells);
}
} elsif ($chosen_output->{'sequence_sum'}) {
- $excel_sheet->write($rows_output,$cols_output++,$score);
+ if ($score eq ' ') {
+ $cols_output++;
+ } else {
+ $excel_sheet->write($rows_output,$cols_output++,$score);
+ }
}
if ($chosen_output->{'sequence_max'}) {
$excel_sheet->write($rows_output,$cols_output++,$seq_max);
@@ -1627,6 +1649,7 @@
my $performance_length = 0;
my @TriesData = ();
my $tries;
+ my $hasdata = 0; # flag - true if the student has any data on the sequence
foreach my $resource (@{$seq->{'contents'}}) {
next if ($resource->{'type'} ne 'assessment');
my $resource_data = $studentdata->{$resource->{'symb'}};
@@ -1651,6 +1674,7 @@
my $tries = 0;
if(exists($resource_data->{'resource.'.$partnum.'.tries'})) {
$tries = $resource_data->{'resource.'.$partnum.'.tries'};
+ $hasdata =1;
}
#
if ($awarded > 0) {
@@ -1713,6 +1737,9 @@
if ($seq->{'randompick'}) {
$max = $seq->{'randompick'};
}
+ if (! $hasdata && $sum == 0) {
+ $sum = ' ';
+ }
return ($Str,$performance_length,$sum,$max,\@TriesData);
}
@@ -1750,6 +1777,7 @@
my $symbol;
my @ScoreData = ();
my $partscore;
+ my $hasdata = 0; # flag, 0 if there were no submissions on the sequence
foreach my $resource (@{$seq->{'contents'}}) {
next if ($resource->{'type'} ne 'assessment');
my $resource_data = $studentdata->{$resource->{'symb'}};
@@ -1768,13 +1796,17 @@
$performance_length++; # one character per part
$symbol = ' '; # default to space
#
- my $awarded = 0;
+ my $awarded;
if (exists($resource_data->{'resource.'.$part.'.awarded'})) {
$awarded = $resource_data->{'resource.'.$part.'.awarded'};
$awarded = 0 if (! $awarded);
+ $hasdata = 1;
}
#
$partscore = $weight*$awarded;
+ if (! defined($awarded)) {
+ $partscore = undef;
+ }
$score += $partscore;
$symbol = $partscore;
if (abs($symbol - sprintf("%.0f",$symbol)) < 0.001) {
@@ -1789,10 +1821,12 @@
$symbol = 'x';
$max -= $weight; # Do not count 'excused' problems.
}
+ $hasdata = 1;
} else {
# Unsolved. Did they try?
if (exists($resource_data->{'resource.'.$part.'.tries'})){
$symbol = '.';
+ $hasdata = 1;
} else {
$symbol = ' ';
}
@@ -1812,6 +1846,9 @@
}
$Str .= $symbol;
}
+ }
+ if (! $hasdata && $score == 0) {
+ $score = ' ';
}
return ($Str,$performance_length,$score,$max,\@ScoreData);
}
--matthew1078944097--