implement map overview

This commit is contained in:
Yannik Schmidt
2020-10-14 00:25:40 +02:00
parent 868346ad90
commit c3bb6f0e04
6 changed files with 128 additions and 0 deletions

45
MapSummary.py Normal file
View File

@@ -0,0 +1,45 @@
import json
import datetime
import player
import datetime
class MapSummary:
def __init__(self, rounds):
'''Create a map MapSummary from a Round-Array'''
self.securityWins = 0
self.insurgentWins = 0
self.times = []
self.predictions = []
self.totalGames = 0
self.confidence = []
self.mapName = None
for r in rounds:
self.mapName = r.mapName
self.totalGames += 1
if r.winnerSideString == "Insurgent":
self.insurgentWins += 1
else:
self.securityWins += 1
self.predictions += [r.numericPrediction]
self.confidence += [r.confidence]
self.times += [r.duration]
self.insurgentWinPercent = ""
self.securityWinPercent = ""
self.ratingSystemDeviation = "-"
self.averageTime = ""
try:
self.insurgentWinPercent = self.insurgentWins / self.totalGames*100
self.securityWinPercent = self.securityWins / self.totalGames*100
predictionPercision = 1 - sum(self.predictions)/len(self.predictions)
confidenceAverage = sum(self.confidence) / len(self.confidence)
averageSeconds = sum([t.total_seconds() for t in self.times]) / len(self.times)
self.averageTime = datetime.timedelta(seconds=int(averageSeconds))
self.ratingSystemDeviation = predictionPercision*100 - confidenceAverage
except ZeroDivisionError:
pass

View File

@@ -29,6 +29,7 @@ class Round:
self.mapName = "unavailiable"
self.confidence = int(confidence * 100)
self.numericPrediction = prediction
if prediction == 0:
self.prediction = self.winnerSideString
elif prediction == 1:

View File

@@ -168,4 +168,8 @@ class DatabaseConnection:
return None
return Round.Round(row)
def distinctMaps(self):
'''Get all distinct maps from rounds database'''
cursorRounds = self.connRounds.cursor()
return cursorRounds.execute('''SELECT DISTINCT map from rounds''')

BIN
rounds.sqlite Normal file

Binary file not shown.

View File

@@ -6,6 +6,7 @@ import datetime
import flask_caching as fcache
import json
import os
import MapSummary
from database import DatabaseConnection
@@ -44,6 +45,23 @@ def singleRound():
return flask.render_template("single_round.html", r=r)
@app.route("/maps")
def maps():
'''Show an overview of maps'''
db = DatabaseConnection(app.config["DB_PATH"])
start = datetime.datetime.now() - datetime.timedelta(days=4000)
end = datetime.datetime.now()
rounds = db.roundsBetweenDates(start, end)
distinctMaps = db.distinctMaps()
maps = []
for mapName in [ tupel[0] for tupel in distinctMaps]:
roundsWithMap = list(filter(lambda r: r.mapName == mapName , rounds))
maps += [MapSummary.MapSummary(roundsWithMap)]
mapsFiltered = filter(lambda x: x.mapName, maps)
return flask.render_template("maps.html", maps=mapsFiltered)
@app.route("/rounds-by-timestamp")
@app.route("/rounds")
def rounds():

60
templates/maps.html Normal file
View File

@@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Maps</title>
<meta name="Description" content="Insurgency Map Overview">
<link rel="stylesheet" type="text/css" href="/static/site.css">
<link rel="shortcut icon" href="/static/defaultFavicon.ico">
<!-- needed for @media-css mofiers -->
<meta content="width=device-width, initial-scale=1" name="viewport" />
<!-- Font Awesome -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css">
<!-- Bootstrap core CSS -->
<link href="static/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Material Design Bootstrap -->
<link href="static/bootstrap/css/mdb.min.css" rel="stylesheet">
<script src="static/bootstrap/js/jquery.js"></script>
<script src="static/bootstrap/js/popper.js"></script>
<script src="static/bootstrap/js/bootstrap.js"></script>
<script src="static/bootstrap/js/mdb.min.js"></script>
</head>
<body class="bg-special">
{% include 'navbar.html' %}
<div class="container mt-3 mb-3" role="main">
<table id="tableMain" class="table table-striped table-bordered table-sm"
cellspacing="0" width="100%">
<thead>
<tr>
<th class="th-sm">Map</th>
<th class="th-sm">Insurgent Win</th>
<th class="th-sm">Security Win</th>
<th class="th-sm">Average Time</th>
<th class="th-sm">Rating System Deviation</th>
</tr>
</thead>
<tbody>
{% for m in maps %}
<tr>
<td>{{ m.mapName }}</td>
<td>{{ '%0.2f' | format(m.insurgentWinPercent) }}%</td>
<td>{{ '%0.2f' | format(m.securityWinPercent) }}%</td>
<td>{{ m.averageTime }}</td>
{% if m.ratingSystemDeviation >= 0 %}
<td style="color: green;">+{{ '%0.2f' | format(m.ratingSystemDeviation) }}%
</td>
{% else %}
<td style="color: red;">+{{ '%0.2f' | format(m.ratingSystemDeviation) }}%
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% include 'footer.html' %}
</body>
</html>