[LON-CAPA-cvs] cvs: loncom /interface/statistics lonproblemstatistics.pm
minaeibi
lon-capa-cvs@mail.lon-capa.org
Sat, 27 Jul 2002 20:48:36 -0000
This is a MIME encoded message
--minaeibi1027802916
Content-Type: text/plain
minaeibi Sat Jul 27 16:48:36 2002 EDT
Modified files:
/loncom/interface/statistics lonproblemstatistics.pm
Log:
Distinguished between problem statistics module and activity log perl module
--minaeibi1027802916
Content-Type: text/plain
Content-Disposition: attachment; filename="minaeibi-20020727164836.txt"
Index: loncom/interface/statistics/lonproblemstatistics.pm
diff -u loncom/interface/statistics/lonproblemstatistics.pm:1.3 loncom/interface/statistics/lonproblemstatistics.pm:1.4
--- loncom/interface/statistics/lonproblemstatistics.pm:1.3 Fri Jul 26 17:50:12 2002
+++ loncom/interface/statistics/lonproblemstatistics.pm Sat Jul 27 16:48:36 2002
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# (Publication Handler
#
-# $Id: lonproblemstatistics.pm,v 1.3 2002/07/26 21:50:12 minaeibi Exp $
+# $Id: lonproblemstatistics.pm,v 1.4 2002/07/27 20:48:36 minaeibi Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -43,7 +43,6 @@
use Apache::loncoursedata;
use GDBM_File;
-#my %mapsort;
sub BuildProblemStatisticsPage {
my ($cacheDB, $students, $courseID, $c, $r,%color)=@_;
@@ -106,288 +105,10 @@
return $Ptr;
}
-sub BuildDiffGraph {
- my ($r)=@_;
-
- my $graphData = &GetGraphData('DiffGraph', $r);
- return '<IMG src="/cgi-bin/graph.gif?'.$graphData.'" />';
-}
-
-sub BuildWrongGraph {
- my ($r)=@_;
-
- my $graphData = &GetGraphData('WrongGraph', $r);
- return '<IMG src="/cgi-bin/graph.gif?'.$graphData.'" />';
-}
-
-#---- Activity log -------------------------------------------------------
-
-sub LoadDoDiffFile {
- my $file="/home/minaeibi/183d.txt";
- open(FILEID, "<$file");
- my $line=<FILEID>;
- my %DoDiff=();
- my @Act=split('&',$line);
-
-# $r->print('<br>'.$#Act);
- for(my $n=0;$n<=$#Act;$n++){
- my ($res,$Degree)=split('@',$Act[$n]);
- $DoDiff{$res}=$Degree;
- }
-
- return \%DoDiff;
-}
-
-sub LoadClassFile {
- my $file="/home/minaeibi/class.txt";
- open(FILEID, "<$file");
- my $line;
- my %Grade=();
- while ($line=<FILEID>) {
- my ($id,$ex1,$ex2,$ex3,$ex4,$hw,$final,$grade)=split(' ',$line);
- $Grade{$id}=$grade;
- }
- return \%Grade;
-}
-
-#------- Classification
-sub Classify {
- my ($DiscFac, $students)=@_;
- my ($fileGrade) = &LoadClassFile();
- my $Count=0;
- my @List=();
- my @LS=();
- my @LF=();
- my @LM=();
- my $cf=0;
- my $cs=0;
- my $cm=0;
- foreach (keys(%$DiscFac)){
- my @l=split(/\:/,$_);
- if (!($students->{$l[1]})) {next;}
- my $Grade=$fileGrade->{$students->{$l[1]}};
- if( $Grade > 3 ) {
- $cs++;
- push(@LS,("$l[6],$l[5],$l[4],$l[7],$l[8],$l[9],Successful"));
- } elsif ( $Grade > 2 ) {
- $cm++;
- push(@LM,("$l[6],$l[5],$l[4],$l[7],$l[8],$l[9],Average"));
- } else {
- $cf++;
- push(@LF,("$l[6],$l[5],$l[4],$l[7],$l[8],$l[9],Failed"));
- }
- }
- my $Str = '';
- for(my $n=0;$n<$cs;$n++){$Str .= '<br>'.$LS[$n];}
- for(my $n=0;$n<$cm;$n++){$Str .= '<br>'.$LM[$n];}
- for(my $n=0;$n<$cf;$n++){$Str .= '<br>'.$LF[$n];}
-
- return $Str;
-}
-
-sub ProcAct {
- # return;
- my ($Act,$Submit)=@_;
- my @Act=split(/\@/,$Act);
- @Act = sort(@Act);
-
- ##$r->print('<br>'.$#Act);
- ##for(my $n=0;$n<=$#Act;$n++){
-## $r->print('<br>n='.$n.')'.$Act[$n]);
-## }
-
-# my $Beg=$Act[0];
- my $Dif=$Submit-$Act[0];
- $Dif = ($Dif>0) ? ($Dif/3600) : 0;
-
-# $r->print('<br>Access Number = '.$#Act.'<br>Submit Time='.$Submit.'<br>First Access='.$Act[0].'<br>Last Access='.$Act[$#Act].'<br> Submit - First = <b>'.$Dif.'</b>');
-
-
-#time spent for solving the problem
-# $r->print('<br>Def'.($Act[$#Act-1]-$Act[0]));
-
- return $Dif;
-}
-
-sub LoadActivityLog {
-# my $CacheDB = "/home/minaeibi/act183.log.cache";
- my $CacheDB = "/home/httpd/perl/tmp/act183.log.cache";
-
- my %Activity;
- if (-e "$CacheDB") {
- if (tie(%Activity,'GDBM_File',"$CacheDB",&GDBM_READER,0640)) {
- return;
- }
- else {
-# $r->print("Unable to tie log Cache hash to db file");
- }
- }
- else {
- if (tie(%Activity,'GDBM_File',$CacheDB,&GDBM_WRCREAT,0640)) {
- foreach (keys %Activity) {delete $Activity{$_};}
- &Build_log(\%Activity);
- }
- else {
-# $r->print("Unable to tie log Build hash to db file");
- }
- }
- return \%Activity;
-}
-
-sub Build_log {
- my ($Activity)=@_;
- my $file="/home/minaeibi/act183.log";
- open(FILEID, "<$file");
- my $line;
- my $count=0;
- while ($line=<FILEID>) {
- my ($time,$machine,$what)=split(':',$line);
- $what=&Apache::lonnet::unescape($what);
- my @accesses=split('&',$what);
-
- foreach my $access (@accesses) {
-
- $count++;
-
- my ($date,$resource,$who,$domain,$post,@posts)=split(':',$access);
- if (!$resource) { next; }
- my $res=&Apache::lonnet::unescape($resource);
- if (($res =~ /\.problem/)) {
- $Activity->{$who.':'.$res}.=$date.'@';
- #$r->print('<br>'.$time.':'.$who.'---'.$res);
- &Update_PrgInit($count);
-
- }
- }
- }
-
-# my $c=1;
-# foreach (sort keys %Activity) {
-# $r->print('<br>'.$c.')'.$_.' ... '.$Activity{$_});
-# $c++;
-# }
-
-}
-
-sub Activity {
- my $file="/home/minaeibi/activity.log";
- my $userid='adamsde1';
-# $r->print("<br>Using $file");
-# $r->rflush();
- open(FILEID, "<$file");
- my $line;
- my @allaccess;
- my $Count=0;
- while ($line=<FILEID>) {
- my ($time,$machine,$what)=split(':',$line);
- $what=&Apache::lonnet::unescape($what);
- my @accesses=split('&',$what);
- foreach my $access (@accesses) {
- my ($date,$resource,$who,$domain,$post,@posts)=split(':',$access);
- #if ($who ne $userid) { next; }
- if (!$resource) { next; }
- my $res=&Apache::lonnet::unescape($resource);
- if (($res =~ /\.(sequence|problem|htm|html|page)/)) {
- $Count++;
-###888 $r->print("<br>$Count) ".localtime($date).": $who --> $res");
-# if ($post) {
-# $Count++;
-# $r->print("<br><b>$Count) Sent data ".join(':',
-# &Apache::lonnet::unescape(@posts)).'</b>');
-# }
-###888 $r->rflush();
- }
- #push (@allaccess,unescape($access));
- #print $machine;
- }
- }
-# @allaccess=sort(@allaccess);
-# $Count=0;
-# foreach my $access (@allaccess) {
-# my ($date,$resource,$who,$domain,$post,@posts)=split(':',$access);
-# $Count++;
-# $r->print("<br>$Count) $date: $who --> $resource");
-# $r->rflush();
-# if ($post) {
-# $r->print("<br><b>Sent data ".join(':',unescape(@posts)).'</b>');
-# }
-# }
-}
-
-#---- END Activity log ---------------------------------------------------
#---- Problem Statistics Web Page ---------------------------------------
-#------- Processing upperlist and lowerlist according to each problem
-sub ProcessDiscriminant {
- my ($List) = @_;
- my @sortedList = sort (@$List);
- my $Count = scalar @sortedList;
- my $Problem;
- my @Dis;
- my $Slvd=0;
- my $tmp;
- my $Sum1=0;
- my $Sum2=0;
- my $nIndex=0;
- my $nStudent=0;
- my %Proc=undef;
- while ($nIndex<$Count) {
- ($Problem,$tmp)=split(/\=/,$sortedList[$nIndex]);
- @Dis=split(/\+/,$tmp);
- my $Temp = $Problem;
- do {
- $nIndex++;
- $nStudent++;
- $Sum1 += $Dis[0];
- $Sum2 += $Dis[1];
- ($Problem,$tmp)=split(/\=/,$sortedList[$nIndex]);
- @Dis=split(/\+/,$tmp);
- } while ( $Problem eq $Temp && $nIndex < $Count );
-# $Proc{$Temp}=($Sum1/$nStudent).':'.$nStudent;
- $Proc{$Temp}=($Sum1/$nStudent).':'.($Sum2/$nStudent);
-# $r->print("$nIndex) $Temp --> ($nStudent) $Proc{$Temp} <br>");
- $Sum1=0;
- $Sum2=0;
- $nStudent=0;
- }
-
- return %Proc;
-}
-#------- Creating Discimination factor
-sub Discriminant {
- my ($discriminantFactor)=@_;
- my @discriminantKeys=keys(%$discriminantFactor);
- my $Count = scalar @discriminantKeys;
-
- my $UpCnt = int(0.27*$Count);
- my $low=0;
- my $up=$Count-$UpCnt;
- my @UpList=();
- my @LowList=();
-
- $Count=0;
- foreach my $key (sort(@discriminantKeys)) {
- $Count++;
- if($low < $UpCnt || $Count > $up) {
- $low++;
- my $str=$discriminantFactor->{$key};
- foreach(split(/\:/,$str)){
- if($_) {
- if($low<$UpCnt) { push(@LowList,$_); }
- else { push(@UpList,$_); }
- }
- }
- }
- }
- my %DisUp = &ProcessDiscriminant(\@UpList);
- my %DisLow = &ProcessDiscriminant(\@LowList);
-
- return (\%DisUp, \%DisLow);
-}
-
-
sub NumericSort {
$a <=> $b;
}
@@ -451,8 +172,8 @@
foreach my $sequence (split(':', $cache->{'orderedSequences'})) {
# if($cache->{'ProblemStatisticsMap'} ne 'All Maps' &&
# $cache->{'ProblemStatisticsMap'} ne $cache->{$sequence.':title'}) {
- $r->print("<br>$name --- $sequence");
- $r->print("<br>".$cache->{$sequence.':title'});
+# $r->print("<br>$name --- $sequence");
+# $r->print("<br>".$cache->{$sequence.':title'});
# next;
# }
@@ -535,6 +256,8 @@
# correct order and prepare the output
foreach (split(/\:/,$cache->{$sequence.':'.$problemID.
':parts'})) {
+ #$r->print("<br>".$cache->{$sequence.':title'});
+
my $Yes = 0;
if($partData{$_.':code'} eq 'C' ||
$partData{$_.':code'} eq 'O') {
@@ -1024,12 +747,98 @@
return $Ptr;
}
+#------- Processing upperlist and lowerlist according to each problem
+sub ProcessDiscriminant {
+ my ($List) = @_;
+ my @sortedList = sort (@$List);
+ my $Count = scalar @sortedList;
+ my $Problem;
+ my @Dis;
+ my $Slvd=0;
+ my $tmp;
+ my $Sum1=0;
+ my $Sum2=0;
+ my $nIndex=0;
+ my $nStudent=0;
+ my %Proc=undef;
+ while ($nIndex<$Count) {
+ ($Problem,$tmp)=split(/\=/,$sortedList[$nIndex]);
+ @Dis=split(/\+/,$tmp);
+ my $Temp = $Problem;
+ do {
+ $nIndex++;
+ $nStudent++;
+ $Sum1 += $Dis[0];
+ $Sum2 += $Dis[1];
+ ($Problem,$tmp)=split(/\=/,$sortedList[$nIndex]);
+ @Dis=split(/\+/,$tmp);
+ } while ( $Problem eq $Temp && $nIndex < $Count );
+# $Proc{$Temp}=($Sum1/$nStudent).':'.$nStudent;
+ $Proc{$Temp}=($Sum1/$nStudent).':'.($Sum2/$nStudent);
+# $r->print("$nIndex) $Temp --> ($nStudent) $Proc{$Temp} <br>");
+ $Sum1=0;
+ $Sum2=0;
+ $nStudent=0;
+ }
+
+ return %Proc;
+}
+
+#------- Creating Discimination factor
+sub Discriminant {
+ my ($discriminantFactor)=@_;
+ my @discriminantKeys=keys(%$discriminantFactor);
+ my $Count = scalar @discriminantKeys;
+
+ my $UpCnt = int(0.27*$Count);
+ my $low=0;
+ my $up=$Count-$UpCnt;
+ my @UpList=();
+ my @LowList=();
+
+ $Count=0;
+ foreach my $key (sort(@discriminantKeys)) {
+ $Count++;
+ if($low < $UpCnt || $Count > $up) {
+ $low++;
+ my $str=$discriminantFactor->{$key};
+ foreach(split(/\:/,$str)){
+ if($_) {
+ if($low<$UpCnt) { push(@LowList,$_); }
+ else { push(@UpList,$_); }
+ }
+ }
+ }
+ }
+ my %DisUp = &ProcessDiscriminant(\@UpList);
+ my %DisLow = &ProcessDiscriminant(\@LowList);
+
+ return (\%DisUp, \%DisLow);
+}
+
+
+
#---- END Problem Statistics Web Page ----------------------------------------
#---- Problem Statistics Graph Web Page --------------------------------------
# ------------------------------------------- Prepare data for Graphical chart
+sub BuildDiffGraph {
+ my ($r)=@_;
+
+ my $graphData = &GetGraphData('DiffGraph', $r);
+ return '<IMG src="/cgi-bin/graph.gif?'.$graphData.'" />';
+}
+
+sub BuildWrongGraph {
+ my ($r)=@_;
+
+ my $graphData = &GetGraphData('WrongGraph', $r);
+ return '<IMG src="/cgi-bin/graph.gif?'.$graphData.'" />';
+}
+
+
sub GetGraphData {
my ($ylab,$r,%GraphDat)=@_;
my $Col;
@@ -1073,5 +882,7 @@
}
}
}
+
+
1;
__END__
--minaeibi1027802916--