from collections import defaultdict
import csv
-import mlpccg
+from mlpccg.CardDb import CARDDB
+from mlpccg.DeckList import DeckList
class Clustering:
def __init__(self, records):
- self.records = records
self.decks = []
self.features = []
- self.features_alt = []
self.placements = {}
self.clusters = defaultdict(list)
- self.all_ids = mlpccg.CardDb.CARDDB._by_id.keys()
+ self.all_ids = CARDDB._by_id.keys()
+ self.labels = []
+ self.records = records
+ self.vectorizer = DictVectorizer()
- for record in self.records.all():
- if record['Decklist']:
- decklist = mlpccg.DeckList(name=record['Name'], url=record['Decklist'])
- self.features += [self.extract_features(decklist)]
- self.features_alt += [self.extract_features_alt(decklist)]
- self.decks += [decklist]
- self.placements[decklist] = int(record['Placement'])
+ for record in self.records:
+ self.features += [self.extract_features_alt(record['decklist'])]
+ self.decks += [record['decklist']]
+ self.placements[record['decklist']] = int(record['placement'])
- self.vectorizer = DictVectorizer()
X = self.vectorizer.fit_transform(self.features).toarray()
-
self.af = AffinityPropagation().fit(X)
self.labels = self.af.labels_
return features
def extract_features(self, deck):
- return self.extract_features_alt(deck)
-
features = {
'Blue': 0, 'Yellow': 0, 'Purple': 0, 'White': 0, 'Orange': 0, 'Pink': 0,
'Friend': 0, 'Event': 0, 'Resource': 0, 'Troublemaker': 0, 'Mane': 0, 'Problem': 0,
return features
def predict(self, decklist):
- X = self.vectorizer.fit_transform([self.extract_features(decklist)]).toarray()
+ X = self.vectorizer.fit_transform([self.extract_features_alt(decklist)]).toarray()
return self.af.predict(X)[0]
def ranking(self):
ranking += [(stats['avg'], stats['label'])]
return ranking
-
-if __name__ == '__main__':
- tournament_records = mlpccg.TournamentRecords()
- clustering = Clustering(tournament_records)
-
- for placement_avg, cluster_label in clustering.ranking():
- print '%.1f - %s' % (placement_avg, '; '.join(list(set(map(lambda x: x.name, clustering.clusters[cluster_label])))))