Chand11's picture
Update app.py
aadfb95 verified
import pandas as pd
import numpy as np
import gradio as gr
import plotly.express as px
def process_file(file_obj):
if file_obj is None:
return "Please upload a dataset.", None, None
try:
if file_obj.name.endswith(".xlsx"):
df = pd.read_excel(file_obj)
else:
df = pd.read_csv(file_obj)
except Exception as e:
return f"Error reading file: {e}", None, None
# Clean
df = df.dropna(how="all")
required = {"CourseName","NPS","CompletionRate","LearnerSatisfaction","ContentQuality"}
if not required.issubset(df.columns):
return "Dataset missing expected columns (NPS, CompletionRate, etc.)", None, None
# Compute QualityScore
nps_norm = (df["NPS"].astype(float) + 100) / 2
score = 0.3*nps_norm + 0.3*(df["CompletionRate"].astype(float)*100) \
+ 0.2*(df["LearnerSatisfaction"].astype(float)/5*100) \
+ 0.2*df["ContentQuality"].astype(float)
df["QualityScore"] = score.round(1)
bar = px.bar(df, x="CourseName", y="QualityScore", title="Course Quality Score")
heat = px.imshow(df[["NPS","CompletionRate","LearnerSatisfaction","ContentQuality"]].T,
x=df["CourseName"], aspect="auto", title="Metrics Heatmap")
return "Dataset processed successfully!", df, bar, heat
demo = gr.Interface(
fn=process_file,
inputs=gr.File(label="Upload CSV/XLSX"),
outputs=[
gr.Textbox(label="Status"), # for messages
gr.Dataframe(label="Cleaned Data"),
gr.Plot(label="Quality Score Bar"),
gr.Plot(label="Metrics Heatmap")
],
title="Course Quality Tracker"
)
if __name__ == "__main__":
demo.launch()