File size: 2,358 Bytes
40aedb2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0065fb5
40aedb2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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)