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()
Example #4
0
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()
Example #5
0
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()