vikvenk's picture
Update app.py
0065fb5 verified
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import gradio as gr
# Load your CSV file into a dataframe
df = pd.read_csv("weekly_data.csv")
df = df.sort_values(by=["year"], ascending=True)
# Map player names to player IDs
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))
# Convert names back to player_ids
player1_id = name_to_id.get(player1_name)
player2_id = name_to_id.get(player2_name)
# Filter dataframe for the selected years
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
# Define the available years for selection
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."
)
# Launch the Gradio interface
demo.launch(share=True)