Advertisement
Guest User

Untitled

a guest
Jul 15th, 2018
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.01 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. import collections
  4. import sys
  5. import math
  6.  
  7.  
  8. class Player:
  9.     def __init__(self, line):
  10.         line = line.strip().split('\t')
  11.         self.num = int(line[0])
  12.         self.pos = line[1]
  13.         self.name = line[2]
  14.         self.birth = line[3]
  15.  
  16.  
  17. def parse(lines):
  18.     ind_coach = [i for i, line in enumerate(lines) if line.startswith('Coach')]
  19.     ind_no = [i for i, line in enumerate(lines) if line.startswith('No.')]
  20.  
  21.     res = collections.defaultdict(list)
  22.     for i_coach, i_no in zip(ind_coach, ind_no):
  23.         team = lines[i_coach - 1].strip()
  24.  
  25.         for i in range(i_no + 1, i_no + 24):
  26.             res[team].append(Player(lines[i]))
  27.     return res
  28.  
  29.  
  30. def count_number_positions(lineups):
  31.     res = {i: collections.Counter() for i in range(1, 24)}
  32.     for team, players in lineups.items():
  33.         for player in players:
  34.             res[player.num][player.pos] += 1
  35.     return res
  36.  
  37.  
  38. def entropy(xs):
  39.     s = sum(xs)
  40.     return abs(-sum(x / s * math.log(x / s) for x in xs) / math.log(4))
  41.  
  42.  
  43. def write_wide(numbers, outp):
  44.     positions = ['GK', 'DF', 'MF', 'FW']
  45.     outp.write('number\tGK\tDF\tMF\tFW\tentropy\n')
  46.     for i in range(1, 24):
  47.         outp.write('%d\t' % i)
  48.         for pos in positions:
  49.             outp.write('%2d\t' % numbers[i][pos])
  50.         outp.write('%.4f\n' % entropy(numbers[i].values()))
  51.  
  52. def write_long(numbers, outp):
  53.     positions = ['GK', 'DF', 'MF', 'FW']
  54.     outp.write('number\tposition\tcount\tentropy\n')
  55.     for i in range(1, 24):
  56.         for pos in positions:
  57.             if numbers[i][pos]:
  58.                 outp.write('%d\t%s\t%d\t%.4f\n' % (i, pos, numbers[i][pos],
  59.                                                    entropy(numbers[i].values())))
  60.  
  61.  
  62. def main():
  63.     with open('full.txt') as f:
  64.         lines = f.readlines()
  65.     lineups = parse(lines)
  66.     numbers = count_number_positions(lineups)
  67.     #write_wide(numbers, sys.stdout)
  68.     write_long(numbers, sys.stdout)
  69.  
  70.  
  71. if __name__ == '__main__':
  72.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement