change some wording
[mlpccg-meta.git] / mlpccg / Clustering.py
index e1fc959..a3abade 100644 (file)
@@ -3,29 +3,26 @@ from sklearn.feature_extraction import DictVectorizer
 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_
 
@@ -42,8 +39,6 @@ class Clustering:
         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,
@@ -66,7 +61,7 @@ class Clustering:
         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):
@@ -88,10 +83,3 @@ class Clustering:
             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])))))