Inspiration

The NBA GOAT debate is often skewed by personal bias. Some fans value raw scoring, while others value playmaking or defensive efficiency. We wanted to build a tool that removes the bias by letting users define their own "Success Metric." By allowing anyone to weight specific stats, we allowed these arguments to be driven into stats and analytics.

What it does

Custom NBA Player Rankings is a web-based analytics dashboard where users input specific weights for eight different statistical categories (PPG, APG, RPG, etc.). The application then processes a JSON dataset of over 700 NBA players to generate a custom "Score" for each, ranking the entire league based on the user's unique criteria.

How we built it

We built the backend using Python and Flask, also using Pandas for data manipulation. For the data processing, we used a JSON dataset containing season stats for every player. Since stats exist on different scales (such as 30 PPG vs 0.5 BPG), we implemented a Min-Max Normalization algorithm to bring all stats into a 0.0 to 1.0 range. We also developed a custom function that applies user-defined coefficients to these normalized values. For "negative" stats like Turnovers, we inverted the normalization so that fewer turnovers increase a player's score. The UI was built with HTML/CSS to display the results in a clean format that allows users to easily view all players on their leaderboard.

Challenges we ran into

The primary challenge was handling the stat disparity. A simple sum of stats would make Points Per Game the only factor that mattered, so implementing the normalize_column function was crucial to make sure a dominant shot-blocker could still rank highly if the user values defense, for example. We also had to ensure the Flask app could handle sorting and rendering over 730 records efficiently and seamlessly during user input.

Accomplishments that we're proud of

We are proud of the mathematical accuracy of the ranking engine. By using proper data normalization, the rankings feel as if they make sense. If you up the assists weight, the leaderboard accurately reflects the league's best passers like Nikola Jokić and Luka Doncic. We also successfully managed to clean and process a huge JSON dataset into a searchable web interface in just a few hours.

What we learned

This project was essentially a deep dive into Data Science with Python. We learned how to use Pandas to perform vector-valued operations rather than using slow loops. We also gained experience in full stack development by connecting a data-heavy Python backend to a responsive frontend with Flask.

What's next for Custom NBA Player Rankings

Our team plans implement more advanced analytics integration (PER, Win Shares, and TS%) for more data-heavy fans who see the game of basketball as a huge math problem (trust us, there's many). We also plan to add a "Compare rankings" feature to allow users to compare their own rankings based off the criteria and weights they selected to other user-generated leaderboards. This would allow the user gain an understanding of what the community values and where everyone differs.

Built With

Share this project:

Updates