[LON-CAPA-cvs] cvs: loncom /interface/statistics lonstudentassessment.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Thu, 12 Feb 2004 21:15:47 -0000
This is a MIME encoded message
--matthew1076620547
Content-Type: text/plain
matthew Thu Feb 12 16:15:47 2004 EDT
Modified files:
/loncom/interface/statistics lonstudentassessment.pm
Log:
Added summary table to excel output.
--matthew1076620547
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20040212161547.txt"
Index: loncom/interface/statistics/lonstudentassessment.pm
diff -u loncom/interface/statistics/lonstudentassessment.pm:1.89 loncom/interface/statistics/lonstudentassessment.pm:1.90
--- loncom/interface/statistics/lonstudentassessment.pm:1.89 Thu Feb 12 11:29:00 2004
+++ loncom/interface/statistics/lonstudentassessment.pm Thu Feb 12 16:15:47 2004
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonstudentassessment.pm,v 1.89 2004/02/12 16:29:00 matthew Exp $
+# $Id: lonstudentassessment.pm,v 1.90 2004/02/12 21:15:47 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -474,6 +474,7 @@
sequence_max => 1,
grand_total => 1,
summary_table => 1,
+ maximum_row => 1,
shortdesc => 'Total Score and Maximum Possible for each '.
'Sequence or Folder',
longdesc => 'The score of each student as well as the '.
@@ -490,6 +491,7 @@
sequence_max => 1,
grand_total => 1,
summary_table => 1,
+ maximum_row => 1,
shortdesc => 'Score on each Problem Part',
longdesc =>'The students score on each problem part, computed as'.
'the part weight * part awarded',
@@ -504,7 +506,8 @@
sequence_sum => 0,
sequence_max => 0,
grand_total => 0,
- summary_table => 1,
+ summary_table => 0,
+ maximum_row => 0,
shortdesc => 'Number of Tries before success on each Problem Part',
longdesc =>'The number of tries before success on each problem part.',
},
@@ -519,6 +522,7 @@
sequence_max => 1,
grand_total => 1,
summary_table => 1,
+ maximum_row => 0,
shortdesc => 'Number of Problem Parts completed successfully.',
longdesc => 'The Number of Problem Parts completed successfully and '.
'the maximum possible for each student',
@@ -757,10 +761,12 @@
#
# Check for suppressed output and close the progress window if so
$r->print("</pre>\n");
- if ($single_student_mode) {
- $r->print(&SingleStudentTotal());
- } else {
- $r->print(&StudentAverageTotal());
+ if ($chosen_output->{'summary_table'}) {
+ if ($single_student_mode) {
+ $r->print(&SingleStudentTotal());
+ } else {
+ $r->print(&StudentAverageTotal());
+ }
}
$r->rflush();
return;
@@ -873,7 +879,8 @@
undef ($total_formula);
#
my $total_columns = scalar(&get_student_fields_to_show());
-
+ my $num_students = scalar(@Apache::lonstatistics::Students);
+ #
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
if ($chosen_output->{'every_problem'}) {
$total_columns += $seq->{'num_assess_parts'};
@@ -927,6 +934,24 @@
$rows_output = 0;
$cols_output = 0;
#
+ # Determine rows
+ my $header_row = $rows_output++;
+ my $description_row = $rows_output++;
+ $rows_output++; # blank row
+ my $summary_header_row;
+ if ($chosen_output->{'summary_table'}) {
+ $summary_header_row = $rows_output++;
+ $rows_output+= scalar(&Apache::lonstatistics::Sequences_with_Assess());
+ $rows_output++;
+ }
+ my $sequence_name_row = $rows_output++;
+ my $resource_name_row = $rows_output++;
+ my $maximum_data_row = $rows_output++;
+ if (! $chosen_output->{'maximum_row'}) {
+ $rows_output--;
+ }
+ my $first_data_row = $rows_output++;
+ #
# Create sheet
$excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);
#
@@ -963,7 +988,7 @@
'mmm d yyyy hh:mm AM/PM');
#
# Put the course description in the header
- $excel_sheet->write($rows_output,$cols_output++,
+ $excel_sheet->write($header_row,$cols_output++,
$ENV{'course.'.$ENV{'request.course.id'}.'.description'},
$format->{'h1'});
$cols_output += 3;
@@ -985,24 +1010,21 @@
$sectionstring = "Section ".$Sections[0];
}
}
- $excel_sheet->write($rows_output,$cols_output++,$sectionstring,
+ $excel_sheet->write($header_row,$cols_output++,$sectionstring,
$format->{'h3'});
$cols_output += scalar(@Sections);
#
# Put the date in there too
- $excel_sheet->write($rows_output++,$cols_output++,
+ $excel_sheet->write($header_row,$cols_output++,
'Compiled on '.localtime(time),$format->{'h3'});
#
$cols_output = 0;
- $excel_sheet->write($rows_output++,$cols_output++,
+ $excel_sheet->write($description_row,$cols_output++,
$chosen_output->{'shortdesc'},
$format->{'h3'});
- #
- # Figure out the rows we need
- my $sequence_name_row = $rows_output+1;
- my $resource_name_row = $sequence_name_row+1;
- my $maximum_data_row = $sequence_name_row+2;
- my $first_data_row = $sequence_name_row+3;
+ ##############################################
+ # Output headings for the raw data
+ ##############################################
#
# Add the student headers
$cols_output = 0;
@@ -1015,11 +1037,11 @@
my $total_formula_string = '=0';
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
$excel_sheet->write($sequence_name_row,,
- $cols_output,$seq->{'title'},$format->{'h3'});
+ $cols_output,$seq->{'title'},$format->{'bold'});
# Determine starting cell
$seq->{'Excel:startcell'}=
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
- ($maximum_data_row,$cols_output);
+ ($first_data_row,$cols_output);
$seq->{'Excel:startcol'}=$cols_output;
my $count = 0;
if ($chosen_output->{'every_problem'}) {
@@ -1053,7 +1075,7 @@
} else {
$seq->{'Excel:endcell'} =
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
- ($maximum_data_row,$cols_output-1);
+ ($first_data_row,$cols_output-1);
$seq->{'Excel:endcol'} = $cols_output-1;
}
# Create the formula for summing up this sequence
@@ -1067,7 +1089,7 @@
# Determine cell the score is held in
$seq->{'Excel:scorecell'} =
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
- ($maximum_data_row,$cols_output);
+ ($first_data_row,$cols_output);
$seq->{'Excel:scorecol'}=$cols_output;
if ($chosen_output->{'base'} eq 'parts correct total') {
$excel_sheet->write($resource_name_row,$cols_output++,
@@ -1088,7 +1110,7 @@
#
$total_formula_string.='+'.
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
- ($maximum_data_row,$cols_output-1);
+ ($first_data_row,$cols_output-1);
if ($chosen_output->{'sequence_max'}) {
$excel_sheet->write($resource_name_row,$cols_output++,
'maximum',
@@ -1100,9 +1122,10 @@
$format->{'bold'});
}
$total_formula = $excel_sheet->store_formula($total_formula_string);
- #
+ ##############################################
# Output a row for MAX, if appropriate
- if ($chosen_output->{'scores'}) {
+ ##############################################
+ if ($chosen_output->{'maximum_row'}) {
$cols_output = 0;
foreach my $field (&get_student_fields_to_show()) {
if ($field eq 'username' || $field eq 'fullname' ||
@@ -1169,8 +1192,57 @@
$total_formula,undef,
%total_cell_translation);
}
- } # End of MAXIMUM row output if ($chosen_output->{'scores'}) {
+ } # End of MAXIMUM row output if ($chosen_output->{'maximum_row'}) {
$rows_output = $first_data_row;
+ ##############################################
+ # Output summary table, which actually is above the sequence name row.
+ ##############################################
+ if ($chosen_output->{'summary_table'}) {
+ $cols_output = 0;
+ $excel_sheet->write($summary_header_row,$cols_output++,
+ 'Summary Table',$format->{'bold'});
+ if ($chosen_output->{'maximum_row'}) {
+ $excel_sheet->write($summary_header_row,$cols_output++,
+ 'Maximum',$format->{'bold'});
+ }
+ $excel_sheet->write($summary_header_row,$cols_output++,
+ 'Average',$format->{'bold'});
+ $excel_sheet->write($summary_header_row,$cols_output++,
+ 'Median',$format->{'bold'});
+ $excel_sheet->write($summary_header_row,$cols_output++,
+ 'Std Dev',$format->{'bold'});
+ my $row = $summary_header_row+1;
+ foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) {
+ $cols_output = 0;
+ $excel_sheet->write($row,$cols_output++,
+ $seq->{'title'},
+ $format->{'bold'});
+ if ($chosen_output->{'maximum_row'}) {
+ $excel_sheet->write
+ ($row,$cols_output++,
+ '='.
+ &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
+ ($maximum_data_row,$seq->{'Excel:scorecol'})
+ );
+ }
+ my $range =
+ &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
+ ($first_data_row,$seq->{'Excel:scorecol'}).
+ ':'.
+ &Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
+ ($first_data_row+$num_students-1,$seq->{'Excel:scorecol'});
+ $excel_sheet->write($row,$cols_output++,
+ '=AVERAGE('.$range.')');
+ $excel_sheet->write($row,$cols_output++,
+ '=MEDIAN('.$range.')');
+ $excel_sheet->write($row,$cols_output++,
+ '=STDEV('.$range.')');
+ $row++;
+ }
+ }
+ ##############################################
+ # Take care of non-excel initialization
+ ##############################################
#
# Let the user know what we are doing
my $studentcount = scalar(@Apache::lonstatistics::Students);
--matthew1076620547--