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)