import gradio as gr import pandas as pd import sweetviz as sv import tempfile import os class DataAnalyzer: def __init__(self): self.temp_dir = tempfile.mkdtemp() def generate_sweetviz_report(self, df): # Create Sweetviz report report = sv.analyze(df) # Save to temporary file with specific name report_path = os.path.join(self.temp_dir, "sweetviz_report.html") report.show_html(report_path, open_browser=False) # Read the generated HTML with open(report_path, 'r', encoding='utf-8') as f: html_content = f.read() # Clean up the temporary file os.remove(report_path) return html_content def create_interface(): analyzer = DataAnalyzer() with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Markdown("# Data Analysis Dashboard") with gr.Row(): file_input = gr.File(label="Upload CSV") dataset_info = gr.JSON(label="Dataset Information") # Create a larger HTML viewer for the report report_html = gr.HTML(label="Analysis Report", height=800) def process_file(file): if file is None: return None, None try: df = pd.read_csv(file.name) # Convert 'value' column to numeric if possible df['value'] = pd.to_numeric(df['value'], errors='coerce') info = { "Rows": len(df), "Columns": len(df.columns), "Memory Usage (MB)": round(df.memory_usage(deep=True).sum() / 1024**2, 2), "Missing Values": df.isnull().sum().sum(), "Column Types": df.dtypes.astype(str).to_dict() } # Generate Sweetviz report report = analyzer.generate_sweetviz_report(df) return info, report except Exception as e: return {"error": str(e)}, f"Error generating report: {str(e)}" file_input.change( fn=process_file, inputs=[file_input], outputs=[dataset_info, report_html] ) return demo if __name__ == "__main__": demo = create_interface() demo.launch( height=1000, # Increased height for better report visibility show_error=True )