# wbert/nba_comparison-knn architecture

> Architecture diagram of the GitHub repository wbert/nba_comparison-knn, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wbert/nba_comparison-knn
- Repository: https://github.com/wbert/nba_comparison-knn

## Overview

This repository is an NBA player similarity finder. Its user workflow collects player statistics, scales them, queries a nearest-neighbor model, and displays matching players with distances. A separate training workflow reads the player dataset, fits the scaler and neighbor model, evaluates neighbor distances, and saves the artifacts used by the app. The graph is based on the supplied excerpts; the README is empty, and the dataset and serialized model contents were not inspected.

Main entry points: [`main.py`](https://github.com/wbert/nba_comparison-knn/blob/main/main.py) (Stats interface), [`train.py`](https://github.com/wbert/nba_comparison-knn/blob/main/train.py) (Training workflow), [`dataset.csv`](https://github.com/wbert/nba_comparison-knn/blob/main/dataset.csv) (Player dataset), [`models/scaler.joblib`](https://github.com/wbert/nba_comparison-knn/blob/main/models/scaler.joblib) (Scaler artifact)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Similarity app"]
  node_app_ui["Stats interface<br/>[main.py]"]
  node_scale_input["Input scaling<br/>[main.py]"]
  node_neighbor_search["Neighbor search<br/>[main.py]"]
  node_results["Match results<br/>[main.py]"]
end

subgraph group_training["Model training"]
  node_train["Training workflow<br/>[train.py]"]
  node_fit_scaler["Fit scaler<br/>[train.py]"]
  node_fit_neighbors["Fit neighbors<br/>[train.py]"]
  node_evaluation["Neighbor evaluation<br/>[train.py]"]
end

subgraph group_data["Data and artifacts"]
  node_dataset["Player dataset<br/>[dataset.csv]"]
  node_scaler_artifact["Scaler artifact<br/>[scaler.joblib]"]
  node_knn_artifact["KNN artifact<br/>[knn_model.joblib]"]
end

node_user(("User"))

node_user -->|"enters stats"| node_app_ui
node_app_ui -->|"scales input"| node_scale_input
node_app_ui -->|"queries neighbors"| node_neighbor_search
node_app_ui -->|"loads player names"| node_dataset
node_app_ui -->|"loads scaler"| node_scaler_artifact
node_app_ui -->|"loads model"| node_knn_artifact
node_app_ui -->|"displays matches"| node_results
node_train -->|"reads stats"| node_dataset
node_train -->|"fits scaler"| node_fit_scaler
node_train -->|"fits model"| node_fit_neighbors
node_fit_scaler -->|"saves scaler"| node_scaler_artifact
node_fit_neighbors -->|"saves model"| node_knn_artifact
node_train -->|"evaluates neighbors"| node_evaluation

click node_app_ui "https://github.com/wbert/nba_comparison-knn/blob/main/main.py"
click node_scale_input "https://github.com/wbert/nba_comparison-knn/blob/main/main.py"
click node_neighbor_search "https://github.com/wbert/nba_comparison-knn/blob/main/main.py"
click node_results "https://github.com/wbert/nba_comparison-knn/blob/main/main.py"
click node_train "https://github.com/wbert/nba_comparison-knn/blob/main/train.py"
click node_fit_scaler "https://github.com/wbert/nba_comparison-knn/blob/main/train.py"
click node_fit_neighbors "https://github.com/wbert/nba_comparison-knn/blob/main/train.py"
click node_evaluation "https://github.com/wbert/nba_comparison-knn/blob/main/train.py"
click node_dataset "https://github.com/wbert/nba_comparison-knn/blob/main/dataset.csv"
click node_scaler_artifact "https://github.com/wbert/nba_comparison-knn/blob/main/models/scaler.joblib"
click node_knn_artifact "https://github.com/wbert/nba_comparison-knn/blob/main/models/knn_model.joblib"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app_ui,node_scale_input,node_neighbor_search,node_results,node_user toneBlue
class node_train,node_fit_scaler,node_fit_neighbors,node_evaluation toneAmber
class node_dataset,node_scaler_artifact,node_knn_artifact toneMint
```

## Components

### Similarity app

- [Stats interface](https://github.com/wbert/nba_comparison-knn/blob/main/main.py): `main.py`
- [Input scaling](https://github.com/wbert/nba_comparison-knn/blob/main/main.py): `main.py`
- [Neighbor search](https://github.com/wbert/nba_comparison-knn/blob/main/main.py): `main.py`
- [Match results](https://github.com/wbert/nba_comparison-knn/blob/main/main.py): `main.py`

### Model training

- [Training workflow](https://github.com/wbert/nba_comparison-knn/blob/main/train.py): `train.py`
- [Fit scaler](https://github.com/wbert/nba_comparison-knn/blob/main/train.py): `train.py`
- [Fit neighbors](https://github.com/wbert/nba_comparison-knn/blob/main/train.py): `train.py`
- [Neighbor evaluation](https://github.com/wbert/nba_comparison-knn/blob/main/train.py): `train.py`

### Data and artifacts

- [Player dataset](https://github.com/wbert/nba_comparison-knn/blob/main/dataset.csv): `dataset.csv`
- [Scaler artifact](https://github.com/wbert/nba_comparison-knn/blob/main/models/scaler.joblib): `models/scaler.joblib`
- [KNN artifact](https://github.com/wbert/nba_comparison-knn/blob/main/models/knn_model.joblib): `models/knn_model.joblib`

### Other components

- **User**

## Connections

- User → Stats interface: enters stats (evidence: `main.py`)
- Stats interface → Input scaling: scales input (evidence: `main.py`)
- Stats interface → Neighbor search: queries neighbors (evidence: `main.py`)
- Stats interface → Player dataset: loads player names (evidence: `main.py`)
- Stats interface → Scaler artifact: loads scaler (evidence: `main.py`)
- Stats interface → KNN artifact: loads model (evidence: `main.py`)
- Stats interface → Match results: displays matches (evidence: `main.py`)
- Training workflow → Player dataset: reads stats (evidence: `train.py`)
- Training workflow → Fit scaler: fits scaler (evidence: `train.py`)
- Training workflow → Fit neighbors: fits model (evidence: `train.py`)
- Fit scaler → Scaler artifact: saves scaler (evidence: `train.py`)
- Fit neighbors → KNN artifact: saves model (evidence: `train.py`)
- Training workflow → Neighbor evaluation: evaluates neighbors (evidence: `train.py`)
