|
import pandas as pd |
|
import seaborn as sns |
|
import matplotlib.pyplot as plt |
|
import gradio as gr |
|
|
|
|
|
df = pd.read_csv("weekly_data.csv") |
|
df = df.sort_values(by=["year"], ascending=True) |
|
|
|
|
|
latest_names = df.groupby("player_id")["player_name"].last().to_dict() |
|
name_to_id = {name: pid for pid, name in latest_names.items()} |
|
unique_player_names = list(name_to_id.keys()) |
|
def plot_density(player1_name, player2_name, year): |
|
plt.figure(figsize=(8, 5)) |
|
|
|
|
|
player1_id = name_to_id.get(player1_name) |
|
player2_id = name_to_id.get(player2_name) |
|
|
|
|
|
filtered_df = df[df["year"].isin(year)] |
|
|
|
colors = {} |
|
|
|
if player1_id: |
|
player1_data = filtered_df[filtered_df["player_id"] == player1_id]["half_ppr"] |
|
sns.kdeplot(player1_data, label=player1_name, shade=True) |
|
median1 = player1_data.median() |
|
colors[player1_name] = "blue" |
|
plt.axvline(median1, color="blue", linestyle="dashed", linewidth=2, label=f"{player1_name} Median: {median1:.1f}") |
|
|
|
if player2_id: |
|
player2_data = filtered_df[filtered_df["player_id"] == player2_id]["half_ppr"] |
|
sns.kdeplot(player2_data, label=player2_name, shade=True) |
|
median2 = player2_data.median() |
|
colors[player2_name] = "red" |
|
plt.axvline(median2, color="red", linestyle="dashed", linewidth=2, label=f"{player2_name} Median: {median2:.1f}") |
|
|
|
plt.xlabel("Fantasy Points") |
|
plt.ylabel("Density") |
|
plt.legend() |
|
plt.title("Fantasy Points Density Plot with Medians") |
|
plt.xlim(left=0) |
|
|
|
return plt |
|
|
|
|
|
years = sorted(df["year"].unique().tolist()) |
|
demo = gr.Interface( |
|
fn=plot_density, |
|
inputs=[ |
|
gr.Dropdown(choices=unique_player_names, label="Select Player 1", value=unique_player_names[0], interactive=True), |
|
gr.Dropdown(choices=unique_player_names, label="Select Player 2 (Optional)", value=None, interactive=True), |
|
gr.CheckboxGroup(choices=years, label="Select Year(s)", value=[2024]) |
|
], |
|
outputs=gr.Plot(), |
|
title="Fantasy Points Density Plot", |
|
description="Compare the fantasy point distributions of two players across selected years." |
|
) |
|
|
|
|
|
demo.launch(share=True) |