[LON-CAPA-cvs] cvs: loncom /interface/statistics lonsubmissiontimeanalysis.pm

matthew lon-capa-cvs@mail.lon-capa.org
Fri, 04 Mar 2005 20:34:15 -0000


matthew		Fri Mar  4 15:34:15 2005 EDT

  Modified files:              
    /loncom/interface/statistics	lonsubmissiontimeanalysis.pm 
  Log:
  Bug 3983: Discrepancy between overall statistics and submission time analysis
  computations of correct %.  lonsubmissiontimeanalysis.pm now computes the
  % correct of students attempting the problem (and tells the user as much).
  
  
Index: loncom/interface/statistics/lonsubmissiontimeanalysis.pm
diff -u loncom/interface/statistics/lonsubmissiontimeanalysis.pm:1.18 loncom/interface/statistics/lonsubmissiontimeanalysis.pm:1.19
--- loncom/interface/statistics/lonsubmissiontimeanalysis.pm:1.18	Mon Feb 28 15:16:03 2005
+++ loncom/interface/statistics/lonsubmissiontimeanalysis.pm	Fri Mar  4 15:34:15 2005
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonsubmissiontimeanalysis.pm,v 1.18 2005/02/28 20:16:03 matthew Exp $
+# $Id: lonsubmissiontimeanalysis.pm,v 1.19 2005/03/04 20:34:15 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -201,6 +201,7 @@
     my @Xlabel=($WeekDay[$wday]); # Labels of itmes
     my @BinEnd;                   # The end time of each bin
     my $cumulative_answers = 0;   # The sum of @AnsData
+    my %students;       # which students have attempted the problem?
     #
     foreach my $row (@$SubData) {
         my $subtime = &get_time_from_row($row);
@@ -223,6 +224,7 @@
         $max = $Ydata[$bincount] if ($max < $Ydata[$bincount]);
         $AnsData[$bincount] += &successful_submission($row);
         $cumulative_answers += &successful_submission($row);
+        $students{$row->[&Apache::loncoursedata::RT_student_id()]}++;
     }
     #
     # Pad the data to a full day
@@ -240,7 +242,7 @@
             $Xlabel[$bincount] = '';
         }
     }
-    my $numstudents = scalar(@$students);
+    my $numstudents = scalar(keys(%students));
     #
     # Determine a nice maximum value to use
     foreach my $maximum (10,15,20,25,30,40,50,60,70,80,90,100,
@@ -266,7 +268,9 @@
         '<th>'.('&nbsp;'x3).'</th>'.
         '<th valign="bottom">'.&mt('Correct Submissions').'</th>'.
         '<th>'.('&nbsp;'x3).'</th>'.
-        '<th valign="bottom">'.&mt('Cumulative Percent Correct').'</th>'.
+        '<th valign="bottom">'.&mt('Cumulative Correct of those attempting the problem').'</th>'.
+        '<th>'.('&nbsp;'x3).'</th>'.
+        '<th valign="bottom">'.&mt('Cumulative Percent Correct of those attempting the problem').'</th>'.
         '</tr>'.
         '</thead>'.
         '<tbody>';
@@ -274,7 +278,7 @@
     my @CumulativeCorrectPercent;
     for (my $i=0;$i<=$#Ydata;$i++) {
         $CumulativeCorrect[$i]=$CumulativeCorrect[-1]+$AnsData[$i];
-        $CumulativeCorrectPercent[$i] = (int(100*$CumulativeCorrect[$i]/$numstudents));
+        $CumulativeCorrectPercent[$i] = sprintf('%3.1f',100*$CumulativeCorrect[$i]/$numstudents);
         if ($Ydata[$i] != 0) {
             next if (! defined($BinEnd[$i]) || $BinEnd[$i] == 0);
             $htmltable .= 
@@ -290,6 +294,8 @@
                 '<td>&nbsp;</td>'.
                 '<td align="right">'.$AnsData[$i].('&nbsp;'x3).'</td>'.
                 '<td>&nbsp;</td>'.
+                '<td align="right">'.$CumulativeCorrect[$i].'</td>'.
+                '<td>&nbsp;</td>'.
                 '<td align="right">'.$CumulativeCorrectPercent[$i].'</td>'.
                 '</tr>'.$/;
         }
@@ -337,7 +343,6 @@
         return $row->[&Apache::loncoursedata::RT_awarded()];
     }
     return undef;
-    return 0;
 }
 
 sub get_time_from_row {