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

matthew lon-capa-cvs@mail.lon-capa.org
Tue, 06 Jul 2004 16:01:49 -0000


matthew		Tue Jul  6 12:01:49 2004 EDT

  Modified files:              
    /loncom/interface/statistics	lonsubmissiontimeanalysis.pm 
  Log:
  Fixed display of data table and padding of data sets to the end of the day.
  
  
Index: loncom/interface/statistics/lonsubmissiontimeanalysis.pm
diff -u loncom/interface/statistics/lonsubmissiontimeanalysis.pm:1.16 loncom/interface/statistics/lonsubmissiontimeanalysis.pm:1.17
--- loncom/interface/statistics/lonsubmissiontimeanalysis.pm:1.16	Fri Jun 25 14:23:02 2004
+++ loncom/interface/statistics/lonsubmissiontimeanalysis.pm	Tue Jul  6 12:01:48 2004
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonsubmissiontimeanalysis.pm,v 1.16 2004/06/25 18:23:02 matthew Exp $
+# $Id: lonsubmissiontimeanalysis.pm,v 1.17 2004/07/06 16:01:48 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -193,20 +193,20 @@
     my $endtime = $day_start;
     #
     # Initialize loop variables
-    my $max;
-    my @Ydata=(0);
-    my @AnsData=(0);
-    my @Xlabel=($WeekDay[$wday]);
-    my @BinEnd;
-    my $cumulative_answers = 0;
+    my $max;            # The sum of @Ydata
+    my @Ydata=(0);      # number of submissions
+    my @AnsData=(0);    # number of correct submissions
+    my @Xlabel=($WeekDay[$wday]); # Labels of itmes
+    my @BinEnd;                   # The end time of each bin
+    my $cumulative_answers = 0;   # The sum of @AnsData
     #
     foreach my $row (@$SubData) {
         my $subtime = &get_time_from_row($row);
         while ($subtime > $endtime && $endtime < time) {
             # Create a new bin
             $bincount++;
-            $Ydata[$bincount]=0;
-            $AnsData[$bincount]=$AnsData[$bincount-1];
+            $Ydata[$bincount]   = 0;
+            $AnsData[$bincount] = 0;
             $endtime += $binsize;
             push(@BinEnd,$endtime);
             if ($bincount % (86400/$binsize) == 0) {
@@ -222,20 +222,14 @@
         $AnsData[$bincount] += &successful_submission($row);
         $cumulative_answers += &successful_submission($row);
     }
-    foreach my $maximum (10,15,20,25,30,40,50,60,70,80,90,100,
-                          120,150,200,250,300,350,400,450,500,
-                          600,700,800,900,1000,1100,1200,1500,2000,
-                          2500,3000,4000,5000) {
-        if ($max < $maximum) {
-            $max = $maximum;
-            last;
-        }
-    }
+    #
+    # Pad the data to a full day
     while ($bincount % $bins_per_day != 0) {
         $bincount++;
         $Ydata[$bincount]=0;
-        $AnsData[$bincount]=$AnsData[$bincount-1];
+        $AnsData[$bincount]=0;
         $endtime += $binsize;
+        push(@BinEnd,$endtime);
         if ($bincount % (86400/$binsize) == 0) {
             $wday ++;
             $wday %= 7;
@@ -245,43 +239,63 @@
         }
     }
     my $numstudents = scalar(@$students);
+    #
+    # Determine a nice maximum value to use
+    foreach my $maximum (10,15,20,25,30,40,50,60,70,80,90,100,
+                          120,150,200,250,300,350,400,450,500,
+                          600,700,800,900,1000,1100,1200,1500,2000,
+                          2500,3000,4000,5000) {
+        if ($max < $maximum) {
+            $max = $maximum;
+            last;
+        }
+    }
+    #
+    # Build the data table
     $htmltable = '<p>'.
         '<table rules="groups" frame="border" '.
         'summary="Student submission data">'.
         '<thead>'.
         '<tr>'.
-        '<th valign="bottom">'.&mt('Begin Date').'</th>'.
+        '<th valign="bottom">'.&mt('Begin').'</th>'.
         '<th>'.('&nbsp;'x3).'</th>'.
-        '<th valign="bottom">'.&mt('End Date').'</th>'.
+        '<th valign="bottom">'.&mt('End').'</th>'.
         '<th valign="bottom">'.&mt('Submissions').'</th>'.
         '<th>'.('&nbsp;'x3).'</th>'.
-        '<th valign="bottom">'.&mt('Correct<br />Submissions').'</th>'.
+        '<th valign="bottom">'.&mt('Correct Submissions').'</th>'.
         '<th>'.('&nbsp;'x3).'</th>'.
-        '<th valign="bottom">'.&mt('Percent<br />Correct').'</th>'.
+        '<th valign="bottom">'.&mt('Cumulative Percent Correct').'</th>'.
         '</tr>'.
         '</thead>'.
         '<tbody>';
-    for (my $i=0;$i<=$#AnsData;$i++) {
-        $AnsData[$i] = int(100*($AnsData[$i]/$numstudents));
+    my @CumulativeCorrect=(0);
+    my @CumulativeCorrectPercent;
+    for (my $i=0;$i<=$#Ydata;$i++) {
+        $CumulativeCorrect[$i]=$CumulativeCorrect[-1]+$AnsData[$i];
+        $CumulativeCorrectPercent[$i] = (int(100*$CumulativeCorrect[$i]/$numstudents));
         if ($Ydata[$i] != 0) {
             next if (! defined($BinEnd[$i]) || $BinEnd[$i] == 0);
             $htmltable .= 
                 '<tr>'.
-                '<td align="right">'.
+                '<td align="right"><nobr>'.
                 &Apache::lonlocal::locallocaltime($BinEnd[$i]-$binsize).
-                '</td>'.
+                '</nobr></td>'.
                 '<td>&nbsp;</td>'.
-                '<td align="right">'.
+                '<td align="right"><nobr>'.
                     &Apache::lonlocal::locallocaltime($BinEnd[$i]).'</td>'.
-                '</td>'.
+                '</nobr></td>'.
                 '<td align="right">'.$Ydata[$i].('&nbsp;'x3).'</td>'.
                 '<td>&nbsp;</td>'.
-                '<td align="right">'.($i>0?$AnsData[$i]-$AnsData[$i-1]:$AnsData[$i]).('&nbsp;'x3).'</td>'.
+                '<td align="right">'.$AnsData[$i].('&nbsp;'x3).'</td>'.
+                '<td>&nbsp;</td>'.
+                '<td align="right">'.$CumulativeCorrectPercent[$i].'</td>'.
                 '</tr>'.$/;
         }
     }
     $htmltable .= '</tbody></table></p>';
-    my $title = 'Number of Submissions and Number Correct';
+    #
+    # Build the plot
+    my $title = '';#'Number of Submissions and Number Correct';
     my $xlabel;
     (undef,undef,undef,$mday,$month,$year,$wday) = localtime($day_start);
     $xlabel .= $FullWeekDay[$wday].' '.
@@ -293,15 +307,14 @@
     if ($width < 250) {
         $width = 250;
     }
+    #
     $html .= &Apache::loncommon::DrawXYYGraph($title,
                                               $xlabel,
                                               'Submissions vs Time',
                                               $plotcolors,
                                               \@Xlabel,
-                                              \@Ydata,
-                                              0,$max,
-                                              \@AnsData,
-                                              0,100,
+                                              \@Ydata,0,$max,
+                                              \@CumulativeCorrectPercent,0,100,
                                               (xskip => $bins_per_day,
                                                x_ticks => $bins_per_day,
                                                x_tick_offset => $bins_per_day,