[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemanalysis.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Fri, 10 Oct 2003 21:45:34 -0000
This is a MIME encoded message
--matthew1065822334
Content-Type: text/plain
matthew Fri Oct 10 17:45:34 2003 EDT
Modified files:
/loncom/interface/statistics lonproblemanalysis.pm
Log:
Major interface changes. Still only do tries. Do not print problem
selection dialogs when we are already looking at a problem, added a
button to get to a page where you can select a problem. Let the user
select the number of graphs to display. Hope to add Excel & csv data
file generation too, but not today.
--matthew1065822334
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20031010174534.txt"
Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.30 loncom/interface/statistics/lonproblemanalysis.pm:1.31
--- loncom/interface/statistics/lonproblemanalysis.pm:1.30 Fri Oct 10 09:47:48 2003
+++ loncom/interface/statistics/lonproblemanalysis.pm Fri Oct 10 17:45:34 2003
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonproblemanalysis.pm,v 1.30 2003/10/10 13:47:48 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.31 2003/10/10 21:45:34 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -42,7 +42,19 @@
#
my @Students = @Apache::lonstatistics::Students;
#
- if (exists($ENV{'form.problemchoice'})) {
+ if (exists($ENV{'form.problemchoice'}) && !exists($ENV{'SelectAnother'})) {
+ $r->print('<input type="submit" name="ProblemAnalysis" value="'.
+ &mt('Analyze Problem Again').'" />');
+ $r->print(' 'x5);
+ $r->print('<input type="submit" name="ClearCache" value="'.
+ &mt('Clear Caches').'" />');
+ $r->print(' 'x5);
+ $r->print('<input type="hidden" name="problemchoice" value="'.
+ $ENV{'form.problemchoice'}.'" />');
+ $r->print('<input type="submit" name="SelectAnother" value="'.
+ &mt('Choose a different resource').'" />');
+ $r->print(' 'x5);
+ #
$r->print('<hr />');
&Apache::lonstatistics::Gather_Full_Student_Data($r);
#
@@ -50,9 +62,6 @@
&Apache::lonnet::unescape($ENV{'form.problemchoice'})
);
#
-# my ($firsttime,$lasttime) =
-# &Apache::loncoursedata::get_timestamp_data($symb,$resid);
- #
my $resource = &get_resource_from_symb($symb);
if (defined($resource)) {
my %Data = &get_problem_data($resource->{'src'});
@@ -101,61 +110,56 @@
}
$r->print('<hr />');
} else {
+ $r->print('<input type="submit" name="ProblemAnalysis" value="'.
+ &mt('Analyze Problem').'" />');
+ $r->print(' 'x5);
$r->print('<h3>'.&mt('Please select a problem to analyze').'</h3>');
+ $r->print(&OptionResponseProblemSelector());
}
- # Okay, they asked for data, so make sure we get the latest data.
- $r->print(&OptionResponseProblemSelector());
}
sub DoTriesAnalysis {
my ($PerformanceData,$ORdata) = @_;
my $mintries = 1;
- my $maxtries = 10;
+ my $maxtries = $ENV{'form.NumPlots'};
my %ResponseData = &analyze_option_data_by_tries($PerformanceData,
$mintries,$maxtries);
my @Foils = sort(keys(%ResponseData));
my %Row_Label;
foreach my $foilid (@Foils) {
my $value = $ORdata->{'Foiltext'}->{$foilid};
-# &Apache::lonnet::logthis('row label '.$foilid.' = '.$value);
$Row_Label{$foilid} = $ORdata->{'Foiltext'}->{$foilid};
}
+ #
+ # Build up the table of row labels.
my @Rows;
- $Rows[0] = ['<td> </td>'];
- for (my $i=$mintries;$i<=$maxtries;$i++) {
- push (@{$Rows[0]},
- '<th colspan="3">'.&mt('Attempt').' '.$i.'</th>');
- }
- $Rows[1] = ['<th>'.&mt('Foil').'</th>'];
- for (my $i=$mintries;$i<=$maxtries;$i++) {
- push (@{$Rows[1]},('<th>'.&mt('Correct').'</th>',
- '<th>'.&mt('Incorrect').'</th>',
- '<th>'.&mt('Percent Correct').'</th>',
- ));
+ $Rows[0]= [ '<th>'.&mt('Foil Number').'</th>',
+ '<th>'.&mt('Foil Text').'</td>'];
+ my $table = '<table border="1" >'."\n";
+ my $index = 1;
+ foreach my $foilid (@Foils) {
+ $table .= '<tr><td>'.$index.'</td>'.
+ '<td>'.$Row_Label{$foilid}."</td></tr>\n";
+ } continue {
+ $index++;
}
+ $table .= "</table>\n";
+ #
+ # Compute the data neccessary to make the plots
my @PlotData;
my @CumulativePlotData;
- my $index = 1;
foreach my $foilid (@Foils) {
- my @Data = ('<td>'.$index.' '.$Row_Label{$foilid}.'</td>');
for (my $i=$mintries;$i<=$maxtries;$i++) {
- push(@Data,
- ('<td>'.$ResponseData{$foilid}->[$i]->{'correct'}.'</td>',
- '<td>'.$ResponseData{$foilid}->[$i]->{'incorrect'}.
- '</td>',
- '<td>'.
- sprintf("%4.2f",
- $ResponseData{$foilid}->[$i]->{'percent_corr'}).
- '</td>'));
#
# Gather the per-attempt data
push (@{$PlotData[$i]->{'good'}},
$ResponseData{$foilid}->[$i]->{'percent_corr'});
push (@{$PlotData[$i]->{'bad'}},
100-$ResponseData{$foilid}->[$i]->{'percent_corr'});
- }
- for (my $i=0;$i<=$maxtries;$i++) {
+ #
+ # Someday we may need the cumulative data and I think
+ # this is a neat way of computing it as we go along.
push (@{$CumulativePlotData[$i]->{'good'}},
$CumulativePlotData[-1]->{'good'}+
$ResponseData{$foilid}->[$i]->{'correct'});
@@ -163,11 +167,11 @@
$CumulativePlotData[-1]->{'bad'}+
$ResponseData{$foilid}->[$i]->{'incorrect'});
}
- push(@Rows,\@Data);
- } continue {
- $index++;
}
- my @Data = ('<td></td>');
+ #
+ # Build a table for the plots
+ $table .= "<table>\n";
+ my @Plots;
for (my $i=$mintries;$i<=$maxtries;$i++) {
my $minstu = $ResponseData{$Foils[0]}->[$i]->{'total'};
my $maxstu = $ResponseData{$Foils[0]}->[$i]->{'total'};
@@ -200,14 +204,23 @@
$PlotData[$i]->{'good'},
$PlotData[$i]->{'bad'});
}
- push(@Data,'<td colspan="3">'.$graphlink.'</td>');
+ push(@Plots,$graphlink);
}
- push (@Rows,\@Data);
- my $table = '<table border="1" >'."\n";
- for (my $i=0; $i <=$#Rows;$i++) {
- $table .= '<tr>'.join('',@{$Rows[$i]})."</tr>\n";
+ #
+ # Should this be something the user can set? Too many dialogs!
+ my $plots_per_row = 2;
+ while (my $plotlink = shift(@Plots)) {
+ $table .= '<tr><td>'.$plotlink.'</td>';
+ for (my $i=1;$i<$plots_per_row;$i++) {
+ if ($plotlink = shift(@Plots)) {
+ $table .= '<td>'.$plotlink.'</td>';
+ } else {
+ $table .= '<td></td>';
+ }
+ }
+ $table .= "</tr>\n";
}
- $table .= '</table>';
+ $table .= "</table>\n";
return ($table);
}
@@ -270,10 +283,11 @@
$Str .= '<tr>';
$Str .= '<td align="center"><b>'.&mt('Sections').'</b></td>';
$Str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>';
- $Str .= '<td align="center"><b>'.&mt('Sequences and Folders').'</b></td>';
- $Str .= '<td align="center"><b>'.&mt('Analyze By').'</b></td>';
+# $Str .= '<td align="center"><b>'.&mt('Sequences and Folders').'</b></td>';
+ $Str .= '<td align="center"> </td>';
$Str .= '</tr>'."\n";
- #
+ ##
+ ##
$Str .= '<tr><td align="center">'."\n";
$Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
$Str .= '</td>';
@@ -282,7 +296,7 @@
$Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
$Str .= '</td>';
#
- $Str .= '<td align="center">';
+# $Str .= '<td align="center">';
my $only_seq_with_assessments = sub {
my $s=shift;
if ($s->{'num_assess'} < 1) {
@@ -291,31 +305,43 @@
return 1;
}
};
- $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
+ &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
$only_seq_with_assessments);
- $Str .= '</td>';
+# $Str .= '</td>';
#
$Str .= '<td>';
- $Str .='<input type="radio" name="AnalyzeBy" value="Tries" ';
- if ($ENV{'form.AnalyzeBy'} eq 'Tries') {
- $Str .= 'checked ';
- }
- $Str .= '>'.&mt('Tries').'<br />';
- $Str .='<input type="radio" name="AnalyzeBy" value="Time" ';
- if ($ENV{'form.AnalyzeBy'} eq 'Time') {
- $Str .= 'checked ';
+ $Str .= '<nobr>'.&mt('Analyze By ');
+ $Str .='<select name="AnalyzeBy" >';
+ #
+ $Str .= '<option value="Tries" ';
+ if (! exists($ENV{'form.AnalyzeBy'}) || $ENV{'form.AnalyzeBy'} eq 'Tries'){
+ # Default to Tries
+ $Str .= ' selected ';
+ }
+ $Str .= '>'.&mt('Tries').'</option>';
+ #
+ $Str .= '<option value="Time" ';
+ $Str .= ' selected ' if ($ENV{'form.AnalyzeBy'} eq 'Time');
+ $Str .= '>'.&mt('Time').'</option>';
+ $Str .= '</select></nobr><br />';
+ #
+ $Str .= '<br /><nobr>'.&mt('Number of Plots:');
+ $Str .= '<select name="NumPlots">';
+ if (! exists($ENV{'form.NumPlots'})
+ || $ENV{'form.NumPlots'} < 1
+ || $ENV{'form.NumPlots'} > 20) {
+ $ENV{'form.NumPlots'} = 7;
+ }
+ foreach my $i (1,2,3,4,5,6,7,8,10,15,20) {
+ $Str .= '<option value="'.$i.'" ';
+ if ($ENV{'form.NumPlots'} == $i) { $Str.=' selected '; }
+ $Str .= '>'.$i.'</option>';
}
- $Str .= '>'.&mt('Time').'<br />';
+ $Str .= '</select></nobr>';
$Str .= '</td>';
#
$Str .= '</tr>'."\n";
$Str .= '</table>'."\n";
- $Str .= '<input type="submit" name="ProblemAnalysis" value="'.
- &mt('Analyze Problem').'" />';
- $Str .= ' 'x5;
- $Str .= '<input type="submit" name="ClearCache" value="'.
- &mt('Clear Caches').'" />';
- $Str .= ' 'x5;
return ($Str);
}
--matthew1065822334--