Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import collections
- import sys
- import math
- class Player:
- def __init__(self, line):
- line = line.strip().split('\t')
- self.num = int(line[0])
- self.pos = line[1]
- self.name = line[2]
- self.birth = line[3]
- def parse(lines):
- ind_coach = [i for i, line in enumerate(lines) if line.startswith('Coach')]
- ind_no = [i for i, line in enumerate(lines) if line.startswith('No.')]
- res = collections.defaultdict(list)
- for i_coach, i_no in zip(ind_coach, ind_no):
- team = lines[i_coach - 1].strip()
- for i in range(i_no + 1, i_no + 24):
- res[team].append(Player(lines[i]))
- return res
- def count_number_positions(lineups):
- res = {i: collections.Counter() for i in range(1, 24)}
- for team, players in lineups.items():
- for player in players:
- res[player.num][player.pos] += 1
- return res
- def entropy(xs):
- s = sum(xs)
- return abs(-sum(x / s * math.log(x / s) for x in xs) / math.log(4))
- def write_wide(numbers, outp):
- positions = ['GK', 'DF', 'MF', 'FW']
- outp.write('number\tGK\tDF\tMF\tFW\tentropy\n')
- for i in range(1, 24):
- outp.write('%d\t' % i)
- for pos in positions:
- outp.write('%2d\t' % numbers[i][pos])
- outp.write('%.4f\n' % entropy(numbers[i].values()))
- def write_long(numbers, outp):
- positions = ['GK', 'DF', 'MF', 'FW']
- outp.write('number\tposition\tcount\tentropy\n')
- for i in range(1, 24):
- for pos in positions:
- if numbers[i][pos]:
- outp.write('%d\t%s\t%d\t%.4f\n' % (i, pos, numbers[i][pos],
- entropy(numbers[i].values())))
- def main():
- with open('full.txt') as f:
- lines = f.readlines()
- lineups = parse(lines)
- numbers = count_number_positions(lineups)
- #write_wide(numbers, sys.stdout)
- write_long(numbers, sys.stdout)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement