DEV Community

Marina Kim(Eunji)
Marina Kim(Eunji)

Posted on

[Project] EPL 2024/25 Season Team Performance Dashboard Three: Interactive Visualizations with Python (Streamlit) & Tableau

About This Project

This Personal project builds upon my previous EPL data analysis work to explore the most exciting matches of 2024/25 season.
Using Python and Streamlit, I created an interactive web app that calculates and ranks matches by an Excitement Score — a custom metric designed to capture the thrill of a game based on goals, shots, and whether both teams scored.
Additionally, I recreated the same data story with Tableau Public for a visually rich dashboard experience.


Dataset Source

The data is sourced from www.football-data.co.uk, providing official EPL match statistics such as:

  • Match Date
  • Home/Away Teams
  • Full-Time Goals(Home & Away)
  • Shots on Target(Home & Away)

What's New in This Project?

  • Definition of a novel Excitement score: Excitement Score = (Total Goals × 2) + (Total Shots × 0.5) + (Both Teams Scored × 3)
  • Identification of the top 5 most thrilling matches based on this score
  • Interactive Streamlit app to explore these matches with detailed summaries
  • Complementary Tableau dashboard for alternative visualization

Tools & Technologies

  • Python(pandas, Steamlit): Data processing and interactive web app
  • Tableau Public: Visual storytelling with rich dashboards
  • Data: EPL 2024/25 season match stats(csv)

How It Works - Code Overview

import pandas as pd
import streamlit as st

Load data
df = pd.read_csv("team_stats_2.csv")
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True).dt.strftime('%d-%m-%Y')
Calculate features
df['TotalGoals'] = df['FTHG'] + df['FTAG']
df['TotalShots'] = df['HS'] + df['AS']
df['BothTeamsScored'] = ((df['FTHG'] > 0) & (df['FTAG'] > 0)).astype(int)
Compute Excitement Score
df['ExcitementScore'] = df['TotalGoals']2 + df['TotalShots']*0.5 + df['BothTeamsScored']*3
**Select top 5 matches
*
top5_matches = df.sort_values(by='ExcitementScore', ascending=False).head(5)

Try the Dashboards

Key Insights

  • Matches with higher combined goals and shots naturally rank higher on excitement
  • Both teams scoring adds a significant boost to the excitement metric
  • The dashboards allow filtering and exploration of match details with summaries

What I Learned

  • Designing a custom metric that captures match excitement beyond simple win/loss
  • Enhancing data storytelling by combining Python-driven interactivity with Tableau's visualization power
  • Practical skills in Streamlit for building user-friendly apps
  • Handling and visualizing sports data to engage a wider audience

What is the Excitement Score?

As someone aspiring to work in sports data content, I designed the Excitement Score based on what I feel makes a football match more engaging:

  • Both teams scoring adds immersion and drama, so I gave it a weight of 3 points. -** Total goals **are the core fun factor, weighted 2 points.
  • **Total shots **represent match dynamism, contributing 0.5 points each.

I considered including other factors like red and yellow cards to reflect game intensity, but my current skill set limited this for now.

This score is my personal interpretation of what makes a match exciting. If your experience or the industry’s view differs, I’d love to hear your feedback! I’m eager to learn and improve this metric to better reflect real-world excitement.


Final Thoughts

This project is a first step toward my goal of becoming a sports data content creator. Visualizing the game beyond simple stats helps tell richer stories.

Thank you for reading and sharing your thoughts - your feedback will help me grow!

Check out the full source code and datasets on my GitHub:
https://github.com/k-eunji/epl202425_top5

Thanks for reading!
Marina Kim (Eunji Kim)

Top comments (0)