X-Git-Url: https://git.yukkurigames.com/?p=mlpccg-meta.git;a=blobdiff_plain;f=mlpccg%2FClustering.py;h=a3abadea9b4244513056312b1c83dc754a5366c7;hp=e1fc9595146ff6b538500570cff75eec1e9111eb;hb=f5f267a53e90455937409ad2bd15324e717c8e04;hpb=8fa58d46994cbd5d4f70204d2b1b57ba4cc4a516 diff --git a/mlpccg/Clustering.py b/mlpccg/Clustering.py index e1fc959..a3abade 100644 --- a/mlpccg/Clustering.py +++ b/mlpccg/Clustering.py @@ -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])))))