from sklearn.cluster import AffinityPropagation
from sklearn.feature_extraction import DictVectorizer
from collections import defaultdict
-import csv
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 = CARDDB._by_id.keys()
+ self.labels = []
+ self.records = records
+ self.vectorizer = DictVectorizer()
- for record in self.records.all():
- if record['decklist_url']:
- decklist = DeckList(name=record['decklist_name'], url=record['decklist_url'])
- 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):