File size: 2,598 Bytes
899f23c
 
9db8932
899f23c
 
3ab2d73
899f23c
3ab2d73
899f23c
2ea100e
 
9db8932
 
 
 
 
 
 
3ab2d73
9db8932
 
 
 
 
899f23c
 
96d55af
95dede4
 
96d55af
 
 
3ab2d73
 
 
 
 
93eb63c
 
 
 
 
96d55af
93eb63c
 
 
 
 
95dede4
96d55af
899f23c
 
2ea100e
9db8932
674b979
 
 
39b3671
 
674b979
 
899f23c
 
 
 
 
674b979
899f23c
 
 
 
 
 
674b979
899f23c
 
 
 
93eb63c
899f23c
93eb63c
899f23c
 
 
 
93eb63c
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import gradio as gr
import pandas as pd
from datetime import datetime

# Placeholder for boba data
boba_data = pd.DataFrame(columns=["Date", "Shop", "Drink", "Toppings", "Size", "Sugar", "Rating", "Price"])

def submit_boba_data(use_today, date, shop, drink, toppings, size, sugar, rating, price):
    global boba_data
    if use_today:
        date = datetime.today().strftime('%Y-%m-%d')
    
    new_entry = pd.DataFrame([{
        "Date": date,
        "Shop": shop,
        "Drink": drink,
        "Toppings": toppings,
        "Size": size,
        "Sugar": sugar,
        "Rating": rating,
        "Price": price
    }])
    
    boba_data = pd.concat([boba_data, new_entry], ignore_index=True)
    return boba_data

def get_leaderboard():
    leaderboard = boba_data.groupby('Shop').agg({'Rating': 'mean', 'Shop': 'count'}).rename(columns={'Shop': 'Number of Entries'}).sort_values(by='Rating', ascending=False)
    return leaderboard.reset_index()

def get_statistics():
    total_drinks = len(boba_data)
    if total_drinks > 0:
        favorite_drink = boba_data['Drink'].mode()[0]
        favorite_topping = boba_data['Toppings'].mode()[0]
        average_sugar = boba_data['Sugar'].mean()
        total_spent = boba_data['Price'].sum()
    else:
        favorite_drink = "No data"
        favorite_topping = "No data"
        average_sugar = "No data"
        total_spent = 0

    return (f"Total drinks: {total_drinks}\n"
            f"Favorite drink: {favorite_drink}\n"
            f"Favorite topping: {favorite_topping}\n"
            f"Average sugar level: {average_sugar:.2f}%\n"
            f"Total spent: ${total_spent:.2f}")


# Define Gradio inputs and interface
inputs = [
    gr.Checkbox(label="Use today's date?"),
    gr.Textbox(label="Date (YYYY-MM-DD)"),
    gr.Textbox(label="Shop"),
    gr.Textbox(label="Drink"),
    gr.Textbox(label="Toppings"),
    gr.Dropdown(["Medium", "Large"], label="Size"),
    gr.Slider(0, 200, label="Sugar (%)", step=25),
    gr.Slider(1, 5, label="Rating"),
    gr.Number(label="Price")
]

iface = gr.Interface(
    fn=submit_boba_data, 
    inputs=inputs, 
    outputs=gr.Dataframe(),
    title="Boba Tracker Data Entry"
)

leaderboard_iface = gr.Interface(
    fn=get_leaderboard,
    inputs=None,
    outputs=gr.Dataframe(),
    title="Boba Leaderboard"
)

stats_iface = gr.Interface(
    fn=get_statistics,
    inputs=None,
    outputs="text",
    title="Boba Consumption Stats"
)

# Combine all interfaces into one app
gr.TabbedInterface([iface, leaderboard_iface, stats_iface], ["Data Entry", "Leaderboard", "Statistics"]).launch()