IqRogueRex's picture
Create app.py
6c00f36 verified
import numpy as np
import gradio as gr
def generate_stock_data(n_days):
n_days = int(n_days)
days = np.array([f"Day {i + 1}" for i in range(n_days)])
prices = np.random.randint(100, 501, (n_days, 3))
table = np.column_stack((days, prices))
return table, table
def daily_returns(data):
data = np.array(data)
days = data[:, 0]
prices = data[:, 1:].astype(float)
diff = np.diff(prices, axis=0)
prev = prices[:-1]
returns = (diff / prev) * 100
return_days = days[1:]
return np.column_stack((return_days, returns))
def stock_volatility(data):
data = np.array(data)
prices = data[:, 1:].astype(float)
diff = np.diff(prices, axis=0)
prev = prices[:-1]
returns = (diff / prev) * 100
vol = np.std(returns, axis=0)
stocks = np.array(["Stock A", "Stock B", "Stock C"])
return np.column_stack((stocks, vol))
def best_stock_per_day(data):
data = np.array(data)
days = data[:, 0]
prices = data[:, 1:].astype(float)
diff = np.diff(prices, axis=0)
prev = prices[:-1]
returns = (diff / prev) * 100
return_days = days[1:]
idx = np.argmax(returns, axis=1)
stocks = np.array(["Stock A", "Stock B", "Stock C"])
best_stocks = stocks[idx]
best_returns = returns[np.arange(len(returns)), idx]
return np.column_stack((return_days, best_stocks, best_returns))
with gr.Blocks(title="Stock Market Analyzer") as demo:
gr.Markdown("# πŸ“ˆ Stock Market Mini Analyzer")
data_state = gr.State()
with gr.Row():
days_input = gr.Number(value=10, label="Number of Days")
generate_btn = gr.Button("Generate Stock Data", variant="primary")
stock_table = gr.Dataframe(
headers=["Day", "Stock A", "Stock B", "Stock C"],
interactive=False
)
generate_btn.click(
generate_stock_data,
inputs=days_input,
outputs=[data_state, stock_table]
)
gr.Markdown("---")
with gr.Tab("πŸ“Š Daily Returns"):
return_btn = gr.Button("Compute Daily Returns", variant="primary")
return_output = gr.Dataframe(
headers=["Day", "Return A (%)", "Return B (%)", "Return C (%)"],
interactive=False
)
return_btn.click(daily_returns, inputs=data_state, outputs=return_output)
with gr.Tab("πŸ“‰ Volatility"):
vol_btn = gr.Button("Compute Volatility", variant="primary")
vol_output = gr.Dataframe(
headers=["Stock", "Volatility (%)"],
interactive=False
)
vol_btn.click(stock_volatility, inputs=data_state, outputs=vol_output)
with gr.Tab("πŸ† Best Stock Per Day"):
best_btn = gr.Button("Find Best Performer", variant="primary")
best_output = gr.Dataframe(
headers=["Day", "Best Stock", "Return (%)"],
interactive=False
)
best_btn.click(best_stock_per_day, inputs=data_state, outputs=best_output)
demo.launch(theme=gr.themes.Soft())