Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
import seaborn as sns
|
3 |
+
import matplotlib.pyplot as plt
|
4 |
+
import gradio as gr
|
5 |
+
|
6 |
+
# Load your CSV file into a dataframe
|
7 |
+
df = pd.read_csv("weekly_data.csv")
|
8 |
+
df = df.sort_values(by=["year"], ascending=True)
|
9 |
+
|
10 |
+
# Map player names to player IDs
|
11 |
+
latest_names = df.groupby("player_id")["player_name"].last().to_dict()
|
12 |
+
name_to_id = {name: pid for pid, name in latest_names.items()}
|
13 |
+
unique_player_names = list(name_to_id.keys())
|
14 |
+
def plot_density(player1_name, player2_name, year):
|
15 |
+
plt.figure(figsize=(8, 5))
|
16 |
+
|
17 |
+
# Convert names back to player_ids
|
18 |
+
player1_id = name_to_id.get(player1_name)
|
19 |
+
player2_id = name_to_id.get(player2_name)
|
20 |
+
|
21 |
+
# Filter dataframe for the selected years
|
22 |
+
filtered_df = df[df["year"].isin(year)]
|
23 |
+
|
24 |
+
colors = {}
|
25 |
+
|
26 |
+
if player1_id:
|
27 |
+
player1_data = filtered_df[filtered_df["player_id"] == player1_id]["half_ppr"]
|
28 |
+
sns.kdeplot(player1_data, label=player1_name, shade=True)
|
29 |
+
median1 = player1_data.median()
|
30 |
+
colors[player1_name] = "blue"
|
31 |
+
plt.axvline(median1, color="blue", linestyle="dashed", linewidth=2, label=f"{player1_name} Median: {median1:.1f}")
|
32 |
+
|
33 |
+
if player2_id:
|
34 |
+
player2_data = filtered_df[filtered_df["player_id"] == player2_id]["half_ppr"]
|
35 |
+
sns.kdeplot(player2_data, label=player2_name, shade=True)
|
36 |
+
median2 = player2_data.median()
|
37 |
+
colors[player2_name] = "red"
|
38 |
+
plt.axvline(median2, color="red", linestyle="dashed", linewidth=2, label=f"{player2_name} Median: {median2:.1f}")
|
39 |
+
|
40 |
+
plt.xlabel("Fantasy Points")
|
41 |
+
plt.ylabel("Density")
|
42 |
+
plt.legend()
|
43 |
+
plt.title("Fantasy Points Density Plot with Medians")
|
44 |
+
|
45 |
+
return plt
|
46 |
+
|
47 |
+
# Define the available years for selection
|
48 |
+
years = sorted(df["year"].unique().tolist())
|
49 |
+
demo = gr.Interface(
|
50 |
+
fn=plot_density,
|
51 |
+
inputs=[
|
52 |
+
gr.Dropdown(choices=unique_player_names, label="Select Player 1", value=unique_player_names[0], interactive=True),
|
53 |
+
gr.Dropdown(choices=unique_player_names, label="Select Player 2 (Optional)", value=None, interactive=True),
|
54 |
+
gr.CheckboxGroup(choices=years, label="Select Year(s)", value=[2024])
|
55 |
+
],
|
56 |
+
outputs=gr.Plot(),
|
57 |
+
title="Fantasy Points Density Plot",
|
58 |
+
description="Compare the fantasy point distributions of two players across selected years."
|
59 |
+
)
|
60 |
+
|
61 |
+
# Launch the Gradio interface
|
62 |
+
demo.launch(share=True)
|