version 1.16, 2004/06/25 18:23:02
|
version 1.17, 2004/07/06 16:01:48
|
Line 193 sub analyze_times {
|
Line 193 sub analyze_times {
|
my $endtime = $day_start; |
my $endtime = $day_start; |
# |
# |
# Initialize loop variables |
# Initialize loop variables |
my $max; |
my $max; # The sum of @Ydata |
my @Ydata=(0); |
my @Ydata=(0); # number of submissions |
my @AnsData=(0); |
my @AnsData=(0); # number of correct submissions |
my @Xlabel=($WeekDay[$wday]); |
my @Xlabel=($WeekDay[$wday]); # Labels of itmes |
my @BinEnd; |
my @BinEnd; # The end time of each bin |
my $cumulative_answers = 0; |
my $cumulative_answers = 0; # The sum of @AnsData |
# |
# |
foreach my $row (@$SubData) { |
foreach my $row (@$SubData) { |
my $subtime = &get_time_from_row($row); |
my $subtime = &get_time_from_row($row); |
while ($subtime > $endtime && $endtime < time) { |
while ($subtime > $endtime && $endtime < time) { |
# Create a new bin |
# Create a new bin |
$bincount++; |
$bincount++; |
$Ydata[$bincount]=0; |
$Ydata[$bincount] = 0; |
$AnsData[$bincount]=$AnsData[$bincount-1]; |
$AnsData[$bincount] = 0; |
$endtime += $binsize; |
$endtime += $binsize; |
push(@BinEnd,$endtime); |
push(@BinEnd,$endtime); |
if ($bincount % (86400/$binsize) == 0) { |
if ($bincount % (86400/$binsize) == 0) { |
Line 222 sub analyze_times {
|
Line 222 sub analyze_times {
|
$AnsData[$bincount] += &successful_submission($row); |
$AnsData[$bincount] += &successful_submission($row); |
$cumulative_answers += &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, |
# Pad the data to a full day |
600,700,800,900,1000,1100,1200,1500,2000, |
|
2500,3000,4000,5000) { |
|
if ($max < $maximum) { |
|
$max = $maximum; |
|
last; |
|
} |
|
} |
|
while ($bincount % $bins_per_day != 0) { |
while ($bincount % $bins_per_day != 0) { |
$bincount++; |
$bincount++; |
$Ydata[$bincount]=0; |
$Ydata[$bincount]=0; |
$AnsData[$bincount]=$AnsData[$bincount-1]; |
$AnsData[$bincount]=0; |
$endtime += $binsize; |
$endtime += $binsize; |
|
push(@BinEnd,$endtime); |
if ($bincount % (86400/$binsize) == 0) { |
if ($bincount % (86400/$binsize) == 0) { |
$wday ++; |
$wday ++; |
$wday %= 7; |
$wday %= 7; |
Line 245 sub analyze_times {
|
Line 239 sub analyze_times {
|
} |
} |
} |
} |
my $numstudents = scalar(@$students); |
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>'. |
$htmltable = '<p>'. |
'<table rules="groups" frame="border" '. |
'<table rules="groups" frame="border" '. |
'summary="Student submission data">'. |
'summary="Student submission data">'. |
'<thead>'. |
'<thead>'. |
'<tr>'. |
'<tr>'. |
'<th valign="bottom">'.&mt('Begin Date').'</th>'. |
'<th valign="bottom">'.&mt('Begin').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th valign="bottom">'.&mt('End Date').'</th>'. |
'<th valign="bottom">'.&mt('End').'</th>'. |
'<th valign="bottom">'.&mt('Submissions').'</th>'. |
'<th valign="bottom">'.&mt('Submissions').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th valign="bottom">'.&mt('Correct<br />Submissions').'</th>'. |
'<th valign="bottom">'.&mt('Correct Submissions').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th valign="bottom">'.&mt('Percent<br />Correct').'</th>'. |
'<th valign="bottom">'.&mt('Cumulative Percent Correct').'</th>'. |
'</tr>'. |
'</tr>'. |
'</thead>'. |
'</thead>'. |
'<tbody>'; |
'<tbody>'; |
for (my $i=0;$i<=$#AnsData;$i++) { |
my @CumulativeCorrect=(0); |
$AnsData[$i] = int(100*($AnsData[$i]/$numstudents)); |
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) { |
if ($Ydata[$i] != 0) { |
next if (! defined($BinEnd[$i]) || $BinEnd[$i] == 0); |
next if (! defined($BinEnd[$i]) || $BinEnd[$i] == 0); |
$htmltable .= |
$htmltable .= |
'<tr>'. |
'<tr>'. |
'<td align="right">'. |
'<td align="right"><nobr>'. |
&Apache::lonlocal::locallocaltime($BinEnd[$i]-$binsize). |
&Apache::lonlocal::locallocaltime($BinEnd[$i]-$binsize). |
'</td>'. |
'</nobr></td>'. |
'<td> </td>'. |
'<td> </td>'. |
'<td align="right">'. |
'<td align="right"><nobr>'. |
&Apache::lonlocal::locallocaltime($BinEnd[$i]).'</td>'. |
&Apache::lonlocal::locallocaltime($BinEnd[$i]).'</td>'. |
'</td>'. |
'</nobr></td>'. |
'<td align="right">'.$Ydata[$i].(' 'x3).'</td>'. |
'<td align="right">'.$Ydata[$i].(' 'x3).'</td>'. |
'<td> </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>'.$/; |
'</tr>'.$/; |
} |
} |
} |
} |
$htmltable .= '</tbody></table></p>'; |
$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; |
my $xlabel; |
(undef,undef,undef,$mday,$month,$year,$wday) = localtime($day_start); |
(undef,undef,undef,$mday,$month,$year,$wday) = localtime($day_start); |
$xlabel .= $FullWeekDay[$wday].' '. |
$xlabel .= $FullWeekDay[$wday].' '. |
Line 293 sub analyze_times {
|
Line 307 sub analyze_times {
|
if ($width < 250) { |
if ($width < 250) { |
$width = 250; |
$width = 250; |
} |
} |
|
# |
$html .= &Apache::loncommon::DrawXYYGraph($title, |
$html .= &Apache::loncommon::DrawXYYGraph($title, |
$xlabel, |
$xlabel, |
'Submissions vs Time', |
'Submissions vs Time', |
$plotcolors, |
$plotcolors, |
\@Xlabel, |
\@Xlabel, |
\@Ydata, |
\@Ydata,0,$max, |
0,$max, |
\@CumulativeCorrectPercent,0,100, |
\@AnsData, |
|
0,100, |
|
(xskip => $bins_per_day, |
(xskip => $bins_per_day, |
x_ticks => $bins_per_day, |
x_ticks => $bins_per_day, |
x_tick_offset => $bins_per_day, |
x_tick_offset => $bins_per_day, |