import pandas as pd | |
import ydata_profiling | |
import gradio as gr | |
from pydantic_settings import BaseSettings | |
import sweetviz as sv | |
# def generate_report(file,type): | |
# df = pd.read_csv(file) if file.name.endswith(".csv") else pd.read_excel(file) | |
# if type == "pandas profiling": | |
# return ydata_profiling.ProfileReport(df).to_html() | |
# elif type == "sweetviz": | |
# return sv.analyze(df).show_html(open_browser=True, | |
# layout='widescreen', | |
# scale=None) | |
# # Custom HTML template for styling the report output | |
# custom_html = """ | |
# <!DOCTYPE html> | |
# <html> | |
# <head> | |
# <title>Data Profile Report</title> | |
# <style> | |
# body { | |
# font-family: Arial, sans-serif; | |
# margin: 0; | |
# padding: 20px; | |
# } | |
# .container { | |
# width: 80%; | |
# margin: auto; | |
# } | |
# </style> | |
# </head> | |
# <body> | |
# <div class="container"> | |
# {content} | |
# </div> | |
# </body> | |
# </html> | |
# """ | |
def generate_report(file, type): | |
df = pd.read_csv(file) if file.name.endswith(".csv") else pd.read_excel(file) | |
if type == "pandas profiling": | |
html_report =ydata_profiling.ProfileReport(df).to_html() | |
# Add JavaScript code for download functionality | |
download_html = f""" | |
<script> | |
function downloadReport() {{ | |
var reportContent = document.getElementById("output").innerHTML; | |
var filename = "report.html"; | |
var blob = new Blob([reportContent], {{type: "text/html"}}); | |
var link = document.createElement("a"); | |
link.href = URL.createObjectURL(blob); | |
link.download = filename; | |
link.click(); | |
}} | |
</script> | |
<button onclick="downloadReport()">Download Report</button> | |
{html_report} | |
""" | |
return download_html | |
cluster = gr.Interface( | |
fn=generate_report, | |
inputs=[gr.File(file_types=['.csv', '.xlsx'], label="Upload a CSV or Excel file"), | |
gr.Radio(["pandas profiling", "sweetviz"], label="Type of report", info="Explore the data")], | |
css=""" | |
# Output container styling for better visual presentation (optional) | |
.output-container { | |
padding: 10px; | |
} | |
""", | |
layout=gr.Column( | |
'html' | |
#gr.HTML(label="Data Profile Report", html_content=download_html), | |
gr.Button(value="Download Report", type="submit") # Optional: Replace button within HTML if needed | |
), | |
title="Excel sheet Profiling Report", | |
live=True, | |
) | |
# with gr.Blocks() as cluster: | |
# with gr.Row(): | |
# gr.File(file_types=['.csv', '.xlsx'], label="Upload a CSV or Excel file"), | |
# gr.Radio(["pandas profiling", "sweetviz"], label="Type of report", info="Explore the data")] | |
# btn=gr.Button(value="Download Report", type="submit") | |
# with gr.Row(): | |
# gr.Button(value="Download Report", type="submit") | |
cluster.launch() | |