version 1.7, 2004/04/14 20:35:29
|
version 1.8, 2004/04/16 21:43:56
|
Line 410 sub metadata_col_to_hash {
|
Line 410 sub metadata_col_to_hash {
|
|
|
=pod |
=pod |
|
|
|
=item nohist_resevaldata.db data structure |
|
|
|
The nohist_resevaldata.db file has the following possible keys: |
|
|
|
Statistics Data (values are integers, perl times, or real numbers) |
|
------------------------------------------ |
|
$course___$resource___avetries |
|
$course___$resource___count |
|
$course___$resource___difficulty |
|
$course___$resource___stdno |
|
$course___$resource___timestamp |
|
|
|
Evaluation Data (values are on a 1 to 5 scale) |
|
------------------------------------------ |
|
$username@$dom___$resource___clear |
|
$username@$dom___$resource___comments |
|
$username@$dom___$resource___depth |
|
$username@$dom___$resource___technical |
|
$username@$dom___$resource___helpful |
|
|
|
Course Context Data |
|
------------------------------------------ |
|
$course___$resource___course course id |
|
$course___$resource___comefrom resource preceeding this resource |
|
$course___$resource___goto resource following this resource |
|
$course___$resource___usage resource containing this resource |
|
|
|
New statistical data storage |
|
------------------------------------------ |
|
$course&$sec&$numstud___$resource___stats |
|
$sec is a string describing the sections: all, 1 2, 1 2 3,... |
|
Value is a '&' deliminated list of key=value pairs. |
|
Possible keys are (currently) disc,course,sections,difficulty, |
|
stdno, timestamp |
|
|
|
=cut |
|
|
|
###################################################################### |
|
###################################################################### |
|
|
|
=pod |
|
|
=item &process_reseval_data |
=item &process_reseval_data |
|
|
Process a nohist_resevaldata hash into a more complex data structure. |
Process a nohist_resevaldata hash into a more complex data structure. |
Line 474 sub process_reseval_data {
|
Line 516 sub process_reseval_data {
|
# $source is $cid\_$sec\_$stdno |
# $source is $cid\_$sec\_$stdno |
# $value is stat1=value&stat2=value&stat3=value,.... |
# $value is stat1=value&stat2=value&stat3=value,.... |
# |
# |
my ($cid,$sec,$stdno)=split('_',$source); |
my ($cid,$sec,$stdno)=split('&',$source); |
my $crssec = $cid.'_'.$sec; |
my $crssec = $cid.'&'.$sec; |
my @Data = split('&',$value); |
my @Data = split('&',$value); |
my %Statistics; |
my %Statistics; |
while (my ($key,$value) = split('=',pop(@Data))) { |
while (my ($key,$value) = split('=',pop(@Data))) { |
$Statistics{$key} = $value; |
$Statistics{$key} = $value; |
} |
} |
|
$sec =~ s:("$|^")::g; |
|
$Statistics{'sections'} = $sec; |
# |
# |
# Only store the data if the number of students is greater |
# Only store the data if the number of students is greater |
# than the data already stored |
# than the data already stored |
Line 522 sub process_dynamic_metadata {
|
Line 566 sub process_dynamic_metadata {
|
my %data; |
my %data; |
my $resdata = $DynamicData->{$url}; |
my $resdata = $DynamicData->{$url}; |
# |
# |
# Get the statistical data |
# Get the statistical data - Use a weighted average |
foreach my $type (qw/avetries difficulty stdno/) { |
foreach my $type (qw/avetries difficulty disc/) { |
my $count; |
my $studentcount; |
my $sum; |
my $sum; |
my @Values; |
my @Values; |
|
my @Students; |
# |
# |
|
# Old data |
foreach my $coursedata (values(%{$resdata->{'statistics'}}), |
foreach my $coursedata (values(%{$resdata->{'statistics'}}), |
values(%{$resdata->{'stats'}})) { |
values(%{$resdata->{'stats'}})) { |
if (ref($coursedata) eq 'HASH' && exists($coursedata->{$type})) { |
if (ref($coursedata) eq 'HASH' && exists($coursedata->{$type})) { |
$count++; |
$studentcount += $coursedata->{'stdno'}; |
$sum += $coursedata->{$type}; |
$sum += ($coursedata->{$type}*$coursedata->{'stdno'}); |
push(@Values,$coursedata->{$type}); |
push(@Values,$coursedata->{$type}); |
|
push(@Students,$coursedata->{'stdno'}); |
} |
} |
} |
} |
if ($count) { |
if (exists($resdata->{'stats'})) { |
$data{$type} = $sum/$count; |
foreach my $identifier (sort(keys(%{$resdata->{'stats'}}))) { |
|
my $coursedata = $resdata->{'stats'}->{$identifier}; |
|
$studentcount += $coursedata->{'stdno'}; |
|
$sum += $coursedata->{$type}*$coursedata->{'stdno'}; |
|
push(@Values,$coursedata->{$type}); |
|
push(@Students,$coursedata->{'stdno'}); |
|
} |
|
} |
|
# |
|
# New data |
|
if (defined($studentcount) && $studentcount>0) { |
|
$data{$type} = $sum/$studentcount; |
$data{$type.'_list'} = join(',',@Values); |
$data{$type.'_list'} = join(',',@Values); |
} |
} |
} |
} |
# |
# |
|
# Find out the number of students who have completed the resource... |
|
my $stdno; |
|
foreach my $coursedata (values(%{$resdata->{'statistics'}}), |
|
values(%{$resdata->{'stats'}})) { |
|
if (ref($coursedata) eq 'HASH' && exists($coursedata->{'stdno'})) { |
|
$stdno += $coursedata->{'stdno'}; |
|
} |
|
} |
|
if (exists($resdata->{'stats'})) { |
|
# |
|
# For the number of students, take the maximum found for the class |
|
my $current_course; |
|
my $coursemax=0; |
|
foreach my $identifier (sort(keys(%{$resdata->{'stats'}}))) { |
|
my $coursedata = $resdata->{'stats'}->{$identifier}; |
|
if (! defined($current_course)) { |
|
$current_course = $coursedata->{'course'}; |
|
} |
|
if ($current_course ne $coursedata->{'course'}) { |
|
$stdno += $coursemax; |
|
$coursemax = 0; |
|
$current_course = $coursedata->{'course'}; |
|
} |
|
if ($coursemax < $coursedata->{'stdno'}) { |
|
$coursemax = $coursedata->{'stdno'}; |
|
} |
|
} |
|
$stdno += $coursemax; # pick up the final course in the list |
|
} |
|
$data{'stdno'}=$stdno; |
|
# |
# Get the context data |
# Get the context data |
foreach my $type (qw/course goto comefrom/) { |
foreach my $type (qw/course goto comefrom/) { |
if (defined($resdata->{$type}) && |
if (defined($resdata->{$type}) && |
Line 581 sub process_dynamic_metadata {
|
Line 670 sub process_dynamic_metadata {
|
$comments .= '</div>'; |
$comments .= '</div>'; |
$data{'comments'} = $comments; |
$data{'comments'} = $comments; |
# |
# |
|
if (exists($resdata->{'stats'})) { |
|
$data{'stats'} = $resdata->{'stats'}; |
|
} |
|
# |
return %data; |
return %data; |
} |
} |
|
|
|
sub dynamic_metadata_storage { |
|
my ($data) = @_; |
|
my %Store; |
|
my $courseid = $data->{'course'}; |
|
my $sections = $data->{'sections'}; |
|
my $numstu = $data->{'num_students'}; |
|
my $urlres = $data->{'urlres'}; |
|
my $key = $courseid.'&'.$sections.'&'.$numstu.'___'.$urlres.'___stats'; |
|
$Store{$key} = |
|
'course='.$courseid.'&'. |
|
'sections='.$sections.'&'. |
|
'timestamp='.time.'&'. |
|
'stdno='.$data->{'num_students'}.'&'. |
|
'avetries='.$data->{'mean_tries'}.'&'. |
|
'difficulty='.$data->{'deg_of_diff'}; |
|
if (exists($data->{'deg_of_disc'})) { |
|
$Store{$key} .= '&'.'disc='.$data->{'deg_of_disc'}; |
|
} |
|
return %Store; |
|
} |
|
|
###################################################################### |
###################################################################### |
###################################################################### |
###################################################################### |