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
- Interactive Streamlit App: https://epl202425top5-czzrrxzyuenu4hwwep3axk.streamlit.app/
- Tableau Dashboard: https://public.tableau.com/views/team_excitement_score/Dashboard1?:language=en-US&:sid=&:redirect=auth&:display_count=n&:origin=viz_share_link
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)