csv-plus-plus / app.py
baconnier's picture
Update app.py
c9d2489 verified
raw
history blame
2.15 kB
import gradio as gr
import pandas as pd
import sweetviz as sv
import io
import base64
class DataAnalyzer:
def __init__(self):
self.current_df = None
def generate_sweetviz_report(self, df):
report = sv.analyze(df)
html_io = io.StringIO()
report.show_html(filepath=html_io, open_browser=False)
return html_io.getvalue()
def get_dataset_info(self, df):
info_dict = {
"Rows": len(df),
"Columns": len(df.columns),
"Memory Usage (MB)": round(df.memory_usage(deep=True).sum() / 1024**2, 2),
"Missing Values": int(df.isnull().sum().sum()),
"Data Types": df.dtypes.astype(str).to_dict()
}
return str(info_dict) # Convert to string to avoid JSON serialization issues
def create_interface():
analyzer = DataAnalyzer()
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# CSV Data Analysis Dashboard")
with gr.Row():
file_input = gr.File(label="Upload CSV")
info_output = gr.Textbox(label="Dataset Information", lines=10)
report_html = gr.HTML()
def process_file(file):
if file is None:
return "No file uploaded.", None
try:
df = pd.read_csv(file.name)
info = analyzer.get_dataset_info(df)
report = analyzer.generate_sweetviz_report(df)
# Create download link
b64 = base64.b64encode(report.encode()).decode()
download_link = f'<a href="data:text/html;base64,{b64}" download="analysis_report.html">Download Report</a>'
return info, report + download_link
except Exception as e:
return f"Error: {str(e)}", None
file_input.change(
fn=process_file,
inputs=[file_input],
outputs=[info_output, report_html]
)
return demo
if __name__ == "__main__":
demo = create_interface()
demo.launch()