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
- basketball-reference.com
- flask
- html
- javascript
- json
- python
Log in or sign up for Devpost to join the conversation.