This report presents the results of a custom-built basketball data tracking application developed entirely in R. The application is designed to tag live games with minimal effort, allowing users to log in-game actions play-by-play and generate clean, customizable datasets for analysis.
The system, at this moment, records:
- Shots, including their court location (x, y
coordinates) and whether they were contested by the
defense
- Turnovers, with a distinction between
live-ball and dead-ball
turnovers
- Free throw situations, with some related
information
- On-court players and substitutions, tracked through
an efficient system that minimizes recording time
Designed for efficiency, the app allows for real-time data entry during games without disrupting the flow of observation.
Depending on analytical needs, it also supports expanded tagging of shot details such as assisted/unassisted, offensive context, play types, and more. It can also be customized to tag additional game information, such as individual rebounds. Overall, it is currently a very simple environment that offers great flexibility to be deeply adapted to the on-court needs of coaches and professionals.
This flexible and lightweight tool enables teams, analysts, and coaches to capture meaningful data quickly—empowering deeper insights into performance, tendencies, and game flow.
The following section will present analyses related to a single game. Each graph and table will be accompanied by an explanation and will include 💡 discussion points that highlight potential interpretations or strategic takeaways. In addition to the tables and charts shown below, the collected data can be analyzed to extract much more.
All the following graphs and tables are generated in real time within the application, allowing them to be consulted at any moment during the game.
A simple table, designed for strong visual impact, that summarizes the main statistical categories of the game.
Game Summary: This section provides an overview of the main statistical categories.
Offensive Rebound Points: Notably, the points scored from offensive rebounds are listed alongside the number of offensive rebounds (in parentheses) to offer complete information. We can see that Monaco generated 15 points compared to Paris’ 12, despite a big difference in the number of offensive rebounds (17 vs 10). It means that Paris had greater efficiency in 2nd chance situations.
Points from Turnovers: The final row indicates how many points each team scored off opponent turnovers. Here, we consider only points resulting from live-ball turnovers, which pose an immediate threat since the ball remains in play. It is important to note the difference between Turnover % (which accounts for both live and dead-ball turnovers) and live-ball turnovers specifically. Despite the large gap in total turnovers—Monaco posted a TOV% of 9.9%, while Paris reached 18.8% (see advanced box score), a closer look at live-ball turnovers reveals that the two teams were quite similar (6 for Paris, 7 for Monaco). Both teams converted these live-ball turnovers into points with comparable efficiency. This underscores the critical value of distinguishing between live-ball and dead-ball turnovers when analyzing a team performance.
Team advanced box score — a table that aims to capture all the key advanced statistics of the game. It includes a comparison between each team’s numbers and the league averages.
PTS: Points | XPTS: Expected points (based on shot quality) | POSS: Possessions played | OFFRTG: Points per 100 possessions | TS%: True shooting % | FLOOR%: % of possessions ending in ≥1 point | DREB%: Defensive rebound % | KILLS: number of defensive kills | TOV%: % of shooting chances ended with a turnover || Zone stats – for Restricted Area (shots at the rim), Threes, Non Morey Area (2-pt no-rim), and Free Throws: FGM/FGA: Made / Attempted shots; PPS: Points per shot (FG% × shot value); Freq: % of shooting chances used for that shot
Restricted Area vs Non-Morey-Area: it is crucial to distinguish between two-point shots at the rim and those taken outside the restricted area (Non-Morey Area). League-wide data, but also game-level data, shows significantly higher PPS (points per shot) at the rim. In this game, Monaco’s efficiency at the rim aligns with league averages, while Paris shows an extreme efficient performance at the rim scoring 16/20.
TOV% + Shot Type Frequencies = 100%. This breakdown shows how each team distributed its shooting opportunities. Compared to league averages, Monaco showed a very high frequency of shots at the rim, converting them with league-average efficiency. They took relatively few three-point shots and did so with poor efficiency compared to the league. Paris, on the other hand, attempted a high volume of three-pointers, with slightly above-average efficiency. It’s crucial to express everything as a percentage of total shooting opportunities, as the volume of those opportunities can vary from game to game.
Expected Points (XPTS) reflect the quality of a team’s shot creation. The two teams showed opposite trends. Monaco significantly underperformed, mainly due to poor three-point and free-throw shooting. Paris, on the other hand, overperformed thanks to an outstanding shooting performance (63% TS%), despite committing a high number of turnovers.
The rebounding battle favored Monaco, who defended their own glass at a league-average level (DREB% 68.8%) but put significant pressure on the offensive boards, as shown by Paris’ low defensive rebounding percentage (61.4%).
Player advanced box score — a table that aims to capture all the key advanced statistics of the game from a player point of view.
TIME: % of possessions played | NRTG: Player Net Rating - Team Net Rating (player impact) | PTS: Points | XPTS: Expected points (based on shot quality) | SC: Scoring Chances used by the player | LOAD: % of teams Scoring Chances used by the player, when the player is on court | PPSC: points-per-scoring-chance | TS%: True shooting % | TOV%: % of the players’ shooting chances ended with a turnover || Zone stats – for Restricted Area (shots at the rim), Threes, Non Morey Area (2-pt no-rim), and Free Throws: FGM/FGA: Made / Attempted shots; PPS: Points per shot (FG% × shot value); Freq: % of shooting chances used for that shot
NRTG: This metric represents a player’s relative impact on the game. It is calculated as the difference between the team’s Net Rating when the player is on the court and the team’s overall Net Rating. While it can offer some insight in a single-game context, it remains highly volatile and should be interpreted alongside many other metrics.
Expected Points vs PTS: Comparing these two metrics helps identify players who are overperforming or underperforming relative to shot quality. Both Shorts and Ward, as well as Malcolm, showed strong overperformance. Shorts, in particular, delivered an impressive performance in the Non-Morey Area, scoring 5 out of 7 attempts. Meanwhile, Ward and Malcolm both stood out with excellent three-point shooting games.
SC, LOAD & PPSC: We measure the number of shooting opportunities finalized by a player (SC) and evaluate efficiency through the PPSC (points per shooting chance). The LOAD represents the percentage of a team’s total shooting opportunities a player uses, when the player is on court. It’s important to analyze player performance by comparing offensive load and efficiency. For Monaco, Okobo, Jaiteh, and James all have a LOAD above 30%, with the first two also maintaining an efficiency of at least 1 PPSC. On the Paris side, Shorts stands out with an extremely high LOAD (40%) combined with a PPSC of 1.27, which further highlights the quality of his performance. We also see outstanding efficiency from Ward and Malcolm, with PPSC values of 1.36 and 1.44 respectively. These two players are advantage finishers, so it’s not surprising that their offensive load is relatively low (22.0% and 25.7%).
Advanced analysis of shooting chances, where each attempt is categorized by court area and whether it was contested by the defense. This table maximizes the value of the detailed information recorded for each shot.
UC: Uncontested | C: Uncontested | RIM: Restricted Area | PAINT: Painted Area | NP2: Midrange Area | 3C: Corner Threes | 3L: Above-The-Break Threes | FT: Free Throws | TOV: Turnovers | FGM/FGA: Made / Attempted shots | FG%: Shooting percentage | PPS: Points per shot (FG% × shot value); Freq: % of shooting chances used for that shot
The first part in the left provides a clear overview of how teams performed in high-quality shot types, such as uncontested shots at the rim and uncontested three-pointers. Monaco took these shots on 17.7% of their shooting opportunities, while Paris did so on 16.5% (league average: 17.4%). In terms of efficiency, the difference in uncontested three-point shooting stands out: Monaco made just 1 of 7, while Paris converted 6 of 9. Hitting uncontested threes is crucial at all basketball levels.
Another valuable category, in terms of shot quality, includes contested shots at the rim or from three. Monaco used these for 39.6% of their shooting chances, while Paris reached 41.1% (league average: 37.4%). Here we see both teams struggled with contested three-point shots: Monaco went 3 for 16, and Paris 5 for 20.
The last two shot categories include uncontested and contested two-pointers outside the restricted area. Uncontested midrange shots can still be somewhat efficient at the league level (1.02 PPS for UC PAINT, 1.04 PPS for UC NP2), but they are extremely rare, representing only 3.8% of total shooting chances. On the other hand, contested shots from these areas are far more frequent (17.5% of opportunities), yet show very low efficiency on average. However, when viewed game by game, efficiency in this category can vary significantly.
Finally, the table also includes free throws and turnovers, providing a complete picture of the shooting chance behaviour of the teams.
In this section shot coordinates are employed to generate shooting maps of teams (or players)
The first graph we analyze is a simple chart that shows all the shots taken by a team (or by a player).
The second chart shows us, for each area of the court, some shooting statistics (FGM/FGA, FG%, and PPS). Additionally, each area is colored according to the shooting percentage within it.