A Python data visualization project that explores how board game popularity and rankings change over time using historical BoardGameGeek ranking data.
The project includes two visualizations:
- an animated bar chart race based on the number of users who rated each game
- a rank-based animation showing how top-ranked board games move over time
This project processes historical BoardGameGeek ranking snapshots and converts them into monthly time-series visualizations.
The pipeline uses stable BoardGameGeek game IDs to track games over time, then converts the data into formats suitable for animation.
This project focuses on:
- data cleaning
- time-series preparation
- pandas reshaping
- handling missing values
- animated data visualization
- Monthly sampling from historical CSV snapshots
- Stable game tracking using BoardGameGeek game IDs
- Dynamic top-N game selection across the full timeline
- Animated race based on
Users rated - Rank timeline JSON export
- Rank-based animation using actual rank positions
- MP4 export with FFmpeg
This project uses historical BoardGameGeek ranking snapshots from the bgg-ranking-historicals dataset.
Dataset repository: bgg-ranking-historicals
The raw dataset is not included in this repository because it is large. It should be downloaded separately and placed inside:
data/raw/
Expected local structure:
data/
└── raw/
└── bgg-ranking-historicals-master/
├── 2016-10-12T00-30-40.csv
├── 2016-10-14T00-31-11.csv
└── ...
board-game-popularity-race-project/
├── data/
│ └── raw/ # Raw dataset files ignored by Git
├── outputs/
│ ├── data/ # Processed JSON files
│ └── videos/ # Generated videos ignored by Git
├── src/
│ ├── create_users_rated_race.py # Creates the users-rated bar chart race
│ ├── create_rank_timeline_json.py # Exports cleaned rank timeline JSON
│ └── create_rank_animation.py # Creates rank-based animation from JSON
├── requirements.txt
├── .gitignore
└── README.md
Clone the repository:
git clone https://github.com/Fatemeh-ameri/board-game-popularity-race-project.git
cd board-game-popularity-race-projectCreate and activate a virtual environment:
python3 -m venv venv
source venv/bin/activatepython -m venv venv
venv\Scripts\activateInstall dependencies:
pip install -r requirements.txtThis project uses FFmpeg to export MP4 animations.
brew install ffmpegVerify the installation:
ffmpeg -versionRun scripts from the src directory.
cd src
python create_users_rated_race.pyThis creates an MP4 animation based on the number of users who rated each game.
python create_rank_timeline_json.pyThis creates:
outputs/data/boardgame_rank_timeline_top10.json
python create_rank_animation.pyThis creates an MP4 animation based on actual BoardGameGeek rank positions.
Generated videos are saved inside:
outputs/videos/
The users-rated animation shows how many BoardGameGeek users rated each game over time. It reflects popularity by number of ratings, not necessarily game quality or rank.
The rank-based animation uses BoardGameGeek ranks. Lower rank numbers are better, and Rank 1 appears at the top.
A game appears in the rank animation when it enters the selected Top N timeline. Missing games are not assigned fake ranks in the exported JSON.