]> git.sesse.net Git - wloh/commitdiff
When training, only include players with games.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 18 Mar 2012 23:53:50 +0000 (00:53 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 18 Mar 2012 23:53:50 +0000 (00:53 +0100)
train.pl

index 67b2b8d737e49f0dbde6f004923cc8f6af7b5c83..119b738dd4cddf322fee45107db587cb4df1dd47 100755 (executable)
--- a/train.pl
+++ b/train.pl
@@ -15,26 +15,8 @@ $dbh->{RaiseError} = 1;
 my $ref = $dbh->selectrow_hashref('SELECT sesong FROM fotballserier GROUP BY sesong HAVING COUNT(*)=COUNT(avgjort=1 OR NULL) ORDER BY sesong DESC LIMIT 1');
 my $last_season = $ref->{'sesong'};
 
-my $tmpnam = POSIX::tmpnam();
-open DATA, ">", $tmpnam
-       or die "$tmpnam: $!";
-
-# Fetch name (ID) list
-my $q = $dbh->prepare('SELECT DISTINCT id FROM fotballdeltagere');
-$q->execute();
-my @ids = ();
-while (my $ref = $q->fetchrow_hashref) {
-       my $id = $ref->{'id'};
-       push @ids, $id;
-}
-       
-print DATA scalar @ids, "\n";
-for my $id (@ids) {
-       print DATA $id, "\n";
-}
-
 # Fetch games
-$q = $dbh->prepare('
+my $q = $dbh->prepare('
 SELECT
   deltager1.id as p1, deltager2.id as p2, maalfor, maalmot, least(pow(2.0, (sesong - ? + 3) / 3.0), 1.0) AS vekt
 FROM
@@ -46,13 +28,30 @@ WHERE deltager1.Nr > deltager2.nr
 ');
 $q->execute($last_season);
 
+my @games = ();
+my %ids = ();
+
 while (my $ref = $q->fetchrow_hashref) {
        next if ($ref->{'maalfor'} == 150 && $ref->{'maalmot'} == 0);
        next if ($ref->{'maalfor'} == 0 && $ref->{'maalmot'} == 150);
        next if ($ref->{'maalfor'} == 150 && $ref->{'maalmot'} == 150);
-       printf DATA "%d %d %d %d %f\n", $ref->{'p1'}, $ref->{'p2'}, $ref->{'maalfor'}, $ref->{'maalmot'}, $ref->{'vekt'};
+       push @games, { %$ref };
+       $ids{$ref->{'p1'}} = 1;
+       $ids{$ref->{'p2'}} = 1;
 }
 
+# Output to file
+my $tmpnam = POSIX::tmpnam();
+open DATA, ">", $tmpnam
+       or die "$tmpnam: $!";
+
+printf DATA "%d\n", scalar keys %ids;
+for my $id (keys %ids) {
+       printf DATA "%d\n", $id;
+}
+for my $ref (@games) {
+       printf DATA "%d %d %d %d %f\n", $ref->{'p1'}, $ref->{'p2'}, $ref->{'maalfor'}, $ref->{'maalmot'}, $ref->{'vekt'};
+}
 close DATA;
 
 $dbh->do('DELETE FROM ratings');