class TeamSetFeatureExtractor(object): """Extracts features related to a set of heros.""" FEATURES_TO_DELTA = ["glicko2 rating", "glicko rating", "elo rating"] def __init__(self): super(TeamSetFeatureExtractor, self).__init__() self.tfe = TeamFeatureExtractor() def extract(self, teams): team_features = dict() team_features[0] = self.tfe.extract(teams[0]) team_features[1] = self.tfe.extract(teams[1]) features = list() for feature in self.FEATURES_TO_DELTA: index = self.tfe.extractFeatureNames().index(feature) delta = team_features[1][index] - team_features[0][index] features.append(delta) return features def extractFeatureNames(self): feature_names = [feature + "_delta" for feature in self.FEATURES_TO_DELTA] return feature_names
class TestTeamFeatureExtractor(unittest2.TestCase): def setUp(self): self.tfe = TeamFeatureExtractor() def test_output(self): output = dict() for name, value in zip(self.tfe.extractFeatureNames(), self.tfe.extract("EHOME")): output[name] = value self.assertEqual(len(self.tfe.extractFeatureNames()), len(self.tfe.extract("EHOME"))) self.assertEqual(output["country"], "China") self.assertEqual(output["wins"], 189) self.assertEqual(output["losses"], 134) self.assertEqual(output["glicko2 rating"], 1840.65) self.assertEqual(output["elo rating"], 1256.75)
def setUp(self): self.tfe = TeamFeatureExtractor()
def buildExamples(input_file, output_file): f = open(input_file, 'r+') w = open(output_file, 'w') draft_list = f.read().split('\n') for draft in draft_list: attributes = draft.split(',') # print len(attributes) if len(attributes) != 102: #getting rid of malformed games print len(attributes) continue w.write("%s.0," % attributes[0]) #winner features = list() feature_names = list() feature_names.append("Who Went First") if attributes[5] == 'Radiant': features.append(1.0) elif attributes[5] == 'Dire': features.append(0.0) else: features.append(-1.0) radiant_ban_orders = [1, 3, 9, 11, 18] dire_ban_orders = [2, 4, 10, 12, 17] radiant_pick_orders = [5, 8, 14, 16, 20] dire_pick_orders = [6, 7, 13, 15, 19] offset_spaces = 3 attributes_per_hero = 5 hero_pick_indexes = [offset_spaces + x * attributes_per_hero for x in range(0, 20)] radiant_bans = [attributes[hero_pick_indexes[x-1]] for x in radiant_ban_orders] radiant_picks = [attributes[hero_pick_indexes[x-1]] for x in radiant_pick_orders] dire_bans = [attributes[hero_pick_indexes[x-1]] for x in dire_ban_orders] dire_picks = [attributes[hero_pick_indexes[x-1]] for x in dire_pick_orders] radiant_team = attributes[4] dire_team = attributes[9] features = list() feature_names = list() # hfe = HeroFeatureExtractor() # for index, hero in enumerate(radiant_bans): # features.extend(hfe.extract(hero)) # feature_names.extend(["radiant_ban_%s:%s" % (index, x) for x in hfe.extractFeatureNames()]) # # for index, hero in enumerate(radiant_picks): # features.extend(hfe.extract(hero)) # feature_names.extend(["radiant_pick_%s:%s" % (index, x) for x in hfe.extractFeatureNames()]) # names = zip(feature_names,features) # # for name in names: # # print str(name[0])+" "+str(name[1]) # for index, hero in enumerate(dire_bans): # features.extend(hfe.extract(hero)) # feature_names.extend(["dire_ban_%s:%s" % (index, x) for x in hfe.extractFeatureNames()]) # for index, hero in enumerate(dire_picks): # features.extend(hfe.extract(hero)) # feature_names.extend(["dire_pick_%s:%s" % (index, x) for x in hfe.extractFeatureNames()]) # # hsfe = HeroSetFeatureExtractor() # features.extend(hsfe.extract(radiant_picks)) # feature_names.extend(["radiant_picks_%s" % x for x in hsfe.extractFeatureNames()]) # features.extend(hsfe.extract(radiant_bans)) # feature_names.extend(["radiant_bans_%s" % x for x in hsfe.extractFeatureNames()]) # features.extend(hsfe.extract(dire_picks)) # feature_names.extend(["dire_picks_%s" % x for x in hsfe.extractFeatureNames()]) # features.extend(hsfe.extract(dire_bans)) # feature_names.extend(["dire_bans_%s" % x for x in hsfe.extractFeatureNames()]) tfe = TeamFeatureExtractor() features.extend(tfe.extract(radiant_team)) feature_names.extend(["radiant_team_%s" % x for x in tfe.extractFeatureNames()]) features.extend(tfe.extract(dire_team)) feature_names.extend(["dire_team_%s" % x for x in tfe.extractFeatureNames()]) w.write(",".join(str(x) for x in features)) w.write('\n') w.close() with open("features_" + output_file, 'w') as w: w.write(",".join(feature_names)) w.close()
def buildExamples(input_file, output_file): f = open(input_file, 'r+') w = open(output_file, 'w') draft_list = f.read().split('\n') for draft in draft_list: attributes = draft.split(',') # print len(attributes) if len(attributes) != 102: #getting rid of malformed games print len(attributes) continue w.write("%s.0," % attributes[0]) #winner features = list() feature_names = list() feature_names.append("Who Went First") if attributes[5] == 'Radiant': features.append(1.0) elif attributes[5] == 'Dire': features.append(0.0) else: features.append(-1.0) radiant_ban_orders = [1, 3, 9, 11, 18] dire_ban_orders = [2, 4, 10, 12, 17] radiant_pick_orders = [5, 8, 14, 16, 20] dire_pick_orders = [6, 7, 13, 15, 19] offset_spaces = 3 attributes_per_hero = 5 hero_pick_indexes = [ offset_spaces + x * attributes_per_hero for x in range(0, 20) ] radiant_bans = [ attributes[hero_pick_indexes[x - 1]] for x in radiant_ban_orders ] radiant_picks = [ attributes[hero_pick_indexes[x - 1]] for x in radiant_pick_orders ] dire_bans = [ attributes[hero_pick_indexes[x - 1]] for x in dire_ban_orders ] dire_picks = [ attributes[hero_pick_indexes[x - 1]] for x in dire_pick_orders ] radiant_team = attributes[4] dire_team = attributes[9] features = list() feature_names = list() # hfe = HeroFeatureExtractor() # for index, hero in enumerate(radiant_bans): # features.extend(hfe.extract(hero)) # feature_names.extend(["radiant_ban_%s:%s" % (index, x) for x in hfe.extractFeatureNames()]) # # for index, hero in enumerate(radiant_picks): # features.extend(hfe.extract(hero)) # feature_names.extend(["radiant_pick_%s:%s" % (index, x) for x in hfe.extractFeatureNames()]) # names = zip(feature_names,features) # # for name in names: # # print str(name[0])+" "+str(name[1]) # for index, hero in enumerate(dire_bans): # features.extend(hfe.extract(hero)) # feature_names.extend(["dire_ban_%s:%s" % (index, x) for x in hfe.extractFeatureNames()]) # for index, hero in enumerate(dire_picks): # features.extend(hfe.extract(hero)) # feature_names.extend(["dire_pick_%s:%s" % (index, x) for x in hfe.extractFeatureNames()]) # # hsfe = HeroSetFeatureExtractor() # features.extend(hsfe.extract(radiant_picks)) # feature_names.extend(["radiant_picks_%s" % x for x in hsfe.extractFeatureNames()]) # features.extend(hsfe.extract(radiant_bans)) # feature_names.extend(["radiant_bans_%s" % x for x in hsfe.extractFeatureNames()]) # features.extend(hsfe.extract(dire_picks)) # feature_names.extend(["dire_picks_%s" % x for x in hsfe.extractFeatureNames()]) # features.extend(hsfe.extract(dire_bans)) # feature_names.extend(["dire_bans_%s" % x for x in hsfe.extractFeatureNames()]) tfe = TeamFeatureExtractor() features.extend(tfe.extract(radiant_team)) feature_names.extend( ["radiant_team_%s" % x for x in tfe.extractFeatureNames()]) features.extend(tfe.extract(dire_team)) feature_names.extend( ["dire_team_%s" % x for x in tfe.extractFeatureNames()]) w.write(",".join(str(x) for x in features)) w.write('\n') w.close() with open("features_" + output_file, 'w') as w: w.write(",".join(feature_names)) w.close()
def __init__(self): super(TeamSetFeatureExtractor, self).__init__() self.tfe = TeamFeatureExtractor()