Diff for /loncom/interface/statistics/loncorrectproblemplot.pm between versions 1.1 and 1.10

version 1.1, 2004/02/02 21:45:12 version 1.10, 2004/03/08 18:42:58
Line 35  use Apache::loncoursedata(); Line 35  use Apache::loncoursedata();
 use Apache::lonstatistics;  use Apache::lonstatistics;
 use Apache::lonstathelpers;  use Apache::lonstathelpers;
 use Apache::lonlocal;  use Apache::lonlocal;
 use HTML::Entities();  
 use Time::Local();  
 use Spreadsheet::WriteExcel();  
   
 my $plotcolors = ['#33ff00',   
                   '#ff33cc', '#990000', '#aaaa66', '#663399', '#ff9933',  
                   '#66ccff', '#ff9999', '#cccc33', '#660000', '#33cc66',  
                   ];   
   
 my @SubmitButtons = (  my @SubmitButtons = (
                      { name => 'CreatePlot',                       { name => 'CreatePlot',
Line 53  my @SubmitButtons = ( Line 45  my @SubmitButtons = (
                        text => 'Update Student Data' },                         text => 'Update Student Data' },
                      );                       );
   
   #########################################################
   #########################################################
   
   =pod
   
   =item &BuildCorrectProblemsPage
   
   Entry point from lonstatistics to the correct problems plot page.
   
   =cut
   
   #########################################################
   #########################################################
   
 sub BuildCorrectProblemsPage {  sub BuildCorrectProblemsPage {
     my ($r,$c)=@_;      my ($r,$c)=@_;
     #      #
Line 65  sub BuildCorrectProblemsPage { Line 71  sub BuildCorrectProblemsPage {
     #      #
     &Apache::lonstatistics::PrepareClasslist();          &Apache::lonstatistics::PrepareClasslist();    
     #      #
     $r->print('<h2>'.&mt('Number of Correct Problems Plot').'</h2>');  
     $r->print(&CreateInterface());      $r->print(&CreateInterface());
     #      #
     my @Students = @Apache::lonstatistics::Students;      my @Students = @Apache::lonstatistics::Students;
Line 98  sub BuildCorrectProblemsPage { Line 103  sub BuildCorrectProblemsPage {
     # Determine which problem symbs we are to sum over      # Determine which problem symbs we are to sum over
     if (exists($ENV{'form.CreatePlot'})) {      if (exists($ENV{'form.CreatePlot'})) {
         my @ProblemSymbs;          my @ProblemSymbs;
           my $total_parts = 0;
           my $title = '';
         if ($Apache::lonstatistics::SelectedMaps[0] ne 'all') {          if ($Apache::lonstatistics::SelectedMaps[0] ne 'all') {
             foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()){              foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()){
                   if ($title eq '') {
                       $title = $seq->{'title'};
                   } else {
                       $title = 'Multiple Sequences';
                   }
                 foreach my $res (@{$seq->{'contents'}}) {                  foreach my $res (@{$seq->{'contents'}}) {
                     next if ($res->{'type'} ne 'assessment');                      next if ($res->{'type'} ne 'assessment');
                     foreach my $part (@{$res->{'parts'}}) {                      foreach my $part (@{$res->{'parts'}}) {
                           $total_parts++;
                         push(@ProblemSymbs,{symb=>$res->{'symb'},                          push(@ProblemSymbs,{symb=>$res->{'symb'},
                                             part=>$part});                                              part=>$part});
                     }                      }
                 }                  }
             }              }
         }          }
           my ($starttime,$endtime) = &Apache::lonstathelpers::get_time_limits();
           if (defined($starttime) || defined($endtime)) {
               # Inform the user what the time limits on the data are.
               $r->print(&mt('Statistics on submissions from [_1] to [_2]',
                             &Apache::lonlocal::locallocaltime($starttime),
                             &Apache::lonlocal::locallocaltime($endtime)));
           }
         my $score_data = &Apache::loncoursedata::get_student_scores          my $score_data = &Apache::loncoursedata::get_student_scores
             (\@Apache::lonstatistics::SelectedSections,              (\@Apache::lonstatistics::SelectedSections,
              \@ProblemSymbs,               \@ProblemSymbs,
              $Apache::lonstatistics::enrollment_status);               $Apache::lonstatistics::enrollment_status,undef,
         $r->print(&AnalyzeScoreData($score_data));               $starttime,$endtime);
           $r->print(&AnalyzeScoreData($score_data,$title,$total_parts));
     }      }
     return;      return;
 }  }
Line 123  sub BuildCorrectProblemsPage { Line 144  sub BuildCorrectProblemsPage {
   
 =pod  =pod
   
 =item   =item & AnalyzeScoreData($score_data)
   
   Analyze the result of &Apache::loncoursedata::get_student_scores() and
   return html with a plot of the data and a table of the values and bins.
   
 =cut  =cut
   
 #########################################################  #########################################################
 #########################################################  #########################################################
 sub AnalyzeScoreData {  sub AnalyzeScoreData {
     my ($score_data) = @_;      my ($score_data,$title,$total_parts) = @_;
     #      #
     # Basic check first      # Basic check first
     if (@$score_data < 1) {      if (@$score_data < 1) {
Line 141  sub AnalyzeScoreData { Line 165  sub AnalyzeScoreData {
     my $lowest  = $score_data->[0]->[0];      my $lowest  = $score_data->[0]->[0];
     $lowest = 0;      $lowest = 0;
     my $highest = $score_data->[-1]->[0];      my $highest = $score_data->[-1]->[0];
       &Apache::lonnet::logthis('highest = '.$highest);
     my $binsize = 1;      my $binsize = 1;
     if ($highest > 50) { $binsize = 2; }      if ($highest > 50) { $binsize = 2; }
     if ($highest > 100) { $binsize = 5; }      if ($highest > 100) { $binsize = 5; }
Line 153  sub AnalyzeScoreData { Line 178  sub AnalyzeScoreData {
     my @Bins = &bin_data($score_data,$binsize,$lowest,$highest);      my @Bins = &bin_data($score_data,$binsize,$lowest,$highest);
     my @Xdata; my @Ydata; my $max;      my @Xdata; my @Ydata; my $max;
     my $Str = '<table border="1">'."\n".'<tr><th>Range</th><th>Count</th></tr>'."\n";      my $Str = '<table border="1">'."\n".'<tr><th>Range</th><th>Count</th></tr>'."\n";
       my $sum = 0;
     while (my $bin = shift(@Bins)) {      while (my $bin = shift(@Bins)) {
         push (@Xdata,$bin->{'start'});          push (@Xdata,$bin->{'start'});
         push (@Ydata,$bin->{'count'});          push (@Ydata,$bin->{'count'});
           $sum += $bin->{'count'};
         if ($bin->{'count'} > $max) {          if ($bin->{'count'} > $max) {
             $max = $bin->{'count'};              $max = $bin->{'count'};
         }          }
         $Str.= '<tr><td>'.$bin->{'start'}.' - '.$bin->{'end'}.'</td>'.          $Str.= '<tr><td>'.$bin->{'start'}.' - '.$bin->{'end'}.'</td>'.
             '<td>'.$bin->{'count'}.'</td></tr>'."\n";              '<td>'.$bin->{'count'}.'</td></tr>'."\n";
     }      }
     my $title = '';      # scale max to an integer.
       $max = 5*(int($max/5)+1);
     $Str .= "</table><br />\n";      $Str .= "</table><br />\n";
     $Str = "<br />\n".&Apache::loncommon::DrawBarGraph($title,      $title = &HTML::Entities::decode($title);
                                                        'Num Correct Problems',      $Str = "<br />\n".&Apache::loncommon::DrawBarGraph($title.' N = '.$sum,
                                    'Num Correct Problems (max:'.$total_parts.')',
                                                        'Number of students',                                                         'Number of students',
                                                        $max,                                                         $max,
                                                        undef, # colors                                                         undef, # colors
Line 208  sub bin_data { Line 237  sub bin_data {
     my @Bins;      my @Bins;
     my $count=0;      my $count=0;
     my $idx=0;      my $idx=0;
     while ($idx < scalar(@$data) && ($binend-$endbin)<$binsize) {      while ($idx < scalar(@$data) && ($endbin-$binend + $binsize)>0) {
         my $dataset = $data->[$idx++];          my $dataset = $data->[$idx++];
         my ($x,$y) = @{$dataset};          my ($x,$y) = @{$dataset};
         while ($x > $binend) {          while ($x > ($binend-.001)) {
             # store the old data              # store the old data
             push (@Bins,{ start => $binstart,              push (@Bins,{ start => $binstart,
                           count => $count,                            count => $count,
Line 223  sub bin_data { Line 252  sub bin_data {
         }          }
         $count+=$y;          $count+=$y;
     }      }
       if ($count > 0) {
           push (@Bins,{ start => $binstart,
                         count => $count,
                         end   => $binend });
       }
     return @Bins;      return @Bins;
 }  }
   
Line 231  sub bin_data { Line 265  sub bin_data {
   
 =pod  =pod
   
 =item   =item &CreateInterface
   
   Inputs: none.
   
   Returns: HTML for the correct problems plot interface.
   
 =cut  =cut
   
Line 241  sub CreateInterface { Line 279  sub CreateInterface {
     ##      ##
     ## Environment variable initialization      ## Environment variable initialization
     my $Str;      my $Str;
       $Str .= &Apache::lonhtmlcommon::breadcrumbs
           (undef,'Correct Problems Plot');
     $Str .= '<table cellspacing="5">'."\n";      $Str .= '<table cellspacing="5">'."\n";
     $Str .= '<tr>';      $Str .= '<tr>';
     $Str .= '<td align="center"><b>'.&mt('Sections').'</b></td>';      $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('Enrollment Status').'</b></td>';
     $Str .= '<td align="center"><b>'.&mt('Sequences and Folders').'</b></td>';      $Str .= '<td align="center"><b>'.&mt('Sequences and Folders').'</b></td>';
       $Str .= '<td rowspan="2">'.
           &Apache::lonstathelpers::limit_by_time_form().'</td>';
     $Str .= '</tr>'."\n";      $Str .= '</tr>'."\n";
     ##      ##
     ##       ## 
Line 267  sub CreateInterface { Line 309  sub CreateInterface {
     };      };
     $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,      $Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
                                               $only_seq_with_assessments);                                                $only_seq_with_assessments);
     $Str .= '</td><td>'."\n";      $Str .= '</td>';
       #
     ##      ##
     $Str .= '</tr>'."\n";      $Str .= '</tr>'."\n";
     $Str .= '</table>'."\n";      $Str .= '</table>'."\n";

Removed from v.1.1  
changed lines
  Added in v.1.10


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>