version 1.97, 2004/10/29 15:27:39
|
version 1.102, 2004/11/02 20:45:41
|
Line 164 sub BuildProblemAnalysisPage {
|
Line 164 sub BuildProblemAnalysisPage {
|
} |
} |
} |
} |
} else { |
} else { |
$r->print('<h2>This analysis is not supported</h2>'); |
$r->print('<h2>Analysis of '.$current_problem->{'resptype'}.' is not supported</h2>'); |
} |
} |
} |
} |
$r->print('<hr />'); |
$r->print('<hr />'); |
Line 240 sub NumericalResponseAnalysis {
|
Line 240 sub NumericalResponseAnalysis {
|
my $height = 100; |
my $height = 100; |
my $plot = &one_dimensional_plot($r,500,100,scalar(@$Students), |
my $plot = &one_dimensional_plot($r,500,100,scalar(@$Students), |
\@Labels,\@PlotData); |
\@Labels,\@PlotData); |
|
|
$r->print($plot); |
$r->print($plot); |
return; |
return; |
} |
} |
Line 390 sub radio_response_analysis {
|
Line 391 sub radio_response_analysis {
|
my $foildata = $problem_analysis->{'_Foils'}; |
my $foildata = $problem_analysis->{'_Foils'}; |
my ($table,$foils,$concepts) = &build_foil_index($problem_analysis); |
my ($table,$foils,$concepts) = &build_foil_index($problem_analysis); |
# |
# |
|
my %true_foils; |
my $num_true = 0; |
my $num_true = 0; |
foreach my $foil (@$foils) { |
if (! $problem_analysis->{'answercomputed'}) { |
if ($foildata->{$foil}->{'value'} eq 'true') { |
foreach my $foil (@$foils) { |
$num_true++; |
if ($foildata->{$foil}->{'value'} eq 'true') { |
|
$true_foils{$foil}++; |
|
} |
} |
} |
|
$num_true = scalar(keys(%true_foils)); |
} |
} |
# |
# |
$analysis_html .= $table; |
$analysis_html .= $table; |
Line 433 sub radio_response_analysis {
|
Line 438 sub radio_response_analysis {
|
# |
# |
$analysis_html.='<table>'; |
$analysis_html.='<table>'; |
for (my $plot_num = 1;$plot_num<=$ENV{'form.NumPlots'};$plot_num++) { |
for (my $plot_num = 1;$plot_num<=$ENV{'form.NumPlots'};$plot_num++) { |
&Apache::lonnet::logthis('plot num = '.$plot_num); |
|
# classify data ->correct foil -> selected foil |
# classify data ->correct foil -> selected foil |
my ($restriction_function, |
my ($restriction_function, |
$correct_foil_title,$incorrect_foil_title, |
$correct_foil_title,$incorrect_foil_title, |
Line 458 sub radio_response_analysis {
|
Line 462 sub radio_response_analysis {
|
&get_time_from_row($response_data->[-1]), |
&get_time_from_row($response_data->[-1]), |
$plot_num); |
$plot_num); |
$pre_graph_text = |
$pre_graph_text = |
'Data from [_5] to [_6], [_2] submissions, [_3] correct, [_4] incorrect'; |
'Data from [_6] to [_7]<br /> [_2] submissions from [_5] students, [_3] correct, [_4] incorrect'; |
$extra_data[0] = &Apache::lonlocal::locallocaltime($starttime); |
$extra_data[0] = &Apache::lonlocal::locallocaltime($starttime); |
$extra_data[1] = &Apache::lonlocal::locallocaltime($endtime); |
$extra_data[1] = &Apache::lonlocal::locallocaltime($endtime); |
# |
# |
Line 509 sub radio_response_analysis {
|
Line 513 sub radio_response_analysis {
|
if ($problem_analysis->{'answercomputed'} || $num_true > 1) { |
if ($problem_analysis->{'answercomputed'} || $num_true > 1) { |
($stacked_plot,$count_by_foil) = |
($stacked_plot,$count_by_foil) = |
&RR_create_stacked_selection_plot($foils,$foil_choice_data, |
&RR_create_stacked_selection_plot($foils,$foil_choice_data, |
$incorrect_foil_title); |
$incorrect_foil_title, |
|
\%true_foils); |
} |
} |
# |
# |
if ($concept_plot ne '' || |
if ($concept_plot ne '' || |
Line 524 sub radio_response_analysis {
|
Line 529 sub radio_response_analysis {
|
'<font size="+1">'. |
'<font size="+1">'. |
&mt($pre_graph_text, |
&mt($pre_graph_text, |
$plot_num,$foil_choice_data->{'_count'}, |
$plot_num,$foil_choice_data->{'_count'}, |
$correct, |
$correct, |
$foil_choice_data->{'_count'}-$correct, |
$foil_choice_data->{'_count'}-$correct, |
|
$foil_choice_data->{'_students'}, |
@extra_data). |
@extra_data). |
'</td></tr>'.$/; |
'</td></tr>'.$/; |
$analysis_html.= |
$analysis_html.= |
Line 627 sub RR_concept_plot {
|
Line 633 sub RR_concept_plot {
|
sub RR_create_percent_selected_plot { |
sub RR_create_percent_selected_plot { |
my ($concepts,$foils,$foil_data,$title) = @_; |
my ($concepts,$foils,$foil_data,$title) = @_; |
# |
# |
my %foil_selections; |
if ($foil_data->{'_count'} == 0) { return ''; }; |
my %true; |
my %correct_selections; |
|
my %incorrect_selections; |
foreach my $foil (@$foils) { |
foreach my $foil (@$foils) { |
# foil_data has format $foil_data->{true_foil}->{selected foil} |
# foil_data has format $foil_data->{true_foil}->{selected foil}=count |
next if (! exists($foil_data->{$foil})); |
next if (! exists($foil_data->{$foil})); |
$true{$foil}++; |
|
while (my ($f,$count)= each(%{$foil_data->{$foil}})) { |
while (my ($f,$count)= each(%{$foil_data->{$foil}})) { |
$foil_selections{$f}+=$count; |
if ($f eq $foil) { |
|
$correct_selections{$foil} += $count; |
|
} else { |
|
$incorrect_selections{$f} += $count; |
|
} |
} |
} |
} |
} |
# |
# |
Line 643 sub RR_create_percent_selected_plot {
|
Line 653 sub RR_create_percent_selected_plot {
|
my @correct; |
my @correct; |
my @incorrect; |
my @incorrect; |
# |
# |
my $total =0; |
my $total = $foil_data->{'_count'}; |
for (my $i=0;$i<scalar(@$foils);$i++) { |
for (my $i=0;$i<scalar(@$foils);$i++) { |
my $foil = $foils->[$i]; |
my $foil = $foils->[$i]; |
if ($true{$foil}) { |
$correct[$i] = $correct_selections{$foil}; |
$correct[$i] = $foil_selections{$foil}; |
$incorrect[$i] = $incorrect_selections{$foil}; |
$incorrect[$i] = 0; |
|
} else { |
|
$correct[$i] = 0; |
|
$incorrect[$i] = $foil_selections{$foil}; |
|
} |
|
$total+=$foil_selections{$foil}; |
|
} |
} |
if ($total == 0) { return ''; }; |
|
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('%2f',$correct[$i]/$total*100); |
} |
} |
for (my $i=0;$i<=$#incorrect;$i++) { |
for (my $i=0;$i<=$#incorrect;$i++) { |
$incorrect[$i] = sprintf('%0f',$incorrect[$i]/$total*100); |
$incorrect[$i] = sprintf('%2f',$incorrect[$i]/$total*100); |
} |
} |
# |
# |
# Put a blank in the data sets between concepts, if there are concepts |
# Put a blank in the data sets between concepts, if there are concepts |
Line 698 sub RR_create_percent_selected_plot {
|
Line 701 sub RR_create_percent_selected_plot {
|
} |
} |
|
|
sub RR_create_stacked_selection_plot { |
sub RR_create_stacked_selection_plot { |
my ($foils,$foil_data,$title)=@_; |
my ($foils,$foil_data,$title,$true_foils)=@_; |
# |
# |
my @dataset; # array of array refs - multicolor rows $datasets[row]->[col] |
my @dataset; # array of array refs - multicolor rows $datasets[row]->[col] |
my @labels; |
my @labels; |
my $count; |
my $count; |
my %column; # maps foil name to column in @datasets |
my %column; # maps foil name to column in @datasets |
for (my $i=0;$i<scalar(@$foils);$i++) { |
for (my $i=0;$i<scalar(@$foils);$i++) { |
|
my $foil = $foils->[$i]; |
|
if (defined($true_foils) && scalar(keys(%$true_foils)) > 0 ) { |
|
next if (! $true_foils->{$foil} ); |
|
push(@labels,$i+1); |
|
} else { |
|
next if (! exists($foil_data->{$foil})); |
|
push(@labels,$i+1); |
|
} |
next if (! exists($foil_data->{$foils->[$i]})); |
next if (! exists($foil_data->{$foils->[$i]})); |
my $correct_foil = $foils->[$i]; |
$column{$foil}= $count++; |
push(@labels,$i+1); |
|
$column{$correct_foil}= $count++; |
|
for (my $j=0;$j<scalar(@$foils);$j++) { |
for (my $j=0;$j<scalar(@$foils);$j++) { |
my $value = 0; |
my $value = 0; |
if ($i != $j ) { |
if ($i != $j ) { |
$value += $foil_data->{$correct_foil}->{$foils->[$j]}; |
$value += $foil_data->{$foil}->{$foils->[$j]}; |
} |
} |
$dataset[$j]->[$column{$correct_foil}]=$value; |
$dataset[$j]->[$column{$foil}]=$value; |
} |
} |
} |
} |
# |
# |
Line 754 sub RR_create_stacked_selection_plot {
|
Line 763 sub RR_create_stacked_selection_plot {
|
sub RR_classify_response_data { |
sub RR_classify_response_data { |
my ($full_row_data,$correct,$function) = @_; |
my ($full_row_data,$correct,$function) = @_; |
my %submission_data; |
my %submission_data; |
|
my %students; |
foreach my $row (@$full_row_data) { |
foreach my $row (@$full_row_data) { |
my %subm = &hashify_attempt($row); |
my %subm = &hashify_attempt($row); |
if (ref($correct) eq 'HASH') { |
if (ref($correct) eq 'HASH') { |
Line 763 sub RR_classify_response_data {
|
Line 773 sub RR_classify_response_data {
|
} |
} |
$subm{'submission'} =~ s/=\d+\s*$//; |
$subm{'submission'} =~ s/=\d+\s*$//; |
if (&$function(\%subm)) { |
if (&$function(\%subm)) { |
|
$students{$subm{'student'}}++; |
$submission_data{'_count'}++; |
$submission_data{'_count'}++; |
if (&submission_is_correct($subm{'award'})) { |
if (&submission_is_correct($subm{'award'})) { |
$submission_data{'_correct'}++; |
$submission_data{'_correct'}++; |
Line 770 sub RR_classify_response_data {
|
Line 781 sub RR_classify_response_data {
|
$submission_data{$subm{'correct'}}->{$subm{'submission'}}++; |
$submission_data{$subm{'correct'}}->{$subm{'submission'}}++; |
} |
} |
} |
} |
|
$submission_data{'_students'}=scalar(keys(%students)); |
return \%submission_data; |
return \%submission_data; |
} |
} |
|
|
Line 1092 sub OR_time_analysis {
|
Line 1104 sub OR_time_analysis {
|
&OR_time_process_data($performance_data,$begin_index,$end_index); |
&OR_time_process_data($performance_data,$begin_index,$end_index); |
## |
## |
$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 submitting, [_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 1226 sub OR_time_process_data {
|
Line 1238 sub OR_time_process_data {
|
if ($end_index == scalar(@$performance_data)-1) { |
if ($end_index == scalar(@$performance_data)-1) { |
$end_index++; |
$end_index++; |
} |
} |
&Apache::lonnet::logthis(' '.$begin_index.':'.$end_index); |
|
my $count; |
my $count; |
for (my $i=$begin_index;$i<$end_index;$i++) { |
for (my $i=$begin_index;$i<$end_index;$i++) { |
my $attempt = $performance_data->[$i]; |
my $attempt = $performance_data->[$i]; |
Line 1246 sub OR_time_process_data {
|
Line 1257 sub OR_time_process_data {
|
} |
} |
} |
} |
} |
} |
&Apache::lonnet::logthis('count = '.$count); |
|
return (\%processed_time_data,$correct,$data_count, |
return (\%processed_time_data,$correct,$data_count, |
scalar(keys(%distinct_students))); |
scalar(keys(%distinct_students))); |
} |
} |