[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--