With the 2026 FIFA World Cup approaching, I wanted to build something that went beyond a standard, generic statistics page. Most fan-facing sports dashboards only show basic leaderboards, so I wanted to create an enterprise-grade Business Intelligence (BI) tool, something a professional scout or national team manager would actually use. The goal was to build a "Squad Intelligence Matrix" that allows for instant, side-by-side tactical comparisons of national rosters, focusing on experience, age distribution, and offensive firepower.

I engineered the dashboard entirely in Python, focusing on a clean data pipeline and a premium user interface. a) Data Processing: I used Pandas to handle the heavy lifting in-memory. The raw dataset required significant cleaning, so I built functions to standardize age formats, convert missing numerical stats to zeros, and handle null values. b) Frontend Application: I used Streamlit to build the interactive web application, allowing for dynamic filtering by team and player position. c) Visualizations: I utilized Plotly Express and Plotly Graph Objects to create the interactive vector graphics, specifically leveraging radar charts for squad profiling and scatter plots to map player longevity against experience. d) Deployment: The prototype was packaged with its dependencies and deployed to the live internet via Streamlit Community Cloud directly from a public GitHub repository.

Challenges I Faced: a) Messy Raw Data: The initial dataset had several formatting issues, including bizarrely formatted age strings (e.g., 27-003) and missing club affiliations listed as string None or NaN. I had to write specific cleaning logic to parse these out so they wouldn't crash the mathematical functions. b) Data Skew in Visualizations: Initially, I tried mapping raw goals in a bar chart, but it looked terrible because a massive portion of international players (like defenders and goalkeepers) have zero goals. I had to pivot my analytical approach to map "International Caps" (experience) instead, which provided a much richer visual distribution. c) Overriding Default UIs: Streamlit is great for rapid prototyping, but its default light-theme UI looks a bit basic. To achieve a "Power BI / Enterprise" aesthetic, I had to inject custom CSS directly into the Python script to hide default menus, enforce a dark theme, and build custom, shadowed KPI cards.

What I Learned: Building this project bridged the gap between academic data science concepts and a production-ready application. I deepened my understanding of ETL (Extract, Transform, Load) principles by forcing myself to clean the data before visualizing it. I also learned a tremendous amount about advanced Plotly customizations like manipulating chart background opacities and configuring radar chart axes to ensure the visuals seamlessly matched the dark UI theme. Most importantly, I learned how to prioritize actionable insights over just displaying raw numbers.

Built With

Share this project:

Updates