top of page
Search

Footy Comparer - A Streamlit App Allowing Anyone to Analyze Player Performance Data

  • Writer: Adith Joshua George
    Adith Joshua George
  • Jan 22
  • 4 min read

Updated: Jan 23


When determining how to create my first project in the soccer analytics space, I kept coming across the common theme that taking the first step is the hardest part of entering the field, as is true in many things. Seeing the myriad of creative projects and insightful analyses created by talented individuals can make it difficult for anyone to determine the niche they want to carve out in order to stand out. With this in mind, I created Footy Comparer, a Streamlit app built using Python that aims to allow anyone with soccer analyst ambitions to take a dataset and provide insightful charts with as few clicks as possible.


This application went through multiple iterations to provide the tools necessary to derive valuable findings from a dataset with as few limitations as possible to truly allow anyone to take their first steps into the sports analytics space. It utilizes percentile data calculated from the provided dataset and chosen position to produce visualizations and tables that help illustrate how a player compares to others in a position across user-chosen statistics.


Here is a quick demo of the app that I would highly recommend watching, but if you would want a breakdown of the features in the app in written format, feel free to scroll below this video.






First, I would like to break down the features included in this app. There are three categories in the sidebar. The first is the Upload Dataset tab.


The default dataset is MLS
The default dataset is MLS

This tab allows the user to upload their dataset as a .csv (comma separated value) file. There is a default dataset loaded in for both the player and goalkeeper tabs, which uses MLS data from the 2024 season. In order to upload your own dataset to replace either of these, just click on browse files and upload it from your device.


As for the requirements of the dataset chosen, there are only four mandatory columns: Player (or Name), Nation, Team, and Position.


Once you upload your dataset, the next tab of note is the Player Search and Filters.




Each of these filters is required to produce the results you are looking for, so make sure to check each one
Each of these filters is required to produce the results you are looking for, so make sure to check each one

This section contains the filters that must be chosen by the user to create the visualizations they aim to produce. I will quickly break them all down below:


Position

The first selection to make is the Position that you want to compare a player's statistics against. This is of importance to this app as a big inspiration was seeing how the Columbus Crew utilized players such as Yaw Yeboah, Max Arfsten, Malte Amundsen, and others outside their previously defined positions and got significantly improved performance out of them within their system. This Position feature allows any chosen player to be compared against others in the chosen position despite that player's indicated position in the dataset, which allows for these out-of-position analyses to be performed easily.

Player

Choosing a player to analyze is as simple as typing in the box and selecting the player you wish to see the stats of. The box will provide suggestions as you type, or you can alternatively scroll down through the suggestions until you find the player you are looking for.

Player to Compare Against (Optional)

This is not a required input, but it essentially allows the user to choose a player to compare the initially chosen player against for the given statistics using a comparison pizza chart that displays both player's percentile values in the chosen stats on top of each other

Select Stats

Here the user can choose which statistics they would like to use across the visualizations. By default, the first 5 numeric columns from the dataset are chosen, but the user can easily remove and select the columns/statistics they wish to use for their analysis.

Select Chart Type

There are two types of charts that can be created: Radar and Pizza. It should be noted that a Pizza chart is selected by default when a second player to compare against is provided as I currently have not developed the comparison feature for radar charts. Both of these were implemented using the mplsoccer package.

Number of Similar/Best Players

This is a draggable button where you can select how many players will be shown in the Similar Players and Best Players Tables respectively. Currently allows 1-25.


The final tab in this app is the Optional Filters.



None of these are required to create a visualization, but can be useful for more niche analyses
None of these are required to create a visualization, but can be useful for more niche analyses

There are only three features here that I will break down:


Inverse Stats

This is a feature I created as I noticed statistics I was looking at such as Errors and Goals Allowed should have their percentiles reversed as lower numbers indicate better player performance for these statistics. You can account for these statistics after you add them in the Select Stats section in the above tab by adding them here.

Filter By Nation

Allows for the user to filter the Similar Players and Best Players tables to only use players of a specific nation.

Filter By Team

Allows for the user to filter the Similar Players and Best Players tables to only use players from a specific team.


Finally, I will break down what the user can produce using this application.


There are three categories that each provide a unique way for the user to draw insights for a player/dataset
There are three categories that each provide a unique way for the user to draw insights for a player/dataset

Chart

The user can see the Pizza/Radar chart created for player(s) and statistics chosen here.

Similar Players

Using the cosine_similarity function provided in the Scikit-Learn package, the user can create a table displaying the most similar players to the chosen player for the chosen position based on the chosen statistics.

Best Players

Using the statistics chosen, the user can create a table of the best players calculated using the average of the equally weighted percentiles over each statistic chosen.



Thank you for taking the time to understand my application! If you have any feedback or recommendations, feel free to contact me over LinkedIn or by email.

 
 
 

Comments


myself

Adith George - DS & AI @ Purdue - The Soccerlyst

Join me as I explore the world of soccer analysis.

  • Linkedin
  • GitHub

© 2025 by Adith George. 

bottom of page