- Why This Matters
- Overview
- Quick Start
- Features
- Demo & Visualizations
- How It Works
- Technologies Used
- Project Structure
- Installation
- Usage
- Example Output
- Results: Boston Celtics Report
- Future Improvements
- Troubleshooting
- Author
- License
NBA front offices, scouts, and the meadia rely on shot charts and shooting heat maps to evaluate player tendencies, spot strengths and weaknesses, and communicate performance in a way raw stat lines can't. The Bradley Analytics Software Engine automates that process end to end, turning a player name and season into a publication ready visualization in seconds instead of hours of manual data pulling and plotting.
This project demonstrates a complete analytics pipeline: pulling live data from an external API, cleaning and structuring it, and rendering it into a polished visual product. It's the same core workflow used in real sports analytics and business intelligence roles.
The Bradley Analytics Software Engine is an NBA basketball analytics application that transforms raw player shooting data into professional quality basketball visualizations.
Built using Python, R, and NBA API data, this software engine allows users to select an NBA player, season, and visualization type to automatically generate customized transparent shot charts and shooting heat maps.
The goal of this project is to combine data engineering, statistical visualization, and basketball storytelling into a simple analytics tool that converts complex NBA datasets into clear and meaningful insights.
This project is part of my basketball analytics portfolio, where I explore how data can be used to better understand player performance, team strategy, and decision making in professional sports.
Portfolio:
Bradley Analytics Instagram
For anyone who wants to get up and running immediately:
git clone https://github.com/alexbrxdley/Bradley-Analytics-Software-Engine.git
cd "Bradley Analytics Software Engine"
pip install -r requirements.txtThen open R and install the visualization packages:
install.packages("tidyverse")
install.packages("ggplot2")Run the engine:
Windows:
.\bradley.batMac:
python3 python/bradley_analytics.pySee Installation and Usage below for full setup details and an example walkthrough.
- Retrieves player shooting data directly from the NBA API
- Searches NBA players and available seasons automatically
- Processes player shot locations for analysis
Creates customized shot charts displaying:
- Made and missed shots
- NBA court dimensions
- Player shooting locations
- Team specific color customization
Creates density based heat maps that visualize:
- High volume shooting areas
- Shot distribution tendencies
- Offensive strengths and weaknesses
- Team specific color customization
The engine manages the complete workflow:
- User input
- NBA data retrieval
- Data processing
- Visualization generation
- Output creation
Generated visualizations are automatically saved into:
visualizations/
Additional basketball analytics reports and presentations can be found in:
reports/
User Input
|
v
+-------------------------------+
| Bradley Analytics Engine |
| Python Application |
+-------------------------------+
|
v
NBA API Data Retrieval
|
v
+-------------------------------+
| Data Processing |
| pandas + CSV Storage |
+-------------------------------+
|
v
Player Shot Data
|
v
+-------------------------------+
| R Visualization Engine |
| ggplot2 + Custom NBA Court |
+-------------------------------+
|
v
+-------------------------------+
| Generated Visualizations |
| Shot Charts + Heat Maps |
+-------------------------------+
1. User selects NBA player and season
|
v
2. Python retrieves NBA shooting data
|
v
3. Data is cleaned and organized
|
v
4. R creates basketball visualizations
|
v
5. Final PNG files are saved
- Python
- R
- NBA API
- pandas
- ggplot2
- tidyverse
- Visual Studio Code
- Git/GitHub
- Data collection
- Data cleaning
- Statistical visualization
- Sports analytics storytelling
- Basketball performance analysis
Bradley Analytics Software Engine/
│
├── data/
│ └── Generated NBA datasets
│
├── visualizations/
│ └── Generated shot charts and heat maps
│
├── python/
│ ├── bradley_analytics.py
│ └── nba_data.py
│
├── r/
│ ├── shot_chart.r
│ ├── heat_map.r
│ └── functions/
│ ├── court.r
│ └── save_plot.r
|
├── reports/
│ └── Bradley Analytics reports
│
├── assets/
│ └── README images and banner
|
├── README.md
├── LICENSE
├── requirements.txt
└── bradley.bat
git clone https://github.com/alexbrxdley/Bradley-Analytics-Software-Engine.gitNavigate into the project folder:
cd "Bradley Analytics Software Engine"pip install -r requirements.txtThe visualization engine uses R for generating shot charts and heat maps. Make sure R is installed locally before running the software.
Open R and install the required packages:
install.packages("tidyverse")
install.packages("ggplot2")Launch the Bradley Analytics Software Engine:
Windows:
.\bradley.batMac:
python3 python/bradley_analytics.pyThe engine will guide you through:
- Entering an NBA player
- Selecting a season
- Choosing a visualization
- Selecting a team color
Example:
Enter player name: Jayson Tatum
Available Seasons:
1. 2017-18
2. 2018-19
3. 2019-20
4. 2020-21
5. 2021-22
6. 2022-23
7. 2023-24
8. 2024-25
9. 2025-26
Choose season: 7
Available Visualizations:
1. Shot Chart
2. Heat Map
Choose visualization: 1
Enter team name: Celtics
The engine will automatically:
- Retrieve NBA shooting data using the NBA API
- Process player shot locations
- Generate the selected visualization using Python and R
- Save the final PNG file
Generated visualizations are saved in:
visualizations/
Example generated files:
visualizations/
jayson-tatum_2023-24_shot-chart.png
jayson-tatum_2023-24_heat-map.png
These visualizations can be used for:
- Player evaluation
- Scouting reports
- Social media analytics
- Basketball strategy discussions
One application of the Bradley Analytics Software Engine was the Bradley Analytics Boston Celtics Report July 2026 that was focused on using shot charts to evaluate player tendencies.
The analysis demonstrated how basketball visualizations can help:
- Identify offensive patterns
- Evaluate shot selection
- Communicate player strengths and weaknesses
- Translate NBA data into strategic insights
The complete Bradley Analytics Boston Celtics Report is available in the reports/ folder.
Future versions of the Bradley Analytics Software Engine will expand functionality through:
- More unique shot charts
- Shot profile radars and zone maps
- Defensive charts
- Team charts
- Player comparison visualizations
- Visualizations paired with different stats
- Animated versions of every visualization
- Interactive Plotly shot charts
- Streamlit analytics dashboard
- Web based player analysis interface
- Lineup analysis
- Player comparison tool
- Draft comparison model
- Trade machine
- Raw data explorer
- New invented and self created stats and calculations:
- Bradley Shot Index (a proprietary shot value metric)
- Bradley 3PT Shooting Index (combining 3PA/36/100, 3P%, and shot difficulty into one score)
- Bradley 3PT Efficiency Scatter Plot (3PA/36/100 vs. 3P%)
- Bradley Space Rating (3PA, 3P%, catch and shoot, and movement shooting)
- Bradley Offensive Gravity (measuring how a player's shot profile stretches the defense)
- Bradley Shot Quality Rating
- Bradley Offensive Threat Score
- Bradley Perimeter Defense Index (radar chart: opponent FG%, deflections, loose balls, steals, screen navigation, charges)
- Bradley Interior Defense Index (bar chart: opponent rim FG%, blocks, contested shots, paint defense)
- Bradley Versatility Defense Index (measuring defense against each position)
- Bradley Defense Radar (steals, blocks, deflections, charges, rim protection, isolation defense, switchability)
- Bradley Archetype Identifier (weighing shooting, defense, rebounding, and other skills into a player type)
- Bradley Archetype Quadrant (a visual map of shooters, defenders, and 3&D players)
- Bradley Team Fit Calculator (input a player and team/coach, output spacing fit, defensive fit, rebounding fit, transition fit, and an overall fit score)
- Bradley Impact per Dollar (player rating plotted against salary)
- GitHub Pages portfolio website
- Interactive dashboards
- Public live demo
- Cloud hosted analytics application
Double check the spelling of the player's full name ("Jayson Tatum" not "J. Tatum" or a nickname). The lookup matches against the NBA's official player database, so only full, correctly spelled names will return a result.
The engine pulls live data from the NBA API on every run. A failed request usually means the internet connection dropped or NBA.com is temporarily rate limiting requests. Wait a moment and try again.
Make sure R is installed and that Rscript is available from the command line (this works the same way on Windows and Mac). If you just installed R, restart your terminal so it picks up the updated PATH.
Open R and run:
install.packages("tidyverse")
install.packages("ggplot2")bradley.bat is a Windows batch file, so it only runs on Windows. On Mac, run the Python script directly instead:
python3 python/bradley_analytics.pyConfirm you're looking in the visualizations/ folder, and that the data retrieval and R visualization steps both completed without printing an error message.
Back Bay, Boston, Massachusetts
Master of Science in Business Data Analytics (Candidate 2026)
University of Massachusetts Amherst
Bachelor of Science in Sport Management (December 2025)
University of Massachusetts Amherst
Bradley Analytics combines my passion for basketball, data analytics, and visual storytelling by creating visualization tools that transform NBA data into meaningful insights.
Email:
alexbrxdley@gmail.com
Phone:
(617) 651-2003
This project is licensed under the MIT License.













