[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>'.(' 'x3).'</th>'.
- '<th valign="bottom">'.&mt('End Date').'</th>'.
+ '<th valign="bottom">'.&mt('End').'</th>'.
'<th valign="bottom">'.&mt('Submissions').'</th>'.
'<th>'.(' 'x3).'</th>'.
- '<th valign="bottom">'.&mt('Correct<br />Submissions').'</th>'.
+ '<th valign="bottom">'.&mt('Correct Submissions').'</th>'.
'<th>'.(' '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> </td>'.
- '<td align="right">'.
+ '<td align="right"><nobr>'.
&Apache::lonlocal::locallocaltime($BinEnd[$i]).'</td>'.
- '</td>'.
+ '</nobr></td>'.
'<td align="right">'.$Ydata[$i].(' 'x3).'</td>'.
'<td> </td>'.
- '<td align="right">'.($i>0?$AnsData[$i]-$AnsData[$i-1]:$AnsData[$i]).(' 'x3).'</td>'.
+ '<td align="right">'.$AnsData[$i].(' 'x3).'</td>'.
+ '<td> </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,