Thread created automatically to discuss a document in CD-Media.
Weeks 1-2 Elo Analysis by connor.worley
Here is the Python code used to calculate the ratings:
Code:
import csv
teams = {}
def getElo(team):
if team not in teams:
teams[team] = 1200
return teams[team]
def setElo(team, elo):
teams[team] = elo
def calculateElo(fileName, kFactor):
reader = csv.reader(open(fileName, 'r'))
for row in reader:
if row[3] == "Q" or row[3] == "E":
averageRedElo = (getElo(row[9]) + getElo(row[10]) + getElo(row[11]))/3
averageBlueElo = (getElo(row[12]) + getElo(row[13]) + getElo(row[14]))/3
Ea = 1/(1 + 10**((averageBlueElo - averageRedElo)/400))
Eb = 1/(1 + 10**((averageRedElo - averageBlueElo)/400))
if int(row[7]) > int(row[8]):
Sa = 1
Sb = 0
elif int(row[8]) > int(row[7]):
Sa = 0
Sb = 1
else:
Sa = 0.5
Sb = 0.5
dRa = kFactor*(Sa-Ea)
dRb = kFactor*(Sb-Eb)
setElo(row[9], getElo(row[9]) + dRa)
setElo(row[10], getElo(row[10]) + dRa)
setElo(row[11], getElo(row[11]) + dRa)
setElo(row[12], getElo(row[12]) + dRb)
setElo(row[13], getElo(row[13]) + dRb)
setElo(row[14], getElo(row[14]) + dRb)
calculateElo('matches_week_2_2014.csv', 24)
sortedTeams = sorted(teams, key=teams.get, reverse=True)
for team in sortedTeams:
print(team, getElo(team))