Coding
Spencer’s Data Projects
LA City Assessor Data Project
Inspired by a question about which areas of LA are the “oldest”, Spencer used Python webscraping to gather information on every building from the City of Los Angeles. By systematically gathering data from the ZIMAS tool, he was able to create a map of Los Angeles in which each building is colored according to age. He also created an equivalent map of Butte County, California, but this data was gathered by simply contacting the county directly due to the lack of a scrapable web tool. Animated versions of both maps are available.
Board Game Tournament & Gameplay Data Project
Spencer’s involvement with the Social Deduction board game community on Discord has led him to produce multiple series of videos. These videos showcase data science techniques implemented with Python code, designed to gain various insights to the games that are played. These data science undertakings have included:
- A simulator which calculates the odds of any given team winning in a specific game tournament
- Detailed analyses of “drafts” of players which occured in game tournaments
- A data-based study of whether or not a specific common gameplay tactic is good to do or not
Playlist of videos focusing on gameplay analysis:
Playlist of videos focusing on game tournament analysis:
Spencer’s Game/AI Projects
UsurperBot
Out of a desire to play the card game Usurper: A Game Of Dark Factions without someone else to play it with, Spencer recreated the game using only Python’s Pygame library and coded an AI capable of playing at an extremely high skill level - perhaps superhuman. The AI works in two segments - one segment which conducts the initial card draft using weights calculated after thousands of practice games, and one segment which plays the cards in an order calculated to be as efficient as possible. All features of the game were implemented, as well as multiple AI difficulties.
Spencer’s Discord Bots
Spencer has created and maintained a number of bespoke Discord Bots which are custom-built for sophisticated use cases in specific online communities.
Tourney Bot
The Tourney Bot, written in JavaScript, is used by multiple communities within the broader Social Deduction board game community. Since April of 2021, it has been maintained by Spencer. It provides tournament participants, admins, and spectators with many useful features such as looking up detailed statistics on any player, displaying tournament standings, placing “side-bets”, and sending “ping” reminders about upcoming game times.
Uprising Bot
The Uprising Bot, written in Javascript, was created in 2021 for use in a long-form tournament called Deduction Team Comps run within the Social Deduction board game community. Spencer worked as a primary contributor on the project. The bot was used to facilitate playthroughs of the game Coup: Uprising, a highly complex expansion of the popular card game Coup. The bot keeps track of gamestates and allows players to use Discord commands to inpute game actions, allowing the game to be played entirely within a Discord channel.
EpoxyBot
The EpoxyBot, written in Python, was created in 2023 for use in a local Dodgeball community. Spencer created the bot as a simple but effective way to keep track of whether people in a given server are participating in weekly activities.