version 1.132, 2008/10/30 17:45:25
|
version 1.145, 2014/02/03 18:50:58
|
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 73 sub BuildProblemAnalysisPage {
|
Line 74 sub BuildProblemAnalysisPage {
|
# |
# |
&Apache::lonstatistics::PrepareClasslist(); |
&Apache::lonstatistics::PrepareClasslist(); |
# |
# |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs('Detailed Problem Analysis')); |
|
&Apache::lonquickgrades::startGradeScreen($r,'statistics'); |
|
|
$r->print(&CreateInterface()); |
$r->print(&CreateInterface()); |
# |
# |
my @Students = @Apache::lonstatistics::Students; |
my @Students = @Apache::lonstatistics::Students; |
Line 142 sub BuildProblemAnalysisPage {
|
Line 146 sub BuildProblemAnalysisPage {
|
my $resource = $current_problem->{'resource'}; |
my $resource = $current_problem->{'resource'}; |
$r->print('<h1>'.$resource->compTitle.'</h1>'); |
$r->print('<h1>'.$resource->compTitle.'</h1>'); |
$r->print('<h3>'.$resource->src.'</h3>'); |
$r->print('<h3>'.$resource->src.'</h3>'); |
$r->print('<h4>'.&Apache::lonstatistics::section_and_enrollment_description().'</h4>'); |
$r->print('<p>'.&Apache::lonstatistics::section_and_enrollment_description().'</p>'); |
if ($env{'form.show_prob'} eq 'true') { |
if ($env{'form.show_prob'} eq 'true') { |
$r->print('<hr />' |
$r->print('<hr />' |
.&Apache::lonstathelpers::render_resource($resource) |
.&Apache::lonstathelpers::render_resource($resource) |
Line 396 sub numerical_plot_percent {
|
Line 400 sub numerical_plot_percent {
|
if ($max <$_) { $max = $_; last; } |
if ($max <$_) { $max = $_; last; } |
} |
} |
# |
# |
my $title = &mt('Percent Difference'); |
my %lt = &Apache::lonlocal::texthash( |
|
'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 |
($title,'Percent Difference from Correct','Percent of Answers', |
($lt{'title'},$lt{'xlabel'},$lt{'ylabel'}, |
$max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect, |
$max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect, |
{xskip=>1}); |
{xskip=>1}); |
# |
# |
Line 469 sub numerical_plot_differences {
|
Line 476 sub numerical_plot_differences {
|
if ($max <$_) { $max = $_; last; } |
if ($max <$_) { $max = $_; last; } |
} |
} |
# |
# |
my $title = &mt('Difference between submission and correct'); |
my %lt = &Apache::lonlocal::texthash( |
|
'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 |
($title,'Difference from Correct','Percent of Answers', |
($lt{'title'},$lt{'xlabel'},$lt{'ylabel'}, |
$max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect, |
$max,['#33FF00','#FF3300'],\@labels,\@plot_correct,\@plot_incorrect, |
{xskip=>1}); |
{xskip=>1}); |
# |
# |
Line 626 sub numerical_determine_answers {
|
Line 636 sub numerical_determine_answers {
|
my ($r,$resource,$partid,$respid,$students)=@_; |
my ($r,$resource,$partid,$respid,$students)=@_; |
my $c = $r->connection(); |
my $c = $r->connection(); |
# |
# |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin |
my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,scalar(@$students)); |
($r,'Student Answer Compilation Status', |
|
'Student Answer Compilation Progress', scalar(@$students), |
|
'inline',undef,'Statistics','stats_status'); |
|
# |
# |
# Read in the cache (if it exists) before we start timing things. |
# Read in the cache (if it exists) before we start timing things. |
&Apache::lonstathelpers::ensure_proper_cache($resource->{'symb'}); |
&Apache::lonstathelpers::ensure_proper_cache($resource->{'symb'}); |
Line 663 sub numerical_determine_answers {
|
Line 670 sub numerical_determine_answers {
|
} |
} |
$answers{$correct->{$sname.':'.$sdom}{'answer'}}++; |
$answers{$correct->{$sname.':'.$sdom}{'answer'}}++; |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
&Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state, |
&mt('last student')); |
'last student'); |
} |
} |
&Apache::lonstathelpers::write_analysis_cache(); |
&Apache::lonstathelpers::write_analysis_cache(); |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
Line 857 sub radio_response_analysis {
|
Line 864 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 = 'Attempt '.$plot_num; |
$correct_foil_title = &mt('Attempt [_1]',$plot_num); |
$incorrect_foil_title = 'Attempt '.$plot_num; |
$incorrect_foil_title = &mt('Attempt [_1]',$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 916 sub radio_response_analysis {
|
Line 923 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, |
'Correct Concepts'); |
$title); |
} |
} |
# % Choosing plot |
# % Choosing plot |
my $choice_plot = &RR_create_percent_selected_plot |
my $choice_plot = &RR_create_percent_selected_plot |
Line 1032 sub RR_concept_plot {
|
Line 1040 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 = 'concept'; |
my $xlabel = &mt('concept'); |
|
my $ylabel = &mt('Percent Choosing'); |
my $plot= &Apache::loncommon::DrawBarGraph($title, |
my $plot= &Apache::loncommon::DrawBarGraph($title, |
$xlabel, |
$xlabel, |
'Percent Choosing', |
$ylabel, |
100, |
100, |
['#33ff00','#ff3300'], |
['#33ff00','#ff3300'], |
undef, |
undef, |
Line 1101 sub RR_create_percent_selected_plot {
|
Line 1110 sub RR_create_percent_selected_plot {
|
@labels = (1 .. scalar(@correct)); |
@labels = (1 .. scalar(@correct)); |
} |
} |
# |
# |
my $xlabel = 'foil chosen'; |
my $xlabel = &mt('foil chosen'); |
|
my $ylabel = &mt('Percent Choosing'); |
my $plot= &Apache::loncommon::DrawBarGraph($title, |
my $plot= &Apache::loncommon::DrawBarGraph($title, |
$xlabel, |
$xlabel, |
'Percent Choosing', |
$ylabel, |
100, |
100, |
['#33ff00','#ff3300'], |
['#33ff00','#ff3300'], |
\@labels, |
\@labels, |
Line 1165 sub RR_create_stacked_selection_plot {
|
Line 1175 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,'Correct Foil','foils chosen Incorrectly', |
($title,$xlabel,$ylabel, |
100,$plotcolors,\@labels,\@empty_row,@dataset); |
100,$plotcolors,\@labels,\@empty_row,@dataset); |
return ($graph,\%count_per_foil); |
return ($graph,\%count_per_foil); |
} |
} |
Line 1250 sub OptionResponseAnalysis {
|
Line 1262 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 1332 sub OR_tries_analysis {
|
Line 1344 sub OR_tries_analysis {
|
if ($try > 1) { |
if ($try > 1) { |
$analysis_html.= '<tr><td colspan="4">' |
$analysis_html.= '<tr><td colspan="4">' |
.'<div class="LC_info">' |
.'<div class="LC_info">' |
.&mt('None of the selected students attempted the problem more than [_1] times.' |
.&mt('None of the selected students attempted the problem more than [quant,_1,time].' |
,$try-1) |
,$try-1) |
.'</div>' |
.'</div>' |
.'</td></tr>'; |
.'</td></tr>'; |
Line 1362 sub OR_tries_analysis {
|
Line 1374 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 |
('Correct Concepts','Concept Number','Percent Correct', |
($lt{'title'},$lt{'xlabel'},$lt{'ylabel'}, |
100,$plotcolors,undef,\@concept_plot_data,{xskip=>1}); |
100,$plotcolors,undef,\@concept_plot_data,{xskip=>1}); |
} |
} |
# |
# |
Line 1401 sub OR_tries_analysis {
|
Line 1417 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 |
('Correct Statements','Statement','% Answered Correct', |
($lt{'title'},$lt{'xlabel'},$lt{'ylabel'}, |
100,$plotcolors,\@Labels,$Datasets[0],{xskip=>1}); |
100,$plotcolors,\@Labels,$Datasets[0],{xskip=>1}); |
|
|
# |
# |
Line 1413 sub OR_tries_analysis {
|
Line 1433 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 |
('Incorrect Statements','Statement','% Chosen Incorrectly', |
($lt{'title'},$lt{'xlabel'},$lt{'ylabel'}, |
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 1476 sub OR_time_analysis {
|
Line 1500 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 = '<h3>'. |
$table = '<p class="LC_info">'. |
&mt('Not enough data for concept analysis. '. |
&mt('Not enough data for concept analysis.'. |
'Performing Foil Analysis'). |
' Performing Foil Analysis instead.'). |
'</h3>'.$table; |
'</p>'. |
|
$table; |
} |
} |
# |
# |
my $num_plots = $env{'form.NumPlots'}; |
my $num_plots = $env{'form.NumPlots'}; |
Line 1536 sub OR_time_analysis {
|
Line 1561 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('[_1] submissions from [_2] students, [_3] correct, [_4] incorrect', |
&mt('[quant,_1,submission,submissions,No submissions] from [quant,_2,student], [_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 1558 sub OR_time_analysis {
|
Line 1583 sub OR_time_analysis {
|
$table .= '<tr><td colspan="4" align="center">'. |
$table .= '<tr><td colspan="4" align="center">'. |
&mt('Start time: [_1]',$startdateform).'<br />'. |
&mt('Start time: [_1]',$startdateform).'<br />'. |
&mt('End time: [_1]',$enddateform).'</td></tr>'.$/; |
&mt('End time: [_1]',$enddateform).'</td></tr>'.$/; |
$table.= '<tr><td colspan="4"> </td></tr>'.$/; |
$table.= '<tr><td colspan="4"> </td></tr>'.$/; |
} |
} |
$table .= '</table>'; |
$table .= '</table>'; |
# |
# |
Line 1608 sub OR_Foil_Time_Analysis {
|
Line 1633 sub OR_Foil_Time_Analysis {
|
} |
} |
# |
# |
# Create the plot |
# Create the plot |
my $correct_plot = &Apache::loncommon::DrawBarGraph('Correct Statements', |
my %lt = &Apache::lonlocal::texthash( |
'Statement Number', |
'title' => 'Correct Statements', |
'Percent Correct', |
'xlabel' => 'Statement Number', |
|
'ylabel' => 'Percent Correct'); |
|
my $correct_plot = &Apache::loncommon::DrawBarGraph($lt{'title'}, |
|
$lt{'xlabel'}, |
|
$lt{'ylabel'}, |
100, |
100, |
$plotcolors, |
$plotcolors, |
undef, |
undef, |
Line 1619 sub OR_Foil_Time_Analysis {
|
Line 1648 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('Incorrect Statements', |
&Apache::loncommon::DrawBarGraph($lt{'title'}, |
'Statement Number', |
$lt{'xlabel'}, |
'Incorrect Option Choice', |
$lt{'ylabel'}, |
100, |
100, |
$plotcolors, |
$plotcolors, |
undef, |
undef, |
Line 1651 sub OR_Concept_Time_Analysis {
|
Line 1684 sub OR_Concept_Time_Analysis {
|
} |
} |
# |
# |
# Create the plot |
# Create the plot |
return &Apache::loncommon::DrawBarGraph('Correct Concepts', |
my %lt = &Apache::lonlocal::texthash( |
'Concept Number', |
'title' => 'Correct Concepts', |
'Percent Correct', |
'xlabel' => 'Concept Number', |
|
'ylabel' => 'Percent Correct'); |
|
return &Apache::loncommon::DrawBarGraph($lt{'title'}, |
|
$lt{'xlabel'}, |
|
$lt{'ylabel'}, |
100, |
100, |
$plotcolors, |
$plotcolors, |
undef, |
undef, |
Line 1875 sub CreateInterface {
|
Line 1912 sub CreateInterface {
|
## |
## |
## Build the menu |
## Build the menu |
my $Str = ''; |
my $Str = ''; |
$Str .= &Apache::lonhtmlcommon::breadcrumbs('Detailed Problem Analysis'); |
|
$Str .= '<p>'; |
$Str .= '<p>'; |
$Str .= &Apache::loncommon::start_data_table(); |
$Str .= &Apache::loncommon::start_data_table(); |
$Str .= &Apache::loncommon::start_data_table_header_row(); |
$Str .= &Apache::loncommon::start_data_table_header_row(); |
Line 1901 sub CreateInterface {
|
Line 1937 sub CreateInterface {
|
# |
# |
## |
## |
## |
## |
$Str .= '<td align="right" valign="top">'; |
$Str .= '<td valign="top">'; |
## |
## |
my $showprob_checkbox = |
my $showprob_checkbox = |
'<input type="checkbox" name="show_prob" value="true" '; |
'<input type="checkbox" name="show_prob" value="true"'; |
if ($env{'form.show_prob'} eq 'true') { |
if ($env{'form.show_prob'} eq 'true') { |
$showprob_checkbox .= 'checked="checked" '; |
$showprob_checkbox .= ' checked="checked"'; |
} |
} |
$showprob_checkbox.= ' />'; |
$showprob_checkbox.= ' />'; |
$Str.= '<nobr><label>'. |
$Str.= '<span class="LC_nobreak"><label>'. |
&mt('Show problem [_1]',$showprob_checkbox). |
$showprob_checkbox.' '.&mt('Show problem'). |
'</label></nobr><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 ' if ($env{'form.AnalyzeOver'} eq 'time'); |
$analyze_selector .= ' selected="selected"' if ($env{'form.AnalyzeOver'} eq 'time'); |
$analyze_selector .= '>'.&mt('Time').'</option>'; |
$analyze_selector .= '>'.&mt('Time').'</option>'; |
$analyze_selector .= '</select>'; |
$analyze_selector .= '</select>'; |
$Str .= '<nobr><label>'. |
$Str .= '<span class="LC_nobreak"><label>'. |
&mt('Analyze Over [_1] [_2]', |
&mt('Analyze Over [_1] [_2]', |
$analyze_selector, |
$analyze_selector, |
&Apache::loncommon::help_open_topic('Analysis_Analyze_Over')). |
&Apache::loncommon::help_open_topic('Analysis_Analyze_Over')). |
'</label></nobr><br />'.$/; |
'</label></span><br />'.$/; |
## |
## |
my $numplots_selector = '<select name="NumPlots">'; |
my $numplots_selector = '<select name="NumPlots">'; |
if (! exists($env{'form.NumPlots'}) |
if (! exists($env{'form.NumPlots'}) |
Line 1942 sub CreateInterface {
|
Line 1978 sub CreateInterface {
|
if ($env{'form.NumPlots'} == $i) { $numplots_selector.=' selected="selected" '; } |
if ($env{'form.NumPlots'} == $i) { $numplots_selector.=' selected="selected" '; } |
$numplots_selector .= '>'.$i.'</option>'; |
$numplots_selector .= '>'.$i.'</option>'; |
} |
} |
$numplots_selector .= '</select></nobr><br />'; |
$numplots_selector .= '</select>'; |
$Str .= '<nobr><label>'.&mt('Number of Plots [_1]',$numplots_selector). |
$Str .= '<span class="LC_nobreak"><label>'.&mt('Number of Plots [_1]',$numplots_selector). |
'</label></nobr>'; |
'</label></span><br />'; |
## |
## |
$Str .= '</td>'; |
$Str .= '</td>'; |
## |
## |