Diff for /loncom/interface/statistics/lonproblemanalysis.pm between versions 1.142.2.5 and 1.143

version 1.142.2.5, 2020/11/12 00:15:27 version 1.143, 2012/12/17 03:51:02
Line 31  use Apache::lonnet; Line 31  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::loncoursedata();  use Apache::loncoursedata();
   use Apache::lonquickgrades();
 use Apache::lonstatistics;  use Apache::lonstatistics;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonstathelpers();  use Apache::lonstathelpers();
Line 74  sub BuildProblemAnalysisPage { Line 75  sub BuildProblemAnalysisPage {
     &Apache::lonstatistics::PrepareClasslist();      &Apache::lonstatistics::PrepareClasslist();
     #      #
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Detailed Problem Analysis'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Detailed Problem Analysis'));
       &Apache::lonquickgrades::startGradeScreen($r,'statistics');
   
     $r->print(&CreateInterface());      $r->print(&CreateInterface());
     #      #
Line 90  sub BuildProblemAnalysisPage { Line 92  sub BuildProblemAnalysisPage {
         &Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');          &Apache::lonstathelpers::manage_caches($r,'Statistics','stats_status');
     $r->rflush();      $r->rflush();
     #      #
     my $problem_types = &analyzable_types();      my $problem_types = '(option|radiobutton|numerical)';
     if (exists($env{'form.problemchoice'}) &&       if (exists($env{'form.problemchoice'}) && 
         ! exists($env{'form.SelectAnother'})) {          ! exists($env{'form.SelectAnother'})) {
         foreach my $button (@SubmitButtons) {          foreach my $button (@SubmitButtons) {
Line 116  sub BuildProblemAnalysisPage { Line 118  sub BuildProblemAnalysisPage {
         $r->rflush();          $r->rflush();
         #          #
         # Determine which problem we are to analyze          # Determine which problem we are to analyze
         my ($navmap,$current_problem) = &get_current_problem(); # need to retrieve $navmap          my $current_problem = &Apache::lonstathelpers::get_target_from_id
                                                                 # to support $resource->* calls              ($env{'form.problemchoice'});
                                                                 # for src and compTitle (below)          #
           my ($navmap,$prev,$curr,$next) = 
               &Apache::lonstathelpers::get_prev_curr_next($current_problem,
                                                           $problem_types,
                                                           'response',
                                                           );
           if (exists($env{'form.PrevProblemAnalysis'}) && defined($prev)) {
               $current_problem = $prev;
           } elsif (exists($env{'form.NextProblemAnalysis'}) && defined($next)) {
               $current_problem = $next;
           } else {
               $current_problem = $curr;
           }
         #          #
         # Store the current problem choice and send it out in the form          # Store the current problem choice and send it out in the form
         $env{'form.problemchoice'} =           $env{'form.problemchoice'} = 
Line 179  sub BuildProblemAnalysisPage { Line 193  sub BuildProblemAnalysisPage {
     }      }
 }  }
   
 sub analyzable_types {  
     return '(option|radiobutton|numerical)';  
 }  
   
 sub get_current_problem {  
     my ($problem_types) = @_;  
     my $current_problem = &Apache::lonstathelpers::get_target_from_id  
         ($env{'form.problemchoice'});  
     my ($navmap,$prev,$curr,$next) =  
         &Apache::lonstathelpers::get_prev_curr_next($current_problem,  
                                                     $problem_types,  
                                                     'response');  
     if (exists($env{'form.PrevProblemAnalysis'}) && ($prev ne '')) {  
         $current_problem = $prev;  
     } elsif (exists($env{'form.NextProblemAnalysis'}) && ($next ne '')) {  
         $current_problem = $next;  
     } else {  
         $current_problem = $curr;  
     }  
     return ($navmap,$current_problem);  
 }  
   
 #########################################################  #########################################################
 #########################################################  #########################################################
 ##  ##
Line 408  sub numerical_plot_percent { Line 400  sub numerical_plot_percent {
         if ($max <$_) { $max = $_; last; }          if ($max <$_) { $max = $_; last; }
     }      }
     #      #
     my %lt = &Apache::lonlocal::texthash(      my $title = &mt('Percent Difference');
                  'title'  => 'Percent Difference',  
                  'xlabel' => 'Percent Difference from Correct',  
                  'ylabel' => 'Percent of Answers');  
     my @labels = (1..scalar(@bins)-1);      my @labels = (1..scalar(@bins)-1);
     my $graph = &Apache::loncommon::DrawBarGraph      my $graph = &Apache::loncommon::DrawBarGraph
         ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},          ($title,'Percent Difference from Correct','Percent of Answers',
          $max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect,           $max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect,
          {xskip=>1});           {xskip=>1});
     #      #
Line 484  sub numerical_plot_differences { Line 473  sub numerical_plot_differences {
         if ($max <$_) { $max = $_; last; }          if ($max <$_) { $max = $_; last; }
     }      }
     #      #
     my %lt = &Apache::lonlocal::texthash(      my $title = &mt('Difference between submission and correct');
                  'title'  => 'Difference between submission and correct',  
                  'xlabel' => 'Difference from Correct',  
                  'ylabel' => 'Percent of Answers');  
     my @labels = (1..scalar(@bins)-1);      my @labels = (1..scalar(@bins)-1);
     my $graph = &Apache::loncommon::DrawBarGraph      my $graph = &Apache::loncommon::DrawBarGraph
         ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},          ($title,'Difference from Correct','Percent of Answers',
          $max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect,           $max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect,
          {xskip=>1});           {xskip=>1});
     #      #
Line 872  sub radio_response_analysis { Line 858  sub radio_response_analysis {
             $no_data_text,@extra_data);              $no_data_text,@extra_data);
         if ($env{'form.AnalyzeOver'} eq 'tries') {          if ($env{'form.AnalyzeOver'} eq 'tries') {
             $restriction_function = sub {($_[0]->{'tries'} == $plot_num?1:0)};              $restriction_function = sub {($_[0]->{'tries'} == $plot_num?1:0)};
             $correct_foil_title = &mt('Attempt [_1]',$plot_num);              $correct_foil_title = 'Attempt '.$plot_num;
             $incorrect_foil_title = &mt('Attempt [_1]',$plot_num);              $incorrect_foil_title = 'Attempt '.$plot_num;
             $pre_graph_text =               $pre_graph_text = 
                 'Attempt [_1], [_2] submissions, [_3] correct, [_4] incorrect';                  'Attempt [_1], [_2] submissions, [_3] correct, [_4] incorrect';
             $post_graph_text = '';              $post_graph_text = '';
Line 931  sub radio_response_analysis { Line 917  sub radio_response_analysis {
         # Concept Plot          # Concept Plot
         my $concept_plot = '';          my $concept_plot = '';
         if (scalar(@$concepts) > 1) {          if (scalar(@$concepts) > 1) {
             my $title = &mt('Correct Concepts');  
             $concept_plot = &RR_concept_plot($concepts,$foil_choice_data,              $concept_plot = &RR_concept_plot($concepts,$foil_choice_data,
                                              $title);                                               'Correct Concepts');
         }          }
         # % Choosing plot          # % Choosing plot
         my $choice_plot = &RR_create_percent_selected_plot          my $choice_plot = &RR_create_percent_selected_plot
Line 1048  sub RR_concept_plot { Line 1033  sub RR_concept_plot {
     for (my $i=0;$i<=$#correct;$i++) {       for (my $i=0;$i<=$#correct;$i++) { 
         $correct[$i] = sprintf('%0f',$correct[$i]/$total*100);          $correct[$i] = sprintf('%0f',$correct[$i]/$total*100);
     }      }
     my $xlabel = &mt('concept');      my $xlabel = 'concept';
     my $ylabel = &mt('Percent Choosing');  
     my $plot=  &Apache::loncommon::DrawBarGraph($title,      my $plot=  &Apache::loncommon::DrawBarGraph($title,
                                                 $xlabel,                                                  $xlabel,
                                                 $ylabel,                                                  'Percent Choosing',
                                                 100,                                                  100,
                                                 ['#33ff00','#ff3300'],                                                  ['#33ff00','#ff3300'],
                                                 undef,                                                  undef,
Line 1118  sub RR_create_percent_selected_plot { Line 1102  sub RR_create_percent_selected_plot {
         @labels = (1 .. scalar(@correct));          @labels = (1 .. scalar(@correct));
     }      }
     #      #
     my $xlabel = &mt('foil chosen');      my $xlabel = 'foil chosen';
     my $ylabel = &mt('Percent Choosing');  
     my $plot=  &Apache::loncommon::DrawBarGraph($title,      my $plot=  &Apache::loncommon::DrawBarGraph($title,
                                                 $xlabel,                                                  $xlabel,
                                                 $ylabel,                                                  'Percent Choosing',
                                                 100,                                                  100,
                                                 ['#33ff00','#ff3300'],                                                  ['#33ff00','#ff3300'],
                                                 \@labels,                                                  \@labels,
Line 1183  sub RR_create_stacked_selection_plot { Line 1166  sub RR_create_stacked_selection_plot {
         push(@empty_row,0);          push(@empty_row,0);
     }      }
     #      #
     my $xlabel = &mt('Correct Foil');  
     my $ylabel = &mt('foils chosen Incorrectly');  
     my $graph = &Apache::loncommon::DrawBarGraph      my $graph = &Apache::loncommon::DrawBarGraph
         ($title,$xlabel,$ylabel,          ($title,'Correct Foil','foils chosen Incorrectly',
          100,$plotcolors,\@labels,\@empty_row,@dataset);           100,$plotcolors,\@labels,\@empty_row,@dataset);
     return ($graph,\%count_per_foil);      return ($graph,\%count_per_foil);
 }  }
Line 1270  sub OptionResponseAnalysis { Line 1251  sub OptionResponseAnalysis {
             $r->print($analysis_html);              $r->print($analysis_html);
             $r->rflush();              $r->rflush();
         } else {          } else {
             $r->print('<div class="LC_warning"'              $r->print('div class="LC_warning"'
                      .&mt('The analysis you have selected is not supported at this time.')                       .&mt('The analysis you have selected is not supported at this time.')
                      .'</div>'                       .'</div>'
             );              );
Line 1382  sub OR_tries_analysis { Line 1363  sub OR_tries_analysis {
                 }                  }
             }              }
             #              #
             my %lt = &Apache::lonlocal::texthash(  
                          'title'  => 'Correct Concepts',  
                          'xlabel' => 'Concept Number',  
                          'ylabel' => 'Percent Correct');  
             $concept_graph = &Apache::loncommon::DrawBarGraph              $concept_graph = &Apache::loncommon::DrawBarGraph
                 ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},                  ('Correct Concepts','Concept Number','Percent Correct',
                  100,$plotcolors,undef,\@concept_plot_data,{xskip=>1});                   100,$plotcolors,undef,\@concept_plot_data,{xskip=>1});
         }          }
         #          #
Line 1425  sub OR_tries_analysis { Line 1402  sub OR_tries_analysis {
             push(@Labels,'');              push(@Labels,'');
         }          }
         #          #
        my %lt = &Apache::lonlocal::texthash(  
                     'title'  => 'Correct Statements',  
                     'xlabel' => 'Statement',  
                     'ylabel' => '% Answered Correct');  
         my $correct_graph = &Apache::loncommon::DrawBarGraph          my $correct_graph = &Apache::loncommon::DrawBarGraph
             ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},              ('Correct Statements','Statement','% Answered Correct',
              100,$plotcolors,\@Labels,$Datasets[0],{xskip=>1});               100,$plotcolors,\@Labels,$Datasets[0],{xskip=>1});
                   
         #          #
Line 1441  sub OR_tries_analysis { Line 1414  sub OR_tries_analysis {
         }          }
         my $count = $response_data{'_total'}->[$try] -           my $count = $response_data{'_total'}->[$try] - 
                                            $response_data{'_correct'}->[$try];                                             $response_data{'_correct'}->[$try];
         %lt = &Apache::lonlocal::texthash(  
                   'title'  => 'Incorrect Statements',  
                   'xlabel' => 'Statement',  
                   'ylabel' => '% Chosen Incorrectly');  
         my $incorrect_graph = &Apache::loncommon::DrawBarGraph          my $incorrect_graph = &Apache::loncommon::DrawBarGraph
             ($lt{'title'},$lt{'xlabel'},$lt{'ylabel'},              ('Incorrect Statements','Statement','% Chosen Incorrectly',
              100,$plotcolors,\@Labels,@Datasets,{xskip=>1});               100,$plotcolors,\@Labels,@Datasets,{xskip=>1});
         $analysis_html.=           $analysis_html.= 
             '<tr><td colspan="4" align="center">'.              '<tr><td colspan="4" align="center">'.
Line 1508  sub OR_time_analysis { Line 1477  sub OR_time_analysis {
     if (defined($Concepts)) { $num_concepts = scalar(@$Concepts); }      if (defined($Concepts)) { $num_concepts = scalar(@$Concepts); }
     #      #
     if ($num_concepts < 2) {      if ($num_concepts < 2) {
         $table = '<p class="LC_info">'.          $table = '<h3>'.
                  &mt('Not enough data for concept analysis.'.                   &mt('Not enough data for concept analysis.').' '.
                      ' Performing Foil Analysis instead.').                   &mt('Performing Foil Analysis').
                  '</p>'.                   '</h3>'.$table;
                  $table;  
     }      }
     #      #
     my $num_plots = $env{'form.NumPlots'};      my $num_plots = $env{'form.NumPlots'};
Line 1569  sub OR_time_analysis { Line 1537  sub OR_time_analysis {
         $correct |= 0;          $correct |= 0;
         ##          ##
         $table .= '<tr><td colspan="4" align="center"><font size="+1">'.          $table .= '<tr><td colspan="4" align="center"><font size="+1">'.
             &mt('[quant,_1,submission,submissions,No submissions] from [quant,_2,student], [_3] correct, [_4] incorrect',              &mt('[_1] submissions from [_2] students, [_3] correct, [_4] incorrect',
                 $data_count,$student_count,$correct,$data_count-$correct).                  $data_count,$student_count,$correct,$data_count-$correct).
                 '</font></td></tr>'.$/;                  '</font></td></tr>'.$/;
         my $concept_correct_plot = '';          my $concept_correct_plot = '';
Line 1641  sub OR_Foil_Time_Analysis { Line 1609  sub OR_Foil_Time_Analysis {
     }      }
     #      #
     # Create the plot      # Create the plot
     my %lt = &Apache::lonlocal::texthash(      my $correct_plot = &Apache::loncommon::DrawBarGraph('Correct Statements',
                  'title'  => 'Correct Statements',                                                          'Statement Number',
                  'xlabel' => 'Statement Number',                                                          'Percent Correct',
                  'ylabel' => 'Percent Correct');  
     my $correct_plot = &Apache::loncommon::DrawBarGraph($lt{'title'},  
                                                         $lt{'xlabel'},  
                                                         $lt{'ylabel'},  
                                                         100,                                                          100,
                                                         $plotcolors,                                                          $plotcolors,
                                                         undef,                                                          undef,
Line 1656  sub OR_Foil_Time_Analysis { Line 1620  sub OR_Foil_Time_Analysis {
     for (my $j=0; $j< scalar(@{$plotdata[0]});$j++) {      for (my $j=0; $j< scalar(@{$plotdata[0]});$j++) {
         $plotdata[0]->[$j]=0;          $plotdata[0]->[$j]=0;
     }      }
     %lt = &Apache::lonlocal::texthash(  
               'title'  => 'Incorrect Statements',  
               'xlabel' => 'Statement Number',  
               'ylabel' => 'Incorrect Option Choice');  
     my $incorrect_plot =       my $incorrect_plot = 
         &Apache::loncommon::DrawBarGraph($lt{'title'},          &Apache::loncommon::DrawBarGraph('Incorrect Statements',
                                          $lt{'xlabel'},                                           'Statement Number',
                                          $lt{'ylabel'},                                           'Incorrect Option Choice',
                                          100,                                           100,
                                          $plotcolors,                                           $plotcolors,
                                          undef,                                           undef,
Line 1692  sub OR_Concept_Time_Analysis { Line 1652  sub OR_Concept_Time_Analysis {
     }      }
     #      #
     # Create the plot      # Create the plot
     my %lt = &Apache::lonlocal::texthash(      return &Apache::loncommon::DrawBarGraph('Correct Concepts',
                  'title'  => 'Correct Concepts',                                              'Concept Number',
                  'xlabel' => 'Concept Number',                                              'Percent Correct',
                  'ylabel' => 'Percent Correct');  
     return &Apache::loncommon::DrawBarGraph($lt{'title'},  
                                             $lt{'xlabel'},  
                                             $lt{'ylabel'},  
                                             100,                                              100,
                                             $plotcolors,                                              $plotcolors,
                                             undef,                                              undef,
Line 1957  sub CreateInterface { Line 1913  sub CreateInterface {
         $showprob_checkbox.' '.&mt('Show problem').          $showprob_checkbox.' '.&mt('Show problem').
         '</label></span><br />';          '</label></span><br />';
     ##      ##
     my $analyze_selector = '<select name="AnalyzeOver">';      my $analyze_selector = '<select name="AnalyzeOver" >';
     $analyze_selector .= '<option value="tries"';      $analyze_selector .= '<option value="tries" ';
     if (! exists($env{'form.AnalyzeOver'}) ||       if (! exists($env{'form.AnalyzeOver'}) || 
         $env{'form.AnalyzeOver'} eq 'tries'){          $env{'form.AnalyzeOver'} eq 'tries'){
         # Default to tries          # Default to tries
         $analyze_selector .= ' selected="selected"';          $analyze_selector .= ' selected="selected" ';
     }      }
     $analyze_selector .= '>'.&mt('Tries').'</option>';      $analyze_selector .= '>'.&mt('Tries').'</option>';
     $analyze_selector .= '<option value="time"';      $analyze_selector .= '<option value="time" ';
     $analyze_selector .= ' selected="selected"' if ($env{'form.AnalyzeOver'} eq 'time');      $analyze_selector .= ' selected ' if ($env{'form.AnalyzeOver'} eq 'time');
     $analyze_selector .= '>'.&mt('Time').'</option>';      $analyze_selector .= '>'.&mt('Time').'</option>';
     $analyze_selector .= '</select>';      $analyze_selector .= '</select>';
     $Str .= '<span class="LC_nobreak"><label>'.      $Str .= '<span class="LC_nobreak"><label>'.

Removed from v.1.142.2.5  
changed lines
  Added in v.1.143


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