version 1.18, 2005/02/28 20:16:03
|
version 1.21, 2005/03/10 17:06:21
|
Line 37 use Apache::lonstathelpers;
|
Line 37 use Apache::lonstathelpers;
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use HTML::Entities(); |
use HTML::Entities(); |
use Time::Local(); |
use Time::Local(); |
use Spreadsheet::WriteExcel(); |
|
|
|
my $plotcolors = ['#33ff00', |
my $plotcolors = ['#33ff00', |
'#ff33cc', '#990000', '#aaaa66', '#663399', '#ff9933', |
'#ff33cc', '#990000', '#aaaa66', '#663399', '#ff9933', |
Line 201 sub analyze_times {
|
Line 200 sub analyze_times {
|
my @Xlabel=($WeekDay[$wday]); # Labels of itmes |
my @Xlabel=($WeekDay[$wday]); # Labels of itmes |
my @BinEnd; # The end time of each bin |
my @BinEnd; # The end time of each bin |
my $cumulative_answers = 0; # The sum of @AnsData |
my $cumulative_answers = 0; # The sum of @AnsData |
|
my %students; # which students have attempted the problem? |
# |
# |
foreach my $row (@$SubData) { |
foreach my $row (@$SubData) { |
my $subtime = &get_time_from_row($row); |
my $subtime = &get_time_from_row($row); |
Line 223 sub analyze_times {
|
Line 223 sub analyze_times {
|
$max = $Ydata[$bincount] if ($max < $Ydata[$bincount]); |
$max = $Ydata[$bincount] if ($max < $Ydata[$bincount]); |
$AnsData[$bincount] += &successful_submission($row); |
$AnsData[$bincount] += &successful_submission($row); |
$cumulative_answers += &successful_submission($row); |
$cumulative_answers += &successful_submission($row); |
|
$students{$row->[&Apache::loncoursedata::RT_student_id()]}++; |
} |
} |
# |
# |
# Pad the data to a full day |
# Pad the data to a full day |
Line 240 sub analyze_times {
|
Line 241 sub analyze_times {
|
$Xlabel[$bincount] = ''; |
$Xlabel[$bincount] = ''; |
} |
} |
} |
} |
my $numstudents = scalar(@$students); |
my $numstudents = scalar(keys(%students)); |
# |
# |
# Determine a nice maximum value to use |
# Determine a nice maximum value to use |
foreach my $maximum (10,15,20,25,30,40,50,60,70,80,90,100, |
foreach my $maximum (10,15,20,25,30,40,50,60,70,80,90,100, |
Line 262 sub analyze_times {
|
Line 263 sub analyze_times {
|
'<th valign="bottom">'.&mt('Begin').'</th>'. |
'<th valign="bottom">'.&mt('Begin').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th valign="bottom">'.&mt('End').'</th>'. |
'<th valign="bottom">'.&mt('End').'</th>'. |
'<th valign="bottom">'.&mt('Submissions').'</th>'. |
'<th valign="bottom">'.&mt('Submissions (plotted)').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th valign="bottom">'.&mt('Correct Submissions').'</th>'. |
'<th valign="bottom">'.&mt('Correct Submissions (not plotted)').'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th>'.(' 'x3).'</th>'. |
'<th valign="bottom">'.&mt('Cumulative Percent Correct').'</th>'. |
'<th valign="bottom">'.&mt('Cumulative Correct of those attempting the problem (not plotted)').'</th>'. |
|
'<th>'.(' 'x3).'</th>'. |
|
'<th valign="bottom">'.&mt('Cumulative Percent Correct of those attempting the problem (not plotted)').'</th>'. |
|
'<th>'.(' 'x3).'</th>'. |
|
'<th valign="bottom">'.&mt('Cumulative Percent Correct of selected students (plotted)').'</th>'. |
'</tr>'. |
'</tr>'. |
'</thead>'. |
'</thead>'. |
'<tbody>'; |
'<tbody>'; |
my @CumulativeCorrect=(0); |
my @CumulativeCorrect=(0); |
my @CumulativeCorrectPercent; |
my @corr_as_percent_of_selected; |
|
my @corr_as_percent_of_answering; |
for (my $i=0;$i<=$#Ydata;$i++) { |
for (my $i=0;$i<=$#Ydata;$i++) { |
$CumulativeCorrect[$i]=$CumulativeCorrect[-1]+$AnsData[$i]; |
$CumulativeCorrect[$i]=$CumulativeCorrect[-1]+$AnsData[$i]; |
$CumulativeCorrectPercent[$i] = (int(100*$CumulativeCorrect[$i]/$numstudents)); |
$corr_as_percent_of_answering[$i] = |
|
sprintf('%3.1f',100*$CumulativeCorrect[$i]/$numstudents); |
|
$corr_as_percent_of_selected[$i] = |
|
sprintf('%3.1f',100*$CumulativeCorrect[$i]/scalar(@$students)); |
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 .= |
Line 290 sub analyze_times {
|
Line 299 sub analyze_times {
|
'<td> </td>'. |
'<td> </td>'. |
'<td align="right">'.$AnsData[$i].(' 'x3).'</td>'. |
'<td align="right">'.$AnsData[$i].(' 'x3).'</td>'. |
'<td> </td>'. |
'<td> </td>'. |
'<td align="right">'.$CumulativeCorrectPercent[$i].'</td>'. |
'<td align="right">'.$CumulativeCorrect[$i].'</td>'. |
|
'<td> </td>'. |
|
'<td align="right">'.$corr_as_percent_of_answering[$i].'</td>'. |
|
'<td> </td>'. |
|
'<td align="right">'.$corr_as_percent_of_selected[$i].'</td>'. |
'</tr>'.$/; |
'</tr>'.$/; |
} |
} |
} |
} |
Line 316 sub analyze_times {
|
Line 329 sub analyze_times {
|
$plotcolors, |
$plotcolors, |
\@Xlabel, |
\@Xlabel, |
\@Ydata,0,$max, |
\@Ydata,0,$max, |
\@CumulativeCorrectPercent,0,100, |
\@corr_as_percent_of_selected,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, |
Line 337 sub successful_submission {
|
Line 350 sub successful_submission {
|
return $row->[&Apache::loncoursedata::RT_awarded()]; |
return $row->[&Apache::loncoursedata::RT_awarded()]; |
} |
} |
return undef; |
return undef; |
return 0; |
|
} |
} |
|
|
sub get_time_from_row { |
sub get_time_from_row { |