[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemanalysis.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Thu, 09 Oct 2003 22:10:02 -0000
This is a MIME encoded message
--matthew1065737402
Content-Type: text/plain
matthew Thu Oct 9 18:10:02 2003 EDT
Modified files:
/loncom/interface/statistics lonproblemanalysis.pm
Log:
Many changes, some large, some small.
Added 'tries' selection box, although it doesn't work yet and this
functionality will likely be changed signifigantly in the future.
Use loncommon::DrawGraph instead of our own DrawGraph.
Added proper handling of selected students, instead of always running
analysis on all students in the cache tables.
--matthew1065737402
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20031009181002.txt"
Index: loncom/interface/statistics/lonproblemanalysis.pm
diff -u loncom/interface/statistics/lonproblemanalysis.pm:1.27 loncom/interface/statistics/lonproblemanalysis.pm:1.28
--- loncom/interface/statistics/lonproblemanalysis.pm:1.27 Wed Oct 8 15:20:47 2003
+++ loncom/interface/statistics/lonproblemanalysis.pm Thu Oct 9 18:10:02 2003
@@ -1,6 +1,6 @@
# The LearningOnline Network with CAPA
#
-# $Id: lonproblemanalysis.pm,v 1.27 2003/10/08 19:20:47 matthew Exp $
+# $Id: lonproblemanalysis.pm,v 1.28 2003/10/09 22:10:02 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -39,6 +39,9 @@
my ($r,$c)=@_;
$r->print('<h2>'.&mt('Option Response Problem Analysis').'</h2>');
$r->print(&CreateInterface());
+ #
+ my @Students = @Apache::lonstatistics::Students;
+ #
if (exists($ENV{'form.problemchoice'})) {
$r->print('<hr />');
&Apache::lonstatistics::Gather_Full_Student_Data($r);
@@ -46,6 +49,10 @@
my ($symb,$part,$resid) = &get_problem_symb(
&Apache::lonnet::unescape($ENV{'form.problemchoice'})
);
+ #
+# my ($firsttime,$lasttime) =
+# &Apache::loncoursedata::get_timestamp_data($symb,$resid);
+ #
my $resource = &get_resource_from_symb($symb);
if (defined($resource)) {
my %Data = &get_problem_data($resource->{'src'});
@@ -67,11 +74,23 @@
## Analyze the problem
my $PerformanceData =
&Apache::loncoursedata::get_optionresponse_data
- (undef,$symb,$resid);
+ (\@Students,$symb,$resid);
if (defined($PerformanceData) &&
ref($PerformanceData) eq 'ARRAY') {
- my $analysis_html = &DoTriesAnalysis($PerformanceData,$ORdata);
+ if ($ENV{'form.AnalyzeBy'} eq 'Tries') {
+ my $analysis_html = &DoTriesAnalysis($PerformanceData,
+ $ORdata);
$r->print($analysis_html);
+# } elsif ($ENV{'form.AnalyzeBy'} eq 'Time') {
+# my $analysis_html = &DoTimeAnalysis($PerformanceData,
+# $ORdata);
+# $r->print($analysis_html);
+ } else {
+ $r->print('<h2>'.
+ &mt('The analysis you have selected is '.
+ 'not supported at this time').
+ '</h2>');
+ }
} else {
$r->print('<h2>'.
&mt('There is no student data for this problem.').
@@ -92,7 +111,7 @@
sub DoTriesAnalysis {
my ($PerformanceData,$ORdata) = @_;
my $mintries = 1;
- my $maxtries = 3;
+ my $maxtries = 10;
my %ResponseData = &analyze_option_data_by_tries($PerformanceData,
$mintries,$maxtries);
my @Foils = sort(keys(%ResponseData));
@@ -160,22 +179,26 @@
$maxstu = $ResponseData{$foilid}->[$i]->{'total'};
}
}
+ $maxstu = 0 if (! $maxstu);
+ $minstu = 0 if (! $minstu);
my $graphlink;
if ($maxstu == $minstu) {
- $graphlink = &DrawGraph('Attempt '.$i.', '.$maxstu.' students',
- 'Foil Number',
- 'Percent Correct',
- 100,
- $PlotData[$i]->{'good'},
- $PlotData[$i]->{'bad'});
+ $graphlink = &Apache::loncommon::DrawGraph
+ ('Attempt '.$i.', '.$maxstu.' students',
+ 'Foil Number',
+ 'Percent Correct',
+ 100,
+ $PlotData[$i]->{'good'},
+ $PlotData[$i]->{'bad'});
} else {
- $graphlink = &DrawGraph('Attempt '.$i.', '.$minstu.'-'.$maxstu.
- ' students',
- 'Foil Number',
- 'Percent Correct',
- 100,
- $PlotData[$i]->{'good'},
- $PlotData[$i]->{'bad'});
+ $graphlink = &Apache::loncomon::DrawGraph
+ ('Attempt '.$i.', '.$minstu.'-'.$maxstu.
+ ' students',
+ 'Foil Number',
+ 'Percent Correct',
+ 100,
+ $PlotData[$i]->{'good'},
+ $PlotData[$i]->{'bad'});
}
push(@Data,'<td colspan="3">'.$graphlink.'</td>');
}
@@ -228,40 +251,6 @@
return %Trydata;
}
-sub DrawGraph {
- my ($title,$xlabel,$ylabel,$MaxY,$values1,$values2)=@_;
- if (! defined($values1) || ref($values1) ne 'ARRAY') {
- return '';
- }
- $title = '' if (! defined($title));
- $xlabel = '' if (! defined($xlabel));
- $ylabel = '' if (! defined($ylabel));
- $title = &Apache::lonnet::escape($title);
- $xlabel = &Apache::lonnet::escape($xlabel);
- $ylabel = &Apache::lonnet::escape($ylabel);
- #
- my $sendValues1 = join(',', @$values1);
- my $sendValues2;
- if (defined($values2)) {
- $sendValues2 = join(',', @$values2);
- }
-
- my $sendCount = scalar(@$values1);
- $MaxY =1 if ($MaxY < 1);
- if ( int($MaxY) < $MaxY ) {
- $MaxY++;
- $MaxY = int($MaxY);
- }
- my @GData = ($title,$xlabel,$ylabel,$MaxY,$sendCount,$sendValues1);
- if (defined($sendValues2)) {
- push (@GData,$sendValues2);
- }
- return '<IMG src="/cgi-bin/graph.png?'.
- (join('&', @GData)).'" border="1" />';
-}
-
-
-
sub get_problem_symb {
my $problemstring = shift();
my ($symb,$partid,$resid) = ($problemstring=~ /^(.*):([^:]*):([^:]*)$/);
@@ -269,19 +258,31 @@
}
sub CreateInterface {
+ ##
+ ## Environment variable initialization
+ if (! exists$ENV{'form.AnalyzeBy'}) {
+ $ENV{'form.AnalyzeBy'} = 'Tries';
+ }
+ ##
+ ## Build the menu
my $Str = '';
$Str .= '<table cellspacing="5">'."\n";
$Str .= '<tr>';
$Str .= '<td align="center"><b>'.&mt('Sections').'</b></td>';
$Str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>';
$Str .= '<td align="center"><b>'.&mt('Sequences and Folders').'</b></td>';
+ $Str .= '<td align="center"><b>'.&mt('Analyze By').'</b></td>';
$Str .= '</tr>'."\n";
#
$Str .= '<tr><td align="center">'."\n";
$Str .= &Apache::lonstatistics::SectionSelect('Section','multiple',5);
- $Str .= '</td><td align="center">';
+ $Str .= '</td>';
+ #
+ $Str .= '<td align="center">';
$Str .= &Apache::lonhtmlcommon::StatusOptions(undef,undef,5);
- $Str .= '</td><td align="center">';
+ $Str .= '</td>';
+ #
+ $Str .= '<td align="center">';
my $only_seq_with_assessments = sub {
my $s=shift;
if ($s->{'num_assess'} < 1) {
@@ -292,7 +293,22 @@
};
$Str .= &Apache::lonstatistics::MapSelect('Maps','multiple,all',5,
$only_seq_with_assessments);
- $Str .= '</td></tr>'."\n";
+ $Str .= '</td>';
+ #
+ $Str .= '<td>';
+ $Str .='<input type="radio" name="AnalyzeBy" value="Tries" ';
+ if ($ENV{'form.AnalyzeBy'} eq 'Tries') {
+ $Str .= 'checked ';
+ }
+ $Str .= '>'.&mt('Tries').'<br />';
+ $Str .='<input type="radio" name="AnalyzeBy" value="Time" ';
+ if ($ENV{'form.AnalyzeBy'} eq 'Time') {
+ $Str .= 'checked ';
+ }
+ $Str .= '>'.&mt('Time').'<br />';
+ $Str .= '</td>';
+ #
+ $Str .= '</tr>'."\n";
$Str .= '</table>'."\n";
$Str .= '<input type="submit" name="ProblemAnalysis" value="'.
&mt('Analyze Problem').'" />';
--matthew1065737402--