File size: 2,687 Bytes
0ef03ea fd0fa88 0ef03ea fd0fa88 |
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 87 88 89 |
import os
import json
import threading
import gradio as gr
import statistics
from scipy import stats
DATA_DIR = './storage'
DATA_FILE = os.path.join(DATA_DIR, 'guesses.json')
lock = threading.Lock()
def ensure_data_directory():
os.makedirs(DATA_DIR, exist_ok=True)
def load_guesses():
ensure_data_directory()
if not os.path.exists(DATA_FILE):
with open(DATA_FILE, 'w') as f:
json.dump([], f)
with open(DATA_FILE, 'r') as f:
return json.load(f)
def save_guesses(guesses):
with open(DATA_FILE, 'w') as f:
json.dump(guesses, f)
def add_guess(guess):
with lock:
guesses = load_guesses()
guesses.append(guess)
save_guesses(guesses)
n = len(guesses)
average = sum(guesses) / n
if n >= 2:
# Calculate sample standard deviation
s = statistics.stdev(guesses)
# Calculate standard error
SE = s / (n ** 0.5)
# Degrees of freedom
df = n - 1
# Confidence level (e.g., 95%)
confidence_level = 0.95
alpha = 1 - confidence_level
# Calculate critical t-value
t_value = stats.t.ppf(1 - alpha/2, df)
# Calculate margin of error
ME = t_value * SE
# Calculate confidence interval
ci_lower = average - ME
ci_upper = average + ME
# Prepare output message
return (
f"Your guess has been recorded.\n"
f"Current average of all guesses: {average:.2f}\n"
f"95% confidence interval: ({ci_lower:.2f}, {ci_upper:.2f})"
)
else:
# Not enough data to compute confidence interval
return (
f"Your guess has been recorded.\n"
f"Current average of all guesses: {average:.2f}\n"
f"Not enough data to compute confidence interval."
)
#demo = gr.Interface(
# fn=add_guess,
# inputs=gr.Number(label="Enter your guess"),
# outputs="text",
# title="Collective Guessing Game",
# description="Submit your guess and contribute to the global average!"
#)
with gr.Blocks() as demo:
gr.Markdown("# Collective Guessing Game")
gr.Markdown("Submit your guess and contribute to the global average!")
guess_input = gr.Number(label="Enter your guess")
submit_button = gr.Button("Submit Guess")
with gr.Accordion("View Current Results!", open=False):
output_text = gr.Textbox(label="Results", lines=10)
submit_button.click(fn=add_guess, inputs=guess_input, outputs=output_text)
demo.launch()
|