stats2.py: make graphs of maxdepth.
This commit is contained in:
parent
48c1b168bc
commit
766f3777b3
1 changed files with 92 additions and 49 deletions
141
py/stats2.py
141
py/stats2.py
|
|
@ -71,16 +71,102 @@ def ylimits(x):
|
||||||
divs = 5
|
divs = 5
|
||||||
return divs, lim
|
return divs, lim
|
||||||
|
|
||||||
|
def mkxlgraph(game, xls, xlcounts):
|
||||||
|
xlgraph = open("{0}/xl-{1}.svg".format(svgpath, game.uname), "w")
|
||||||
|
xlgraph.write(dochead)
|
||||||
|
xlgraph.write(stylesheet.format("0000ff"))
|
||||||
|
xlgraph.write(framerect)
|
||||||
|
xldivs, xlmax = ylimits(max(xlcounts))
|
||||||
|
scale = 500 / xlmax
|
||||||
|
for xl, count in zip(xls, xlcounts):
|
||||||
|
barx = xl * 50 + 60
|
||||||
|
barh = round(scale * count)
|
||||||
|
bary = 550 - barh
|
||||||
|
xlgraph.write(barstr.format(30, barh, barx, bary))
|
||||||
|
xlgraph.write(xllabel.format(barx + 15, xl))
|
||||||
|
for yl in range(xldivs + 1):
|
||||||
|
labeln = int(xlmax * yl / xldivs)
|
||||||
|
labelh = 550 + 8 - 500 * yl / xldivs
|
||||||
|
xlgraph.write(ylabel.format(labelh, labeln))
|
||||||
|
xlgraph.write(xlabelf.format("Experience level"))
|
||||||
|
xlgraph.write(ylabelf.format("# of games"))
|
||||||
|
xlgraph.write(ltitle.format(sitename))
|
||||||
|
xlgraph.write(ctitle.format(game.name))
|
||||||
|
xlgraph.write(rtitle.format(timestr))
|
||||||
|
xlgraph.write('</svg>\n')
|
||||||
|
xlgraph.close()
|
||||||
|
return
|
||||||
|
|
||||||
|
def mkscoregraph(game, scoreblocks, scorecounts):
|
||||||
|
if isinstance(game, rlgall.ARogueGame):
|
||||||
|
scorewidth = 1500
|
||||||
|
else:
|
||||||
|
scorewidth = 1000
|
||||||
|
scoregraph = open("{0}/score-{1}.svg".format(svgpath, game.uname), "w")
|
||||||
|
scoregraph.write(dochead)
|
||||||
|
scoregraph.write(stylesheet.format("ffff00"))
|
||||||
|
scoregraph.write(framerect)
|
||||||
|
scoredivs, scoremax = ylimits(max(scorecounts))
|
||||||
|
scale = 500 / scoremax
|
||||||
|
for block, count in zip(scoreblocks, scorecounts):
|
||||||
|
barx = block * 75 + 100
|
||||||
|
barh = round(scale * count)
|
||||||
|
bary = 550 - barh
|
||||||
|
scoregraph.write(barstr.format(75, barh, barx, bary))
|
||||||
|
scoregraph.write(xllabel.format(barx, block * scorewidth))
|
||||||
|
for yl in range(scoredivs + 1):
|
||||||
|
labeln = int(scoremax * yl / scoredivs)
|
||||||
|
labelh = 550 + 8 - 500 * yl / scoredivs
|
||||||
|
scoregraph.write(ylabel.format(labelh, labeln))
|
||||||
|
scoregraph.write(xlabelf.format("Score"))
|
||||||
|
scoregraph.write(ylabelf.format("# of games"))
|
||||||
|
scoregraph.write(ltitle.format(sitename))
|
||||||
|
scoregraph.write(ctitle.format(game.name))
|
||||||
|
scoregraph.write(rtitle.format(timestr))
|
||||||
|
scoregraph.write('</svg>\n')
|
||||||
|
scoregraph.close()
|
||||||
|
return
|
||||||
|
|
||||||
|
def mkdeepgraph(game, deeps, deepcounts):
|
||||||
|
deepgraph = open("{0}/deep-{1}.svg".format(svgpath, game.uname), "w")
|
||||||
|
deepgraph.write(dochead)
|
||||||
|
deepgraph.write(stylesheet.format("808000"))
|
||||||
|
deepgraph.write(framerect)
|
||||||
|
deepdivs, deepmax = ylimits(max(deepcounts))
|
||||||
|
scale = 500 / deepmax
|
||||||
|
for lev, count in zip(deeps, deepcounts):
|
||||||
|
barx = lev * 25 + 75
|
||||||
|
barh = round(scale * count)
|
||||||
|
bary = 550 - barh
|
||||||
|
deepgraph.write(barstr.format(25, barh, barx, bary))
|
||||||
|
if lev % 3 == 0:
|
||||||
|
deepgraph.write(xllabel.format(barx + 12.5, lev))
|
||||||
|
for yl in range(deepdivs + 1):
|
||||||
|
labeln = int(deepmax * yl / deepdivs)
|
||||||
|
labelh = 550 + 8 - 500 * yl / deepdivs
|
||||||
|
deepgraph.write(ylabel.format(labelh, labeln))
|
||||||
|
deepgraph.write(xlabelf.format("Deepest dungeon level"))
|
||||||
|
deepgraph.write(ylabelf.format("# of games"))
|
||||||
|
deepgraph.write(ltitle.format(sitename))
|
||||||
|
deepgraph.write(ctitle.format(game.name))
|
||||||
|
deepgraph.write(rtitle.format(timestr))
|
||||||
|
deepgraph.write('</svg>\n')
|
||||||
|
deepgraph.close()
|
||||||
|
return
|
||||||
|
|
||||||
con = psycopg2.connect("dbname=rlg")
|
con = psycopg2.connect("dbname=rlg")
|
||||||
cur = con.cursor()
|
cur = con.cursor()
|
||||||
|
|
||||||
for game in rlgall.gamelist:
|
for game in rlgall.gamelist:
|
||||||
xlq = "SELECT count(*) FROM {0} WHERE xl = %s;".format(game.uname)
|
xlq = "SELECT count(*) FROM {0} WHERE xl = %s;".format(game.uname)
|
||||||
scrq = "SELECT count(*) FROM {0} WHERE score >= %s AND score < %s;".format(game.uname)
|
scrq = "SELECT count(*) FROM {0} WHERE score >= %s AND score < %s;".format(game.uname)
|
||||||
|
deepq = "SELECT count(*) FROM {0} WHERE maxdepth = %s;".format(game.uname)
|
||||||
xls = range(1, 16)
|
xls = range(1, 16)
|
||||||
scoreblocks = range(10)
|
scoreblocks = range(10)
|
||||||
|
deeps = range(1, 31)
|
||||||
xlcounts = []
|
xlcounts = []
|
||||||
scorecounts = []
|
scorecounts = []
|
||||||
|
deepcounts = []
|
||||||
if isinstance(game, rlgall.ARogueGame):
|
if isinstance(game, rlgall.ARogueGame):
|
||||||
scorewidth = 1500
|
scorewidth = 1500
|
||||||
else:
|
else:
|
||||||
|
|
@ -96,55 +182,12 @@ for game in rlgall.gamelist:
|
||||||
hscore = (sn + 1) * scorewidth
|
hscore = (sn + 1) * scorewidth
|
||||||
cur.execute(scrq, (lscore, hscore))
|
cur.execute(scrq, (lscore, hscore))
|
||||||
scorecounts.append(cur.fetchone()[0])
|
scorecounts.append(cur.fetchone()[0])
|
||||||
xlgraph = open("{0}/xl-{1}.svg".format(svgpath, game.uname), "w")
|
for lev in deeps:
|
||||||
scoregraph = open("{0}/score-{1}.svg".format(svgpath, game.uname), "w")
|
cur.execute(deepq, [lev])
|
||||||
xlgraph.write(dochead)
|
deepcounts.append(cur.fetchone()[0])
|
||||||
scoregraph.write(dochead)
|
mkxlgraph(game, xls, xlcounts)
|
||||||
xlgraph.write(stylesheet.format("0000ff"))
|
mkscoregraph(game, scoreblocks, scorecounts)
|
||||||
scoregraph.write(stylesheet.format("ffff00"))
|
mkdeepgraph(game, deeps, deepcounts)
|
||||||
xlgraph.write(framerect)
|
|
||||||
scoregraph.write(framerect)
|
|
||||||
|
|
||||||
xldivs, xlmax = ylimits(max(xlcounts))
|
|
||||||
scale = 500 / xlmax
|
|
||||||
for xl, count in zip(xls, xlcounts):
|
|
||||||
barx = xl * 50 + 60
|
|
||||||
barh = round(scale * count)
|
|
||||||
bary = 550 - barh
|
|
||||||
xlgraph.write(barstr.format(30, barh, barx, bary))
|
|
||||||
xlgraph.write(xllabel.format(barx + 15, xl))
|
|
||||||
for yl in range(xldivs + 1):
|
|
||||||
labeln = int(xlmax * yl / xldivs)
|
|
||||||
labelh = 550 + 8 - 500 * yl / xldivs
|
|
||||||
xlgraph.write(ylabel.format(labelh, labeln))
|
|
||||||
|
|
||||||
scoredivs, scoremax = ylimits(max(scorecounts))
|
|
||||||
scale = 500 / scoremax
|
|
||||||
for block, count in zip(scoreblocks, scorecounts):
|
|
||||||
barx = block * 75 + 100
|
|
||||||
barh = round(scale * count)
|
|
||||||
bary = 550 - barh
|
|
||||||
scoregraph.write(barstr.format(75, barh, barx, bary))
|
|
||||||
scoregraph.write(xllabel.format(barx, block * scorewidth))
|
|
||||||
for yl in range(scoredivs + 1):
|
|
||||||
labeln = int(scoremax * yl / scoredivs)
|
|
||||||
labelh = 550 + 8 - 500 * yl / scoredivs
|
|
||||||
scoregraph.write(ylabel.format(labelh, labeln))
|
|
||||||
|
|
||||||
xlgraph.write(xlabelf.format("Experience level"))
|
|
||||||
xlgraph.write(ylabelf.format("# of games"))
|
|
||||||
scoregraph.write(xlabelf.format("Score"))
|
|
||||||
scoregraph.write(ylabelf.format("# of games"))
|
|
||||||
xlgraph.write(ltitle.format(sitename))
|
|
||||||
xlgraph.write(ctitle.format(game.name))
|
|
||||||
xlgraph.write(rtitle.format(timestr))
|
|
||||||
scoregraph.write(ltitle.format(sitename))
|
|
||||||
scoregraph.write(ctitle.format(game.name))
|
|
||||||
scoregraph.write(rtitle.format(timestr))
|
|
||||||
xlgraph.write('</svg>\n')
|
|
||||||
xlgraph.close()
|
|
||||||
scoregraph.write('</svg>\n')
|
|
||||||
scoregraph.close()
|
|
||||||
|
|
||||||
cur.close()
|
cur.close()
|
||||||
con.close()
|
con.close()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue