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""" 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) def analyze_data(input_source): try: data = load_data(input_source) # Analysis logic 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() ax.plot(data.index, data.values) ax.set_title("COVID-19 Daily New Cases Analysis") return ( f"🔮 Analysis Results:\n" f"- Cycle: {cycle_days} days\n" f"- Latest 30-day average: {data[-30:].mean():.1f} cases/day\n" f"- Current trend: {'↑ Rising' if data[-1] > data[-7] else '↓ Falling'}", fig ) except Exception as e: return f"❌ Error: {str(e)}", None # Create hybrid interface with chat and file upload with gr.Blocks(theme=gr.themes.Soft()) as app: gr.Markdown("# 📊 Data Analysis Bot") gr.Markdown("Upload a CSV file or paste a COVID data URL") with gr.Row(): with gr.Column(): file_upload = gr.File(label="Upload CSV", file_count=1) url_input = gr.Textbox(label="Or paste URL here") submit_btn = gr.Button("Analyze") with gr.Column(): chat = gr.Chatbot(height=400) plot_output = gr.Plot() # Handle both input methods submit_btn.click( fn=analyze_data, inputs=[gr.combine(file_upload, url_input)], outputs=[chat, plot_output] ) # Example inputs gr.Examples( examples=[ ["https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/data/time_series_covid19_confirmed_global.csv"], ["sample_data.csv"] # Upload this via Hugging Face ], inputs=[url_input] ) if __name__ == "__main__": app.launch()