version 1.79, 2004/04/01 20:02:56
|
version 1.83, 2004/04/06 15:45:13
|
Line 101 my @Fields = (
|
Line 101 my @Fields = (
|
align => 'right', |
align => 'right', |
color => '#FFFFE6', |
color => '#FFFFE6', |
selectable => 'no', |
selectable => 'no', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'container', |
{ name => 'container', |
title => 'Sequence or Folder', |
title => 'Sequence or Folder', |
Line 109 my @Fields = (
|
Line 109 my @Fields = (
|
color => '#FFFFE6', |
color => '#FFFFE6', |
sortable => 'yes', |
sortable => 'yes', |
selectable => 'no', |
selectable => 'no', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'title', |
{ name => 'title', |
title => 'Title', |
title => 'Title', |
Line 118 my @Fields = (
|
Line 118 my @Fields = (
|
special => 'link', |
special => 'link', |
sortable => 'yes', |
sortable => 'yes', |
selectable => 'no', |
selectable => 'no', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'part', |
{ name => 'part', |
title => 'Part', |
title => 'Part', |
align => 'left', |
align => 'left', |
color => '#FFFFE6', |
color => '#FFFFE6', |
selectable => 'no', |
selectable => 'no', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'num_students', |
{ name => 'num_students', |
title => '#Stdnts', |
title => '#Stdnts', |
Line 136 my @Fields = (
|
Line 136 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Number of Students Attempting Problem', |
long_title => 'Number of Students Attempting Problem', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'tries', |
{ name => 'tries', |
title => 'Tries', |
title => 'Tries', |
Line 147 my @Fields = (
|
Line 147 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Total Number of Tries', |
long_title => 'Total Number of Tries', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'max_tries', |
{ name => 'max_tries', |
title => 'Max Tries', |
title => 'Max Tries', |
Line 158 my @Fields = (
|
Line 158 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Maximum Number of Tries', |
long_title => 'Maximum Number of Tries', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'min_tries', |
{ name => 'min_tries', |
title => 'Min Tries', |
title => 'Min Tries', |
Line 169 my @Fields = (
|
Line 169 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Minumum Number of Tries', |
long_title => 'Minumum Number of Tries', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'mean_tries', |
{ name => 'mean_tries', |
title => 'Mean Tries', |
title => 'Mean Tries', |
Line 180 my @Fields = (
|
Line 180 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Average Number of Tries', |
long_title => 'Average Number of Tries', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'std_tries', |
{ name => 'std_tries', |
title => 'S.D. tries', |
title => 'S.D. tries', |
Line 191 my @Fields = (
|
Line 191 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Standard Deviation of Number of Tries', |
long_title => 'Standard Deviation of Number of Tries', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'skew_tries', |
{ name => 'skew_tries', |
title => 'Skew Tries', |
title => 'Skew Tries', |
Line 202 my @Fields = (
|
Line 202 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Skew of Number of Tries', |
long_title => 'Skew of Number of Tries', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'num_solved', |
{ name => 'num_solved', |
title => '#YES', |
title => '#YES', |
Line 213 my @Fields = (
|
Line 213 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Number of Students able to Solve', |
long_title => 'Number of Students able to Solve', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'num_override', |
{ name => 'num_override', |
title => '#yes', |
title => '#yes', |
Line 224 my @Fields = (
|
Line 224 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Number of Students given Override', |
long_title => 'Number of Students given Override', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'num_wrong', |
{ name => 'num_wrong', |
title => '#Wrng', |
title => '#Wrng', |
Line 235 my @Fields = (
|
Line 235 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Percent of students whose final answer is wrong', |
long_title => 'Percent of students whose final answer is wrong', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'deg_of_diff', |
{ name => 'deg_of_diff', |
title => 'DoDiff', |
title => 'DoDiff', |
Line 247 my @Fields = (
|
Line 247 my @Fields = (
|
long_title => 'Degree of Difficulty'. |
long_title => 'Degree of Difficulty'. |
'[ 1 - ((#YES+#yes) / Tries) ]', |
'[ 1 - ((#YES+#yes) / Tries) ]', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'yes', |
defaultselected => 'yes', |
}, |
}, |
{ name => 'deg_of_disc', |
{ name => 'deg_of_disc', |
title => 'DoDisc', |
title => 'DoDisc', |
Line 258 my @Fields = (
|
Line 258 my @Fields = (
|
graphable => 'yes', |
graphable => 'yes', |
long_title => 'Degree of Discrimination', |
long_title => 'Degree of Discrimination', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
); |
); |
|
|
Line 270 my @SeqFields = (
|
Line 270 my @SeqFields = (
|
special => 'no', |
special => 'no', |
sortable => 'no', |
sortable => 'no', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'items', |
{ name => 'items', |
title => '#Items', |
title => '#Items', |
Line 281 my @SeqFields = (
|
Line 281 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Number of Items in Sequence', |
long_title => 'Number of Items in Sequence', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'scoremean', |
{ name => 'scoremean', |
title => 'Score Mean', |
title => 'Score Mean', |
Line 292 my @SeqFields = (
|
Line 292 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Mean Sequence Score', |
long_title => 'Mean Sequence Score', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'scorestd', |
{ name => 'scorestd', |
title => 'Score STD', |
title => 'Score STD', |
Line 303 my @SeqFields = (
|
Line 303 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Standard Deviation of Sequence Scores', |
long_title => 'Standard Deviation of Sequence Scores', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'scoremax', |
{ name => 'scoremax', |
title => 'Score Max', |
title => 'Score Max', |
Line 314 my @SeqFields = (
|
Line 314 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Maximum Sequence Score', |
long_title => 'Maximum Sequence Score', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'scoremin', |
{ name => 'scoremin', |
title => 'Score Min', |
title => 'Score Min', |
Line 325 my @SeqFields = (
|
Line 325 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Minumum Sequence Score', |
long_title => 'Minumum Sequence Score', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'scorecount', |
{ name => 'scorecount', |
title => 'Score N', |
title => 'Score N', |
Line 336 my @SeqFields = (
|
Line 336 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Number of Students in score computations', |
long_title => 'Number of Students in score computations', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'countmean', |
{ name => 'countmean', |
title => 'Count Mean', |
title => 'Count Mean', |
Line 347 my @SeqFields = (
|
Line 347 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Mean Sequence Score', |
long_title => 'Mean Sequence Score', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'countstd', |
{ name => 'countstd', |
title => 'Count STD', |
title => 'Count STD', |
Line 358 my @SeqFields = (
|
Line 358 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Standard Deviation of Sequence Scores', |
long_title => 'Standard Deviation of Sequence Scores', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'countmax', |
{ name => 'countmax', |
title => 'Count Max', |
title => 'Count Max', |
Line 369 my @SeqFields = (
|
Line 369 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Maximum Number of Correct Problems', |
long_title => 'Maximum Number of Correct Problems', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'countmin', |
{ name => 'countmin', |
title => 'Count Min', |
title => 'Count Min', |
Line 380 my @SeqFields = (
|
Line 380 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Minumum Number of Correct Problems', |
long_title => 'Minumum Number of Correct Problems', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'count', |
{ name => 'count', |
title => 'Count N', |
title => 'Count N', |
Line 391 my @SeqFields = (
|
Line 391 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'Number of Students in score computations', |
long_title => 'Number of Students in score computations', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
{ name => 'KR-21', |
{ name => 'KR-21', |
title => 'KR-21', |
title => 'KR-21', |
Line 402 my @SeqFields = (
|
Line 402 my @SeqFields = (
|
graphable => 'no', |
graphable => 'no', |
long_title => 'KR-21 reliability statistic', |
long_title => 'KR-21 reliability statistic', |
selectable => 'yes', |
selectable => 'yes', |
selected => 'no', |
defaultselected => 'no', |
}, |
}, |
); |
); |
|
|
Line 415 sub parse_field_selection {
|
Line 415 sub parse_field_selection {
|
$ENV{'form.fieldselections'} = []; |
$ENV{'form.fieldselections'} = []; |
foreach my $field (@Fields) { |
foreach my $field (@Fields) { |
next if ($field->{'selectable'} ne 'yes'); |
next if ($field->{'selectable'} ne 'yes'); |
if ($field->{'selected'} eq 'yes') { |
if ($field->{'defaultselected'} eq 'yes') { |
push(@{$ENV{'form.fieldselections'}},$field->{'name'}); |
push(@{$ENV{'form.fieldselections'}},$field->{'name'}); |
} |
} |
} |
} |
} |
} |
# |
# |
|
# Make sure the data we are plotting is there |
|
my %NeededFields; |
|
if (exists($ENV{'form.plot'}) && $ENV{'form.plot'} ne '' && |
|
$ENV{'form.plot'} ne 'none') { |
|
if ($ENV{'form.plot'} eq 'degrees') { |
|
$NeededFields{'deg_of_diff'}++; |
|
$NeededFields{'deg_of_disc'}++; |
|
} elsif ($ENV{'form.plot'} eq 'tries statistics') { |
|
$NeededFields{'mean_tries'}++; |
|
$NeededFields{'std_tries'}++; |
|
$NeededFields{'problem_num'}++; |
|
} else { |
|
$NeededFields{$ENV{'form.plot'}}++; |
|
} |
|
} |
|
# |
# This should not happen, but in case it does... |
# This should not happen, but in case it does... |
if (ref($ENV{'form.fieldselections'}) ne 'ARRAY') { |
if (ref($ENV{'form.fieldselections'}) ne 'ARRAY') { |
$ENV{'form.fieldselections'} = [$ENV{'form.fieldselections'}]; |
$ENV{'form.fieldselections'} = [$ENV{'form.fieldselections'}]; |
Line 429 sub parse_field_selection {
|
Line 445 sub parse_field_selection {
|
# Set the field data and the selected fields (for easier checking) |
# Set the field data and the selected fields (for easier checking) |
undef(%SelectedFields); |
undef(%SelectedFields); |
foreach my $field (@Fields) { |
foreach my $field (@Fields) { |
next if ($field->{'selectable'} ne 'yes'); |
if ($field->{'selectable'} ne 'yes') { |
$field->{'selected'} = 'no'; |
$field->{'selected'} = 'yes'; |
|
} else { |
|
$field->{'selected'} = 'no'; |
|
} |
|
if (exists($NeededFields{$field->{'name'}})) { |
|
$field->{'selected'} = 'yes'; |
|
$SelectedFields{$field->{'name'}}++; |
|
} |
foreach my $selection (@{$ENV{'form.fieldselections'}}) { |
foreach my $selection (@{$ENV{'form.fieldselections'}}) { |
if ($selection eq $field->{'name'} || $selection eq 'all') { |
if ($selection eq $field->{'name'} || $selection eq 'all') { |
$field->{'selected'} = 'yes'; |
$field->{'selected'} = 'yes'; |
Line 438 sub parse_field_selection {
|
Line 461 sub parse_field_selection {
|
} |
} |
} |
} |
} |
} |
|
# |
|
# Always show all the sequence statistics (for now) |
|
foreach my $field (@SeqFields) { |
|
$field->{'selected'} = 'yes'; |
|
} |
return; |
return; |
} |
} |
|
|
Line 470 select sections, maps, and output.
|
Line 498 select sections, maps, and output.
|
############################################### |
############################################### |
############################################### |
############################################### |
sub CreateInterface { |
sub CreateInterface { |
|
# |
&parse_field_selection(); |
&parse_field_selection(); |
|
# |
my $Str = ''; |
my $Str = ''; |
$Str .= &Apache::lonhtmlcommon::breadcrumbs |
$Str .= &Apache::lonhtmlcommon::breadcrumbs |
(undef,'Overall Problem Statistics','Statistics_Overall_Key'); |
(undef,'Overall Problem Statistics','Statistics_Overall_Key'); |
Line 793 sub sequence_html_header {
|
Line 823 sub sequence_html_header {
|
sub sequence_html_output { |
sub sequence_html_output { |
my ($seq) = @_; |
my ($seq) = @_; |
my $data = $SeqStat{$seq->{'symb'}}; |
my $data = $SeqStat{$seq->{'symb'}}; |
# $SeqStat{$symb}->{'max'} |
|
# $SeqStat{$symb}->{'min'} |
|
# $SeqStat{$symb}->{'mean'} |
|
# $SeqStat{$symb}->{'std'} |
|
# $SeqStat{$symb}->{'count'} |
|
# $SeqStat{$symb}->{'max_possible'} |
|
my $row = '<tr>'; |
my $row = '<tr>'; |
foreach my $field (@SeqFields) { |
foreach my $field (@SeqFields) { |
# next if ($field->{'selected'} ne 'yes'); |
next if ($field->{'selected'} ne 'yes'); |
$row .= '<td bgcolor="'.$field->{'color'}.'"'; |
$row .= '<td bgcolor="'.$field->{'color'}.'"'; |
if (exists($field->{'align'})) { |
if (exists($field->{'align'})) { |
$row .= ' align="'.$field->{'align'}.'"'; |
$row .= ' align="'.$field->{'align'}.'"'; |
Line 945 sub degrees_plot {
|
Line 969 sub degrees_plot {
|
my $diffdata .= '<data>'.join(',',@Labels).'</data>'.$/. |
my $diffdata .= '<data>'.join(',',@Labels).'</data>'.$/. |
'<data>'.join(',',@Diff).'</data>'.$/; |
'<data>'.join(',',@Diff).'</data>'.$/; |
# |
# |
|
my $title = 'Degree of Discrimination\nand Degree of Difficulty'; |
|
if ($xmax > 50) { |
|
$title = 'Degree of Discrimination and Degree of Difficulty'; |
|
} |
|
# |
$plot=<<"END"; |
$plot=<<"END"; |
<gnuplot |
<gnuplot |
texfont="10" |
texfont="10" |
Line 955 sub degrees_plot {
|
Line 984 sub degrees_plot {
|
align="center" |
align="center" |
border="on" |
border="on" |
transparent="on" |
transparent="on" |
alttag="Sample Plot" |
alttag="Degree of Discrimination and Degree of Difficulty Plot" |
samples="100" |
samples="100" |
bgcolor="xffffff" |
bgcolor="xffffff" |
height="$height" |
height="$height" |
Line 964 sub degrees_plot {
|
Line 993 sub degrees_plot {
|
pos="top right" |
pos="top right" |
title="" |
title="" |
box="off" /> |
box="off" /> |
<title>Degree of Discrmination and Degree of Difficulty</title> |
<title>$title</title> |
<axis xmin="0" ymin="$ymin" xmax="$xmax" ymax="$ymax" color="x000000" /> |
<axis xmin="0" ymin="$ymin" xmax="$xmax" ymax="$ymax" color="x000000" /> |
<xlabel>Problem Number</xlabel> |
<xlabel>Problem Number</xlabel> |
<curve |
<curve |
Line 1028 sub tries_data_plot {
|
Line 1057 sub tries_data_plot {
|
'<data>'.join(',',@Mean).'</data>'.$/. |
'<data>'.join(',',@Mean).'</data>'.$/. |
'<data>'.join(',',@STD).'</data>'.$/; |
'<data>'.join(',',@STD).'</data>'.$/; |
# |
# |
|
my $title = 'Mean and S.D. of Tries'; |
|
if ($xmax > 25) { |
|
$title = 'Mean and Standard Deviation of Tries'; |
|
} |
|
# |
$plot=<<"END"; |
$plot=<<"END"; |
<gnuplot |
<gnuplot |
texfont="10" |
texfont="10" |
Line 1038 sub tries_data_plot {
|
Line 1072 sub tries_data_plot {
|
align="center" |
align="center" |
border="on" |
border="on" |
transparent="on" |
transparent="on" |
alttag="Sample Plot" |
alttag="Mean and S.D of Tries Plot" |
samples="100" |
samples="100" |
bgcolor="xffffff" |
bgcolor="xffffff" |
height="$height" |
height="$height" |
width="$width"> |
width="$width"> |
<title>Mean and S.D. of Tries</title> |
<title>$title</title> |
<axis xmin="0" ymin="0" xmax="$xmax" ymax="$ymax" color="x000000" /> |
<axis xmin="0" ymin="0" xmax="$xmax" ymax="$ymax" color="x000000" /> |
<xlabel>Problem Number</xlabel> |
<xlabel>Problem Number</xlabel> |
|
<ylabel>Number of Tries</ylabel> |
<curve |
<curve |
linestyle="yerrorbars" |
linestyle="yerrorbars" |
name="S.D. Tries" |
name="S.D. Tries" |
Line 1078 sub plot_dropdown {
|
Line 1113 sub plot_dropdown {
|
my @Additional_Plots = ( |
my @Additional_Plots = ( |
{ graphable=>'yes', |
{ graphable=>'yes', |
name => 'degrees', |
name => 'degrees', |
title => 'DoDisc and DoDiff' }, |
title => 'Difficulty Indexes' }, |
{ graphable=>'yes', |
{ graphable=>'yes', |
name => 'tries statistics', |
name => 'tries statistics', |
title => 'Mean and S.D. of Tries' }); |
title => 'Tries Statistics' }); |
# |
# |
my $Str= "\n".'<select name="plot" size="1">'; |
my $Str= "\n".'<select name="plot" size="1">'; |
$Str .= '<option name="none"></option>'."\n"; |
$Str .= '<option name="none"></option>'."\n"; |
$Str .= '<option name="none2">none</option>'."\n"; |
$Str .= '<option name="none2">none</option>'."\n"; |
foreach my $field (@Fields,@Additional_Plots) { |
foreach my $field (@Additional_Plots,@Fields) { |
if (! exists($field->{'graphable'}) || |
if (! exists($field->{'graphable'}) || |
$field->{'graphable'} ne 'yes') { |
$field->{'graphable'} ne 'yes') { |
next; |
next; |
Line 1148 sub Excel_output {
|
Line 1183 sub Excel_output {
|
} |
} |
my $excel_sheet = $excel_workbook->addworksheet( |
my $excel_sheet = $excel_workbook->addworksheet( |
&Apache::loncommon::clean_excel_name($sheetname)); |
&Apache::loncommon::clean_excel_name($sheetname)); |
|
# |
|
my $format = &Apache::loncommon::define_excel_formats($excel_workbook); |
## |
## |
## Begin creating excel sheet |
## Begin creating excel sheet |
## |
## |
Line 1155 sub Excel_output {
|
Line 1192 sub Excel_output {
|
# |
# |
# Put the course description in the header |
# Put the course description in the header |
$excel_sheet->write($rows_output,$cols_output++, |
$excel_sheet->write($rows_output,$cols_output++, |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}); |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}, |
|
$format->{'h1'}); |
$cols_output += 3; |
$cols_output += 3; |
# |
# |
# Put a description of the sections listed |
# Put a description of the sections listed |
my $sectionstring = ''; |
my $sectionstring = ''; |
my @Sections = @Apache::lonstatistics::SelectedSections; |
$excel_sheet->write($rows_output,$cols_output++, |
if (scalar(@Sections) > 1) { |
&Apache::lonstathelpers::sections_description |
if (scalar(@Sections) > 2) { |
(@Apache::lonstatistics::SelectedSections), |
my $last = pop(@Sections); |
$format->{'h3'}); |
$sectionstring = "Sections ".join(', ',@Sections).', and '.$last; |
$cols_output += scalar(@Apache::lonstatistics::SelectedSections); |
} else { |
|
$sectionstring = "Sections ".join(' and ',@Sections); |
|
} |
|
} else { |
|
if ($Sections[0] eq 'all') { |
|
$sectionstring = "All sections"; |
|
} else { |
|
$sectionstring = "Section ".$Sections[0]; |
|
} |
|
} |
|
$excel_sheet->write($rows_output,$cols_output++,$sectionstring); |
|
$cols_output += scalar(@Sections); |
|
# |
# |
# Time restrictions |
# Time restrictions |
my $time_string; |
my $time_string; |
Line 1192 sub Excel_output {
|
Line 1218 sub Excel_output {
|
# See note above about lonlocal:locallocaltime |
# See note above about lonlocal:locallocaltime |
$time_string .= 'Data collected before '.localtime($endtime).'.'; |
$time_string .= 'Data collected before '.localtime($endtime).'.'; |
} |
} |
|
if (defined($time_string)) { |
|
$excel_sheet->write($rows_output,$cols_output++,$time_string); |
|
$cols_output+= 5; |
|
} |
# |
# |
# Put the date in there too |
# Put the date in there too |
$excel_sheet->write($rows_output,$cols_output++, |
$excel_sheet->write($rows_output,$cols_output++, |
Line 1199 sub Excel_output {
|
Line 1229 sub Excel_output {
|
# |
# |
$rows_output++; |
$rows_output++; |
$cols_output=0; |
$cols_output=0; |
# |
## |
# Long Headers |
## Sequence Statistics |
foreach my $field (@Fields) { |
## |
next if ($field->{'name'} eq 'problem_num'); |
&write_headers($excel_sheet,$format,\$rows_output,\$cols_output, |
next if ($field->{'selected'} ne 'yes'); |
\@SeqFields); |
if (exists($field->{'long_title'})) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
|
next if ($seq->{'num_assess'} < 1); |
|
my $data = $SeqStat{$seq->{'symb'}}; |
|
$cols_output=0; |
|
foreach my $field (@SeqFields) { |
|
next if ($field->{'selected'} ne 'yes'); |
$excel_sheet->write($rows_output,$cols_output++, |
$excel_sheet->write($rows_output,$cols_output++, |
$field->{'long_title'}); |
$data->{$field->{'name'}}); |
} else { |
|
$excel_sheet->write($rows_output,$cols_output++,''); |
|
} |
} |
|
$rows_output++; |
|
$cols_output=0; |
} |
} |
|
## |
|
## Resource Statistics |
|
## |
$rows_output++; |
$rows_output++; |
$cols_output=0; |
$cols_output=0; |
# Brief headers |
&write_headers($excel_sheet,$format,\$rows_output,\$cols_output, |
foreach my $field (@Fields) { |
\@Fields); |
next if ($field->{'selected'} ne 'yes'); |
# |
next if ($field->{'name'} eq 'problem_num'); |
|
# Use english for excel as I am not sure how well excel handles |
|
# other character sets.... |
|
$excel_sheet->write($rows_output,$cols_output++,$field->{'title'}); |
|
} |
|
$rows_output++; |
|
foreach my $data (@StatsArray) { |
foreach my $data (@StatsArray) { |
$cols_output=0; |
$cols_output=0; |
foreach my $field (@Fields) { |
foreach my $field (@Fields) { |
Line 1231 sub Excel_output {
|
Line 1263 sub Excel_output {
|
$data->{$field->{'name'}}); |
$data->{$field->{'name'}}); |
} |
} |
$rows_output++; |
$rows_output++; |
|
$cols_output=0; |
} |
} |
# |
# |
$excel_workbook->close(); |
$excel_workbook->close(); |
Line 1243 sub Excel_output {
|
Line 1276 sub Excel_output {
|
return; |
return; |
} |
} |
|
|
|
## |
|
## &write_headers |
|
## |
|
sub write_headers { |
|
my ($excel_sheet,$format,$rows_output,$cols_output,$Fields) = @_; |
|
## |
|
## First the long titles |
|
foreach my $field (@{$Fields}) { |
|
next if ($field->{'name'} eq 'problem_num'); |
|
next if ($field->{'selected'} ne 'yes'); |
|
if (exists($field->{'long_title'})) { |
|
$excel_sheet->write($$rows_output,${$cols_output}, |
|
$field->{'long_title'}, |
|
$format->{'bold'}); |
|
} else { |
|
$excel_sheet->write($$rows_output,${$cols_output},''); |
|
} |
|
${$cols_output}+= 1; |
|
} |
|
${$cols_output} =0; |
|
${$rows_output}+=1; |
|
## |
|
## Then the short titles |
|
foreach my $field (@{$Fields}) { |
|
next if ($field->{'selected'} ne 'yes'); |
|
next if ($field->{'name'} eq 'problem_num'); |
|
# Use english for excel as I am not sure how well excel handles |
|
# other character sets.... |
|
$excel_sheet->write($$rows_output,$$cols_output, |
|
$field->{'title'}, |
|
$format->{'bold'}); |
|
$$cols_output+=1; |
|
} |
|
${$cols_output} =0; |
|
${$rows_output}+=1; |
|
return; |
|
} |
|
|
################################################## |
################################################## |
################################################## |
################################################## |
## |
## |
Line 1276 sub compute_all_statistics {
|
Line 1347 sub compute_all_statistics {
|
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
last if ($c->aborted); |
last if ($c->aborted); |
next if ($seq->{'num_assess'} < 1); |
next if ($seq->{'num_assess'} < 1); |
|
&compute_sequence_statistics($seq); |
&compute_statistics_on_sequence($seq); |
&compute_statistics_on_sequence($seq); |
} |
} |
} |
} |
Line 1379 sub get_statistics {
|
Line 1451 sub get_statistics {
|
$data->{'deg_of_disc'} = |
$data->{'deg_of_disc'} = |
&compute_discrimination_factor($resource,$part,$sequence); |
&compute_discrimination_factor($resource,$part,$sequence); |
} |
} |
|
# |
|
# Store in metadata if computations were done for all students |
|
if ($Apache::lonstatistics::SelectedSections[0] eq 'all' && |
|
$data->{'num_students'} > 1) { |
|
my %storestats; |
|
# |
|
my $urlres=(&Apache::lonnet::decode_symb($resource->{'symb'}))[2]; |
|
my ($dom,$user) = $urlres=~/^(\w+)\/(\w+)/; |
|
my $preamble = $courseid.'___'.$urlres.'___'; |
|
# |
|
$storestats{$preamble.'timestamp'} = time; |
|
$storestats{$preamble.'stdno'} = $data->{'num_students'}; |
|
$storestats{$preamble.'avetries'} = $data->{'mean_tries'}; |
|
$storestats{$preamble.'difficulty'} = $data->{'deg_of_diff'}; |
|
if ($SelectedFields{'deg_of_disc'}) { |
|
$storestats{$preamble.'discrimination'} = $data->{'deg_of_disc'}; |
|
} |
|
# |
|
&Apache::lonnet::put('nohist_resevaldata',\%storestats,$dom,$user); |
|
} |
return $data; |
return $data; |
} |
} |
|
|
Line 1406 sub compute_discrimination_factor {
|
Line 1498 sub compute_discrimination_factor {
|
} |
} |
# |
# |
# rank |
# rank |
|
my ($starttime,$endtime) = &Apache::lonstathelpers::get_time_limits(); |
my $ranking = |
my $ranking = |
&Apache::loncoursedata::rank_students_by_scores_on_resources |
&Apache::loncoursedata::rank_students_by_scores_on_resources |
(\@Resources, |
(\@Resources, |
\@Apache::lonstatistics::SelectedSections, |
\@Apache::lonstatistics::SelectedSections, |
$Apache::lonstatistics::enrollment_status,undef); |
$Apache::lonstatistics::enrollment_status,undef, |
|
$starttime,$endtime); |
# |
# |
# compute their percent scores on the problems in the sequence, |
# compute their percent scores on the problems in the sequence, |
my $number_to_grab = int(scalar(@{$ranking})/4); |
my $number_to_grab = int(scalar(@{$ranking})/4); |
Line 1422 sub compute_discrimination_factor {
|
Line 1516 sub compute_discrimination_factor {
|
$_->[&Apache::loncoursedata::RNK_student()]; |
$_->[&Apache::loncoursedata::RNK_student()]; |
} @{$ranking}[($num_students-$number_to_grab)..($num_students-1)]; |
} @{$ranking}[($num_students-$number_to_grab)..($num_students-1)]; |
my ($bottom_sum,$bottom_max) = |
my ($bottom_sum,$bottom_max) = |
&Apache::loncoursedata::get_sum_of_scores($resource,$part,\@BottomSet); |
&Apache::loncoursedata::get_sum_of_scores($resource,$part,\@BottomSet, |
|
undef,$starttime,$endtime); |
my ($top_sum,$top_max) = |
my ($top_sum,$top_max) = |
&Apache::loncoursedata::get_sum_of_scores($resource,$part,\@TopSet); |
&Apache::loncoursedata::get_sum_of_scores($resource,$part,\@TopSet, |
|
undef,$starttime,$endtime); |
my $deg_of_disc; |
my $deg_of_disc; |
if ($top_max == 0 || $bottom_max==0) { |
if ($top_max == 0 || $bottom_max==0) { |
$deg_of_disc = 'nan'; |
$deg_of_disc = 'nan'; |
Line 1494 sub compute_sequence_statistics {
|
Line 1590 sub compute_sequence_statistics {
|
$SeqStat{$symb}->{'countmax'} = $cmax; |
$SeqStat{$symb}->{'countmax'} = $cmax; |
$SeqStat{$symb}->{'countmin'} = $cmin; |
$SeqStat{$symb}->{'countmin'} = $cmin; |
$SeqStat{$symb}->{'countstd'} = $cSTD; |
$SeqStat{$symb}->{'countstd'} = $cSTD; |
|
$SeqStat{$symb}->{'countmean'} = $cMean; |
$SeqStat{$symb}->{'count'} = $ccount; |
$SeqStat{$symb}->{'count'} = $ccount; |
$SeqStat{$symb}->{'items'} = $K; |
$SeqStat{$symb}->{'items'} = $K; |
$SeqStat{$symb}->{'KR-21'}=$kr_21; |
$SeqStat{$symb}->{'KR-21'}=$kr_21; |
|
|
return; |
return; |
} |
} |
|
|