User Guide
Guide to stats, colors, calculations, and conventions
This is a user guide for this site, which provides analysis of the basketball simulation game Swoops ↗. Questions about Swoops or want to understand the game, join the Swoops Discord ↗, questions about this site, contact me at tdavidson in the Discord or on Twitter ↗.
Site organization
The data is organized across:
- All Teams, min 1 player owned, with links to each team page
- Team pages, with a list of the current roster, with stats and player skill ratings (PSR) ↗ listed for each player
- All Players, with a sortable listing using a user-input min games played (default 50 games played) of all players for SN2 (current season), SN1, SN0, current PSRs, and last PSR evolution, with links to each player card
- Player cards, with stats from current and previous seasons played, and current PSRs, and SN2 performance in 1, 3, and 5 lobbies
Search
Looking for a player or team? Try Search (available in the header at the top of the site) to find them on team pages.
Data Presentation
The data uses daily-updated data from Swoops on current rosters, team performance, and player performance, to do a number of additional calculations:
- Calculation of advanced player evaluation stats like Effective Field Goal Percentage (eFG), Game Score (GS), and more, explained below
- Calculation of league average for each stat, for each season, calculating league average for all players that played at least 50 games
- Color shading to denote whether the stat for each player is better or worse than league average
- On the all players PSR page, estimation of unrevealed top attributes, denoted in italics
Player Filters
On many listings of players, filters are offered to only include certain types of players:
- Min Games, meaning to only show players that have played at least a minimum number of games. By default this is 25 games on most player listings, but this is a user input and can be changed.
- Player name, meaning you can type in multiple player names and only see those players. The input box for this filter works using SWOOPSTER-number, or just number, or the renamed name of the player. Use a comma to separate players, and do not use a leading space in front of a player name, to see multiple players displayed.
- Listed, meaning to only show players that are listed for sale on Opensea.
- On-chain players, meaning to only show on-chain players. The intent is exclude players that were originally given as free players to new teams, with the note that the filter does not exclude these players once they move on-chain, which happens after the team passes the Swooper point challenge.
- Multi-team players, meaning to only show players that are on teams that have more than one player. The intent is to exclude players that play in 3 and 5 lobbies, but only use free agents, to include in the player comparisons only player that play with real teams. It is not perfect, though, as it reflects listed players on the team, not players that play in the games, but it a start in adding the strength of the team and the strength of competition context to the stats.
- SN2 Unplayed, meaning to only show players that have not played in SN2.
- SN2 All-Stars, meaning to only show players named to the SN2 All-Star team
- SN2 All-Rookies, meaning to only show players named to the SN2 All-Rookie team
If multiple filters are present on-page, they work in combination, meaning you can filter by minimum games and listed, for example.
Additionally, on the league-wide player pages, there is an additional filter for teams. This allows you to input a team's locker room number or team name, and see all of their players. You can input multiple teams using a comma to separate the team name and/or locker room number.
Player Stats
Player stats are used across Team pages, Player pages, and Player card pages.
Many stats used here have been used since the start of basketball, some have gained popularity in the stats revolution in the 2000s, and some are stats that I am testing.
Here's an overview of player stats:
- League Average: league average. For all "per game" stats, it is defined as the average stat for a plyer that has played at least 50 games, and calculated by summing up the averages for all players that played at least 50 games, then dividing by total number of players min 50 games. For the shooting percentage metrics - FG%, 2P%, 3P%, FT% - it is calculated by summing up all atttempts and makes, and dividing makes by attempts, for each type of shot. The latter method accounts for the volume of players that play more games, and is a better measure of the league average.
- Name: Player name or token number, including links to their Swoops and Opensea profiles.
- ETH: The price in Ether if the player is listed for sale on Opensea, at the time of the last data refresh, noted on the page. Data refreshes are daily so there will be a lag to players showing up here.
- P: Position
- Y: Year. Current age of the player for current data, for historical data year is the age they were in that season.
- Star: Swoops star rating ↗.
- GP: Games played. Swoops does not have a limit on games played and owners can choose how many games they want to play.
- URn: Usage rating ↗, the number of possessions a players uses in a game. "Uses" means the possession ends, with a field goal attempt, free throw attempt, assist, or turnover. This is popularly used by adjusting for minutes played, but in Swoops all players play the full game. At the moment this is "URn", meaning not adjusted for team pace compared to the league pace, so it's not completely comparable to usage rating in the NBA.
- GS: Game Score ↗, a comparable metric to PER that attempts to value a player's total performance, including points, rebounds, steals, blocks, turnovers, fouls, and attempted shots. Game score as currently calculated uses the averages per game for the component stats, instead of calculating the game score for each game an averaging the game scores, thus is not a true average of the game scores per game, but it's a first stab.
- eFG: Effective Field Goal percentage ↗, an measure of how efficiently a player scores. This is an adjustment from field goal %, by accounting for the extra value of a three point basket compared to a two point basket.
- TS: True Shooting Percentage ↗, another scoring efficiency metric, but one that includes free throws.
- PPG: points per game
- ORPG: offensive rebounds per game
- DRPG: defensive rebounds per game
- RBG: rebounds per game
- APG: assists per game
- STPG: stocks per game, calculated as steals per game + 0.7 * blocks per game, to match the game score formula
- BPG: blocks per game
- SPG: steals per game
- ATT: assist to turnover ratio ↗, a measure of ball control, calculated as assists per game / turnovers per game
- TO%: turnover percentage ↗, the number of possessions that end in a turnover, calculated as turnovers per game / (field goal attempts per game + (0.44 x free throw attempts pergame) + turnovers per game). This provides an alternative view to turnovers per game by adjusting for how often a player uses the ball.
- TFPG: turnovers + 0.4 * fouls per game, to match the game score formula
- TPG: turnovers per game
- FPG: fouls per game
- PPP: points per possession ↗, a scoring efficiency metric, calculated as points per game / (field goal attempts per game + (0.44 x free throw attempts pergame) + turnovers per game)
- FG%: overall field goal percentage, percentage of field goal attempts that are made, including two point and three point shots
- 2P%: percentage of two point shot attempts taken that are made
- 3P%: percentage of three point shot attempts taken that are made
- FT%: percentage of free throw attempts that are made
- FGA: field goals attempted per game (two point and three point)
- 2PA: two point field goals attempted per game
- 3PA: two point field goals attempted per game
- FTA: free throws attempted per game
Advanced Player Stats
The Advanced tab adds a few custom developed stats currently in beta:
- GS/ETH: Game Score divided by ETH, a metric that attempts to provide a measure of value of player performance, given the price for the player.
- PSRT: Not reported on the page, but used in the PSR calculations. Sum of known and estimated Player Skill Ratings (PSRs) for the gameplay attributes (3PT, 2PT-INT, 2PT-MID, FT, DREB, OREB, PASS, IDEF, PDEF). Estimated PSRs for the top attributes are inaccurate and conservative by structure, so the higher the percentage ofthe PSRs that are unknown, the higher the potential upside variance from this total. Also not that not all players have estimated PSRs, and their known PSRs may be a top metric and it may be unable to estimate the other top metrics.
- PSR/YEAR: PSRT divided by ( the player's age + 3 ). Since players reveal 1 additional PSR per year, this metric attempts to understand the total PSRT for the age of the player (older players will have higher PSRTs simply because more of their PSRs are revealed), to gauge underlying player ability.
- PSR/ETH: PSRT divided by ETH, a metric that attempts to provide a measure of value of underlying player ability, given the price for the player.
As always, this is not financial advice, and is provided for entertainment purposes only. Do your own research.
League Average
The league averages for SN0, SN1, and SN2 are calculated by averaging each stat for every player that has played at least 25 games in the season, except for FG%, 2P%, 3P%, and FT%, which are calculated by adding up all shots taken and made by all players, and then dividing to calculate the made percentages.
The difference in methodology for the percentages is more of a true league average, while the per game averages are more of a per player average.
League averages for the 1, 3, and 5 lobbies for SN2 reflect Swoopsters that have played at least 25 games in each lobby, and does not include stats from free agents that play in those games.
The same methodology is used to show SN2 averages by star rating, player year, and position, with the caveat that the positions do not represent where the player played in the games, only their listed position.
Each section of averages also has a ">0" and ">25" column, which indicates how many players of that type played > 0 games, and played > 25 games, respectively. Only players that played >25 games are included in the averages, except for the percentages included above.
Player Stats Color Shading
Green shading means that the stat is better than the league average player, that played the noted minimum amount of games, red shading means that the stat is worse than the league average player, no shade means they are equivalent. The darker the color, the better or worse they are from league average for that stat.
Up until October 9 2023, the color shadings represented a comparison between the player and the league average for all players for a given season. From October 10 2023 onwards, the color shadings represent a comparison between the player and the league average for a given season for that player's position. The change was made to provide better contextualization of a player's performance given the expectations for the positions they play.
The player stats currently use two different scales for the color shades:
- Percentage-based stats - URn, eFG, TS, FG%, 2P%, 3P%, FT% - use a scale where every color shade represents a 5% difference from the league average, except for the lightest shade, which represents a 2.5% difference from league average (an attempt to separate between slight and more meaningful differences from league average.)
- Absolute-number stats - everything else - use a scale where every color shade represents a 25% difference from the league average, except for the lightest shade, which represents a 12.5% difference from league average (an attempt to separate between slight and more meaningful differences from league average.) . Note, TPG and FPG use the same scale, but with the colors flipped as lower numbers than league average are better.
The different scales are used just to capture the different relative changes in those metrics. In the future the bands, shades, and method may change to create a more standardized approach.
Player Stats by Lobby
Swoops offers three different ways to enter games. Owners can enter 1 Swoopster, 3 Swoopster, or 5 Swoopster "lobbies" to play games against owners that are entering games with 1, 3, or 5 Swoopsters, respectively, and in the case oft the 1 or 3 lobby options, filling the rest of their roster for the game from the Free Agents Swoops offers to all players.
Swoopsters often perform better against free agents (who are all 1 star rated players) than other Swoopsters, so stats for a player can vary depending on their level of competition. Two players with similar stats but with a different competition mix (e.g. a player that only plays 5 man lobbies v. a player that only plays 1 man lobbies) do not have similar underlying performance abilities.
On player cards, stats by lobby are reported for the current season, if a player has played any games in those lobbies.
Similar Players
Similar players is a feature that is intended to help find players with similar stats, for fun and for scouting. The feature uses a custom weighted Euclidean distance algorithm I wrote that uses weights on positions and stats to find similar players, and if no stats are available for a player, uses player skill ratings instead. The feature finds up to the five most similar players and lists their names and links to their player pages. A couple notes on the methodology:
- It uses current season stats (all lobbies) first, then if the player has not played in the current season, it uses the last season they played. If the player has never played, then it uses player skill attributes to find a similar player.
- There is a system of weights applied to different stats to value certain stats more or less.
- There is a weighting on positions, with penalties applied the farther away positions are (meaning, G and G/F is close, G and C is far away).
- Star ratings have a very slight weight, meaning star ratings are used in the algorithm but much less than the stats. Any similar star ratings between matched players is primarily a reflection of the stats, not the star rating.
- There is no weight on age, meaning ages are not used in the algorithm. Any similar ages between matched players is a reflection of the stats, not the age.
- Be careful using this as a forecast, as it is a reflection of current stats and not where a player is trending.
I tested a variety of statistical methods and weights to create an algorithm that I felt did a good job of matching players, but I will adjust the weights based on feedback of how good the matches are, so please let me know what you think.
Player Skill Ratings
Player Skill Ratings (PSR) are explained at Swoops 101: Player Overview ↗.
The "0", "0.0", or a blank cell means that the player skill rating is unrevealed. Unrevealed top attributes are estimated if possible, as explained below.
Color Shading
- The background color of attributes signifies it is a player's top PSR.
- The darkest color shade signifies that attribute is that player's higest PSR, the next darkest shade means it is that player's second-highest PSR, and the lightest shade means it is the third-higest PSR.
- No shade means it that player's PSR is not one of the top three PSR; not all PSRs are revealed, but the noting of top attributes does help in figuring them out.
- Newly revealed player skill ratings are in bold format, estimated PSRs are in italic.
Estimated PSRs
Top attributes are noted using the shading above, for some players the values of the PSRs for the top attributes are known, for some they are not. If possible, unrevealed top attribute PSRs are estimated and shown in italic.
Here's how it works: a player may have a revealed PDEF of 65, but PDEF is not one of its top three attributes, meaning you can assume every top attribute has a value > 65. Or the second top attribute may be revealed as 72, meaning you can assume the top attribute is > 72. When possible, unrevealed top attributes are estimated using known attributes, using the assumption that the estimated top attribute is just slightly above the max of known attributes. This is the most conservative estimation method, and in reality the unrevealed values could be higher than the estimates. Remember that the order of top attributes are not absolute and can change season to season after player evoluation.
I am still refining the logic, so there may be some mistakes. Working on error checking for all cases at the moment.
League Average
The league average PSR is calculated as a weighted average of all known and estimated PSRs for players that play in games, across all lobbies. This is intended to help provide some understanding of the level of competition and ratings of players playing the games. A few notes:
- Many PSRs are unknown, and estimated PSRs represent the most conservative estimate, so the actual skill ratings in games will vary from this, so consider this a best estimate rather than an exact number.
- This is done at a league and not a game level, meaning that the PSRs in an individual game may vary from this based on lineup construction and team.
- PSRs of free agents are not included in this, so level of competition will vary in games with free agents involved.
- I did not break this down by lobby, so all averages reflect Swoopsters across all lobbies.
The same methodology is used to show SN2 averages by star rating, player year, and position, with the caveat that the positions do not represent where the player played in the games, only their listed position.
The color shading on this page reflects the variation for each age, star rating, and position from the overall league average, using the same scale detailed earlier.
are calculated by averaging each stat for every player that has played at least 25 games in the season, except for FG%, 2P%, 3P%, and FT%, which are calculated by adding up all shots taken and made by all players, and then dividing to calculate the made percentages.
The difference in methodology for the percentages is more of a true league average, while the per game averages are more of a per player average.
League averages for the 1, 3, and 5 lobbies for SN2 reflect Swoopsters that have played at least 25 games in each lobby, and does not include stats from free agents that play in those games.
The same methodology is used to show SN2 averages by star rating, player year, and position, with the caveat that the positions do not represent where the player played in the games, only their listed position.
Each section of averages also has a ">0" and ">25" column, which indicates how many players of that type played > 0 games, and played > 25 games, respectively. Only players that played >25 games are included in the averages, except for the percentages included above.
Evolution
The calculations represent the raw change in revealed player skill ratings from SN1 to SN2, in absolute terms.
Note, players will also have unrevealed changes in ratings for any player skill ratings that are unrevealed. These will be shown as 0, but there are more changes in ratings happening than we can see.
Color Shading and Formatting
- The background color represents the degree of change from SN1 to SN2, given their previously revealed attribute.
- Green is a positive change, red is a negative change, and the darker the shade, the greater percentage change in player skill ratings.
- Newly revealed player skill ratings are in bold format.
- The color shading here uses a scale where every color shade represents a 2.5% change in the PSR from the previous year, except for the lightest shade, which represents a 1.25% difference from league average (an attempt to separate between slight and more meaningful differences from league average.)
Swoops player cards will show the underlying progression in newly revealed player skill ratings, I am not aware of this being available in the API thus you will see a discrepancy there.
Career Highs
Career highs are calculated for a subset of players; at the moment, only award-winning players (all-stars, MVPs, DPOY, etc.) or certain select players have career highs tracked. I hope to expand this to more players in the future. Career highs include all lobbies (1, 3, and 5 player lobbies).
Stats tracked for career highs:
- PTS: points
- ORB: offensive rebounds
- DRB: defensive rebounds
- REB: rebounds (total of offensive and defensive)
- AST: assists
- BLK: blocks
- STL: steals
- TOV: turnovers
- FLS: fouls
- FG / FGM: field goals made / field goals attempted. Note, these may not be in the same game, so do not necessarily represent the best shooting performance.
- 2P / 2PM: two point field goals made / two point field goals attempted. Note, these may not be in the same game, so do not necessarily represent the best shooting performance.
- 3P / 3PM: three pointers goals made / three pointers attempted. Note, these may not be in the same game, so do not necessarily represent the best shooting performance.
- FT / FTM: free throws made / free throws attempted. Note, these may not be in the same game, so do not necessarily represent the best shooting performance.
Team Stats
This provides an overview on team performance.
For team lineup comparisons, check out Swoopheads ↗ which uses game level data to answer deeper questions about lineup composition.
Here's an overview on team stats:
- Name: name of the team linked to the Swoops locker room for the team
- SP: Swooper Points, as explained at Swooper Points Overview ↗
- Win%: the % of total games played that are won
- Games: number of games played, all lobbies
- Wins: number of wins, all lobbies
- Losses: number of losses, all lobbies
- PPG: points scored by the team per game, for all player combinations
- OPPG: points scored by the team's opponent per game, for all player combinations
- DIFF: PPG minus OPPG, for the average win or loss (negative number) point differential
- Win% 7D: winning percentage (wins / games played) over the last week (7 days), all lobbies
- Games 7D: number of games played over the last week (7 days), all lobbies
- Wins 7D: number of wins over the last week (7 days), all lobbies
- Losses 7D: number of losses over the last week (7 days), all lobbies
- Win% 100G: winning percentage (wins / games played) over the last 100 games, if available, all lobbies. If a team has not played 100 games within the time period tracked by the data (currently to the start of the recaps, September 26, 2023), then it will use the number of games available in the data.
- Wins 100G: number of wins over the last 100 games, if available, all lobbies
- Losses 100G: number of losses over the last 100 games, if available, all lobbies
- W10: How many wins in the team's last 10 games
- L10: How many losses in the the team's last 10 games
- Players: Number of players on the team, based on the time the data was last pulled
Color Shading
Green shading means that the stat is better than the league average team (calculated from all teams that played a minimum of 50 games), red shading means that the stat is worse than the league average player, no shade means they are equivalent.
The team stats currently use one scale for the color shades:
- Every color shade represents a 25% difference from the league average, except for the lightest shade, which represents a 12.5% difference from league average (an attempt to separate between slight and more meaningful differences from league average.). OPPG uses the same scale, but with the colors flipped as lower numbers than league average are better. DIFF uses the same scale, but with a slight change to the method to account for the negative values.
In the future the bands, shades, and method may change to show the relative change between absolute and percentage metrics differently.
Transactions
The Transactions page provides summary information on sales of Swoopsters on Opensea, reporting out the total number of sales, total ETH, average sale in ETH, median sale in ETH, and minimum and maximum transaction in ETH. These are reported overall and by season, with a season consisting of the dates between the new mints.
An important caveat to this is that the numbers here do not include trades, both trades done over Opensea or trades executed in off-chain agreements, and does not include any ETH or the value of players in those trades, and thus the numbers here do not reflect some of the largest transactions to date. So it is important to know, prior to making any judgements about trends in sales or ETH, that there is significant missing ETH in those transactions that would have an impact on the total and average transaction size. I will be working on addressing that missing data in the future if possible.
Recaps
Recaps is a feature to help see what's happening across Swoops. Every day, a snapshot of yesterday's Swoops games is published, with a daily win leaderboard and a snapshot of games with player highlights.
- The leaderboard covers all games, all lobbies, sharing the top five only for now.
- The games are broken out by lobby (5, 3, 1), and represent a mostly random snapshot of games. the games are (a) the highest scoring games, (b) the highest margin of victory, (c) the closest games, and (d) a random sample of other games. Each game highlights the top three stars from each team, determined by their points, rebounds, assists, and other stats, and features those top players.
- The color shading on the team box scores represent the difference between those two teams, using the same percentage scales identifed earlier.
Time of data pulls
Day and time of last data pull is noted on all pages using data.
What's next?
- Defensive stats. Thinking about the best way to derive that. Opposing points per game? Points scored by same position on opposing team? Some simple metric of steals, blocks and fouls? Especially given the recent simulation update for positions impact defensive performance, this will become more interesting and important.
- Player progression analysis, comparing individual player changes to league changes, to understand relative change, and not just absolute change. Working on it.
- Team-level stats for player-level stats (e.g. GS, eFG, RPG, APG, FGA, FT%).
- A metric that attempts to compare current performance to a players age and star rating. Older players and players with higher star ratings could be expected to perform better, this compares performance using Game Score to their age and star rating. At the moment I'm testing a stat as Game Score / ( Age + Year ), but may be adjusted in the future to account for aging from peak differently. Will be reported once refined.
- VAp82: Value added ↗, an estimate of how much a player adds to a team's performance. For Swoops I adjust this to per 82 games, since Swoops teams can play different amount of games, and it's useful to compare them to an NBA 82 game season.
- Pace: Pace factor ↗, a measure of the number of possessions by a team in a basketball game, used only for team metrics.
- PER: Player efficiency rating ↗, just a pipedream at the moment.