コード例 #1
0
ファイル: condorcet.py プロジェクト: AdamPrimer/BGGStats
#!/usr/bin/env python
import cProfile
from itertools import combinations
from datetime import datetime
from collections import defaultdict
from BoardGameGeek import BoardGameGeek

num_games = 500

bgg = BoardGameGeek()
top_100 = bgg.top_100(limit=num_games)

#print "Loading Ratings"
def load_ratings():
    users = defaultdict(list)
    ratings = bgg.all_ratings()
    for bgg_id, bgg_user, rating in ratings.yield_per(100):
        users[bgg_user].append((bgg_id, rating))
    return users

users = load_ratings()
#print ""

#print "Parsing User Votes"
def parse_votes(users):
    votes = defaultdict(dict)
    for user, ratings in users.iteritems():
        c_rating = 11
        c_rank = 0
        for (game, rating) in sorted(ratings, key=lambda x: x[1], reverse=True):
            if rating < c_rating:
コード例 #2
0
ファイル: recc.py プロジェクト: AdamPrimer/BGGStats
sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)

from docopt import docopt

import cProfile
from itertools import combinations
from datetime import datetime
from collections import defaultdict
from BoardGameGeek import BoardGameGeek

args = docopt(__doc__, version='Board Game Geek Recommender v1.0')

num_games = 500

bgg = BoardGameGeek()

def print_game(res):
    print u"{} ({}) (#{}) (w: {:>3.1f})".format(
        res['name'],
        res['yearpublished'],
        res['rank'],
        res['weight']),
    print u"| {:2.2f} ({:2.2f}) ({})".format(
        res['weighted_rating'], res['rating'], res['ratings'])
    print u"Artists: {}".format(", ".join([x['name'] for x in res['artists']]))
    print u"Categories: {}".format(", ".join([x['name'] for x in res['categories']]))
    print u"Designers: {}".format(", ".join([x['name'] for x in res['designers']]))
    print u"Mechanisms: {}".format(", ".join([x['name'] for x in res['mechanisms']]))
    print u"Publishers: {}".format(", ".join([x['name'] for x in res['publishers']]))
    for i, ans in sorted(res['players_poll'].items()):
コード例 #3
0
ファイル: bgg.py プロジェクト: AdamPrimer/BGGStats
                game['rank'], perc,
                (six['best'] + six['recommended']) / float(six['total']),
                game['weight'], game['maxplaytime'],
                game['yearpublished'], stars, game['name'],
                "https://boardgamegeek.com/boardgame/{}".format(game['bgg_id']))

        else:
            print u"{:>3} | {:>3.1f} | {} min | {} | {}[{}]({})".format(
                game['rank'], game['weight'], game['maxplaytime'],
                game['yearpublished'], stars, game['name'],
                "https://boardgamegeek.com/boardgame/{}".format(game['bgg_id']))

if __name__ == '__main__':
    args = docopt(__doc__, version='Board Game Geek Stats v1.0')

    bgg = BoardGameGeek()

    if args['--top']:
        limit = int(args['--top'])

        min_weight = 0
        if args['--min-weight']:
            min_weight = float(args['--min-weight'])

        max_weight = 5
        if args['--max-weight']:
            max_weight = float(args['--max-weight'])

        num_players = None
        if args['--n']:
            num_players = int(args['--n'])