GithubHelp home page GithubHelp logo

woctezuma / metacouncil-goty Goto Github PK

View Code? Open in Web Editor NEW
1.0 3.0 0.0 925 KB

MetaCouncil's PC Games of the Year Awards 2018-20, Decade Awards 201X.

License: MIT License

Python 100.00%
goty vote metacouncil steamcouncil steamspy steamspy-api igdb igdb-api igdb-database schulze

metacouncil-goty's Introduction

MetaCouncil's PC Games of the Year (GOTY) Awards

Build status with Github Action Code coverage Code Quality

MetaCouncil GOTY banner

Introduction

These awards focus on PC games which we deem GOTY worthy, as well as the best DLC / Ongoing game, the best Early Access game, and the best VR game. Exceptionally, for 2019, there is also an award for the Game of the Decade (GOTD).

Method

Ballots are cast on MetaCouncil (2018, 2019, 2020) and processed with our implementation of Schulze method.

Usage

  • To compute the GOTY ranking, run:
python schulze_goty.py
  • To compute the GOTD ranking, run:
python schulze_gotd.py
  • To compute the rankings for the optional categories (DLC / Ongoing, Early Access, VR, etc.), run:
# if there is a single choice per optional category:
python optional_categories.py

# if there are several (ranked) choices per optional category:
python schulze_optional.py
  • To generate a message to thank voters, run:
python generate_thanks.py
  • To anonymize data before uploading it to Github, run:
python anonymize_data.py

With SteamSpy

  • If needed, edit hard-coded values below, then run the three aforementioned scripts again:
    • extend_steamspy.py (manual addition of a few appIDs to SteamSpy's database)
    • hard_coded_matches.py (manual match of a few game names with appIDs)
    • disqualify_vote.py (manual disqualification of a few appIDs)
    • whitelist_vote.py (manual white-listing of a few appIDs)

With IGDB

Let us assume the target release year is 2018 for this section, i.e. we focus on games released during the year 2018.

  • If needed, edit hard-coded values below, then run the three aforementioned scripts again:
    • fixes_to_igdb_local_database_2018.json (manual addition of a few appIDs to IGDB's database)
    • fixes_to_igdb_match_database_2018.json (manual match of a few game names with appIDs)
    • disqualified_igdb_ids_2018.json (manual disqualification of a few appIDs)
    • whitelisted_igdb_ids_2018.json (manual white-listing of a few appIDs)

The fixes to the local database allow to extend the IGDB database, in case a game is missing from IGDB, e.g. Steam games in the adult section of the store.

The fixes to the match database allow to manually enforce matches between input game names and IGDB ids, in order to edit results from the automatic matching method:

  • fix empty matches: no match could be found by IGDB,
  • fix actual mismatches: the match is factually wrong,
  • merge matches for different versions (vanilla, definitive, etc.) of the same game, e.g. Darks Souls 1. Without merging versions of the same game, votes for this same game would be spread to the detriment of the game rank.

The black-list allows to disqualify some games for manually specified reasons.

The white-list allows to prevent the automatic disqualification of some games due to their reported release date differing from the target release year.

Results

Results are displayed:

Alternative methods for game name matching

SteamSpy and Levenshtein distance

The first implementation relied on SteamSpy's database, and matched game names with Levenshtein distance.

In practice, Levenshtein distance is effective at fixing typos, but cannot work for cases where the input is short and the actual game title is long, e.g. for Resident Evil 7:

RESIDENT EVIL 7 biohazard / BIOHAZARD 7 resident evil

SteamSpy and difflib

If we use SteamSpy, we have the choice between Levenshtein distance and difflib for name matching.

Difflib allows to match game names with the longest contiguous matching subsequence. However, difflib is notably slower than Levenshtein distance.

IGDB

As of January 2020, IGDB's database, which extends beyond Steam, can be used in place of SteamSpy with the use_igdb flag.

If IGDB is to be used, then you need to have a user secret key to be authorized. It is free, but you need to register on IGDB.

The API is queried whenever it is necessary, and the responses are locally saved to avoid unnecessary requests. As a free user, there is a monthly allowance of 50k requests per month.

Name matching is delegated to IGDB because the whole IGDB database is not locally available. In theory, this could lead to worse results if there are typos in the input names. However:

  • IGDB's database is larger than SteamSpy's, so name matching could be better, thanks to the availability of alternative names.
  • IGDB also offers access to information about DLC, which could be useful for at least one of the optional categories,
  • typos are not a big issue: they are rare in the input game names for the GotY votes.

Benchmark

A quantitative comparison is shown in a benchmark on the Wiki.

The mismatches observed with the 2018 dataset are counted, and the best performing methods are:

  1. IGDB database with a constraint w.r.t. the release year: 8 mismatches,
  2. IGDB database: 11 mismatches,
  3. vanilla SteamSpy database with difflib matching and a constraint w.r.t. the release year: 12 mismatches,
  4. vanilla SteamSpy database with difflib matching: 14 mismatches,
  5. vanilla SteamSpy database with Levenshtein distance: 18 mismatches (same performance with and without constraint).

In summary, in order to minimize the number of manual edits necessary to extend the database and to fix name mismatches, the most promising method involves using the IGDB database with a constraint w.r.t. the release year.

References

metacouncil-goty's People

Contributors

pyup-bot avatar renovate[bot] avatar woctezuma avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

metacouncil-goty's Issues

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/python-app.yml
  • actions/checkout v4
  • actions/setup-python v5
  • codecov/codecov-action v4
pip_requirements
requirements.txt
  • Faker ==24.2.0
  • schulze ==0.1
  • steamspypi ==1.1.1
  • steampi ==0.5.2

  • Check this box to trigger a request for Renovate to run again on this repository

Initial Update

The bot created this issue to inform you that pyup.io has been set up on this repo.
Once you have closed it, the bot will open pull requests for updates as soon as they are available.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.