Overview

Overview

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 lets users search by player or team, then generate court-based shot charts, stat-driven leaderboards and scatter plots (including Bradley Analytics’ own invented player ratings), all rendered as polished, transparent, publication-ready visualizations.

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.

Why This Matters

NBA front offices, scouts, and media rely on visualizations like these to evaluate player tendencies and communicate performance in ways raw stat lines can’t. This project demonstrates that same end-to-end analytics pipeline, from live API data through to a polished visual product, the same core workflow used in real sports analytics and business intelligence roles.

Portfolio:
Bradley Analytics Instagram


Features

Automated NBA Data Collection

Shot Chart Generation

Creates customized shot charts displaying:

Shooting Heat Maps

Creates density based heat maps that visualize:

Hex Shot Chart Generation

Creates hexagonal shot charts displaying:

Bar Chart Generation

Creates leaderboard-style bar charts displaying:

Scatter Plot Generation

Creates two-stat comparison scatter plots displaying:

Animated Shot Chart Generation

Creates an animated GIF of a player’s or team’s shots, revealed in true chronological game order:

Bradley Analytics Invented Stats

Custom 0-100 composite ratings, built from real NBA data rather than reverse-engineered from anything else, available as a stat source in both Bar Chart and Scatter Plot:

Automated Visualization Pipeline

The engine manages the complete workflow:

  1. User input
  2. NBA data retrieval
  3. Data processing
  4. Visualization generation
  5. Output creation

Interactive Dashboard Sections

Beyond the core visualizations above, the Streamlit dashboard adds six more sections, all built on the same live NBA API data:


How It Works

Architecture Diagram

           User Input
                |
                v
+-------------------------------+
| Bradley Analytics Engine      |
| Python Application            |
+-------------------------------+
                |
                v
     NBA API Data Retrieval
                |
                v
+-------------------------------+
| Data Processing               |
| pandas + CSV Storage          |
+-------------------------------+
                |
                v
   Shot Data  or  Stat Leaderboard
   (court graphs)  (Bar Chart / Scatter Plot,
                    including Bradley Analytics'
                    own invented ratings)
                |
                v
+-------------------------------+
| R Visualization Engine        |
| ggplot2 + Custom NBA Court    |
+-------------------------------+
                |
                v
+-------------------------------+
| Generated Visualizations      |
+-------------------------------+

Workflow

1. User searches by player or team
                |
                v
2. User chooses a visualization
                |
                v
3. Python retrieves NBA data
   (shot-level data for court graphs,
    season leaderboards for Bar Chart/Scatter Plot)
                |
                v
4. Data is cleaned and organized
                |
                v
5. R creates the visualization
                |
                v
6. Final PNG (or GIF, for Animated Shot Chart) is saved

Technologies Used

Programming Languages

Data Collection

Visualization

Development Tools

Analytics Skills Applied


Project Structure

Bradley Analytics Software Engine/

│
├── data/
│   └── Generated NBA datasets
│
├── visualizations/
│   └── Generated visualizations
│
├── python/
│   ├── bradley_analytics.py
│   ├── nba_data.py
│   ├── axis_data.py
│   ├── scatter_data.py
│   └── bradley_ratings.py
│
├── r/
│   ├── shot_chart.r
│   ├── heat_map.r
│   ├── hex_shot_chart.r
│   ├── animated_shot_chart.r
│   ├── bar_chart.r
│   ├── scatter_plot.r
│   └── functions/
│       ├── court.r
│       └── save_plot.r
|
├── reports/
│   └── Bradley Analytics reports
│
├── assets/
│   └── README images and banner
|
├── README.md
├── LICENSE
├── requirements.txt
├── settings.json
└── bradley.bat