Spaces:
Runtime error
Runtime error
| # app.py | |
| import os | |
| os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0' # Suppress TensorFlow warnings | |
| import gradio as gr | |
| import pandas as pd | |
| import numpy as np | |
| from scipy.fft import fft, fftfreq | |
| from sklearn.preprocessing import MinMaxScaler | |
| from tensorflow.keras.models import Sequential | |
| from tensorflow.keras.layers import LSTM, Dense | |
| import matplotlib.pyplot as plt | |
| def load_data(input_source): | |
| """Handle both uploaded files and URLs""" | |
| try: | |
| if isinstance(input_source, str) and input_source.startswith("http"): | |
| # Load from URL | |
| df = pd.read_csv( | |
| input_source, | |
| engine='python', | |
| on_bad_lines='warn', | |
| encoding='utf-8' | |
| ) | |
| else: | |
| # Load from uploaded file | |
| df = pd.read_csv( | |
| input_source.name, | |
| engine='python', | |
| on_bad_lines='warn', | |
| encoding='utf-8' | |
| ) | |
| # Common cleaning steps | |
| df = df.drop(columns=['Province/State', 'Lat', 'Long'], errors='ignore') | |
| df = df.groupby('Country/Region').sum().T | |
| df.index = pd.to_datetime(df.index) | |
| df['Global'] = df.sum(axis=1) | |
| return df['Global'].diff().fillna(0) | |
| except Exception as e: | |
| raise ValueError(f"Data loading failed: {str(e)}") | |
| def analyze_data(input_source): | |
| try: | |
| if not input_source: | |
| return "β οΈ Please upload a file or enter a URL", None | |
| data = load_data(input_source) | |
| # Cycle detection | |
| N = len(data) | |
| yf = fft(data.values) | |
| xf = fftfreq(N, 1)[:N//2] | |
| cycle_days = int(1/xf[np.argmax(np.abs(yf[0:N//2]))]) | |
| # Create plot | |
| fig, ax = plt.subplots(figsize=(10, 4)) | |
| ax.plot(data.index, data.values, label='Daily Cases') | |
| ax.set_title("COVID-19 Analysis") | |
| ax.set_xlabel("Date") | |
| ax.set_ylabel("New Cases") | |
| ax.grid(True) | |
| plt.tight_layout() | |
| # Generate insights | |
| latest_avg = data[-30:].mean() | |
| trend = "β Rising" if data[-1] > data[-7] else "β Falling" | |
| return ( | |
| f"π Analysis Results:\n" | |
| f"- Dominant Cycle: {cycle_days} days\n" | |
| f"- 30-Day Average: {latest_avg:.1f} cases/day\n" | |
| f"- Current Trend: {trend}\n" | |
| f"β Analysis completed successfully!", | |
| fig | |
| ) | |
| except Exception as e: | |
| return f"β Error: {str(e)}", None | |
| # Create interface | |
| with gr.Blocks(theme=gr.themes.Soft()) as app: | |
| gr.Markdown("# π¦ COVID-19 Analysis Bot") | |
| gr.Markdown("Analyze case data from URLs or uploaded CSV files") | |
| with gr.Row(): | |
| with gr.Column(): | |
| file_upload = gr.File(label="1. Upload CSV", file_count='single') | |
| url_input = gr.Textbox(label="2. Or paste data URL here") | |
| submit_btn = gr.Button("Analyze β") | |
| with gr.Column(): | |
| chat_output = gr.Chatbot(label="Analysis Results", height=300) | |
| plot_output = gr.Plot(label="Case Trend") | |
| # Link components | |
| submit_btn.click( | |
| fn=analyze_data, | |
| inputs=[gr.combine(file_upload, url_input)], | |
| outputs=[chat_output, plot_output] | |
| ) | |
| # Examples | |
| gr.Examples( | |
| examples=[ | |
| ["https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/data/time_series_covid19_confirmed_global.csv"] | |
| ], | |
| inputs=[url_input], | |
| label="Try this example URL:" | |
| ) | |
| if __name__ == "__main__": | |
| app.launch() |