| 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()) |