view py/stats.py @ 72:1d8dc3ed22cf

Restore the default size of the high score list. In an era of megabyte JavaScript libraries, ten lines of text is not too much.
author John "Elwin" Edwards
date Sun, 20 Mar 2016 07:59:22 -0400
parents c045d4dcf88a
children
line wrap: on
line source

#!/usr/bin/python3

import math
import psycopg2
import rlgall

def makeExpPDF(lbd):
  def lpdf(x):
    return lbd * math.exp(-lbd * x)
  return lpdf

def makeExpCDF(lbd):
  def lcdf(x):
    return 1 - math.exp(-lbd * x)
  return lcdf

conn = psycopg2.connect("dbname=rlg")
cur = conn.cursor()
for game in rlgall.gamelist:
  query = "SELECT score FROM {0};".format(game.uname)
  cur.execute(query)
  scores = [ r[0] for r in cur.fetchall() ]
  count = len(scores)
  total = sum(scores)
  lbd = float(count) / total
  cdf = makeExpCDF(lbd)
  print("{0}: {1} games, average {2}".format(game.name, count, int(1/lbd)))
  for i in range(0, 10000, 1000):
    actual = len([ s for s in scores if i <= s < i + 1000 ])
    predicted = (cdf(i + 1000) - cdf(i)) * count
    print("{0:5}: {1:4} {2:.3}".format(i, actual, predicted))
  high = max(scores)
  print("Max: {0} {1:.3}\n".format(high, 1 - cdf(high)))

cur.close()
conn.close()
exit()