Spaces:
Sleeping
Sleeping
| 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() | |