import gradio as gr import pandas as pd import sweetviz as sv import tempfile import os import re class DataAnalyzer: def __init__(self): self.temp_dir = tempfile.mkdtemp() def generate_sweetviz_report(self, df): report = sv.analyze(df) report_path = os.path.join(self.temp_dir, "report.html") report.show_html(report_path, open_browser=False) with open(report_path, 'r', encoding='utf-8') as f: html_content = f.read() # Remove Sweetviz logo and header html_content = re.sub(r'
.*?
', '', html_content, flags=re.DOTALL) html_content = re.sub(r'', '', html_content, flags=re.DOTALL) html_content = re.sub(r'', '', html_content, flags=re.DOTALL) # Additional CSS to hide unwanted elements and improve layout custom_css = """ """ # Insert custom CSS before closing head tag html_content = html_content.replace('', f'{custom_css}') # Clean up 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") file_input = gr.File(label="Upload CSV") report_html = gr.HTML() def process_file(file): if file is None: return None try: df = pd.read_csv(file.name) report = analyzer.generate_sweetviz_report(df) # Wrap report in container with fixed height report_with_style = f"""
{report}
""" return report_with_style except Exception as e: return f"Error generating report: {str(e)}" file_input.change( fn=process_file, inputs=[file_input], outputs=[report_html] ) return demo if __name__ == "__main__": demo = create_interface() demo.launch(show_error=True)