import gradio as gr import pandas as pd import pickle import shap import xgboost import matplotlib import matplotlib.pyplot as plt import io matplotlib.use('Agg') pc = ["Enterprise System", "Management Information System", "Safety Critical System", "Transaction Processing System" ] rc = ['Constraints','Functional','Interfaces','Performance','Reliability&Availability','Safety','Security','Standards','Supportability','Usability'] rtc = ['Budget','Business','Cost','Design','Functional Validity','Organizational Environment','Overdrawn Budget','People','Performance','Personal','Planning&Control','Process','Project complexity','Quality','Requirement','Resource availability','Schedule','Software','Team','TimeDimension','Unrealistic Requirements','User'] mor = ['Extreme','High','Low','Medium','Negligible','Very High','Very Low'] imp = ["Low", "Catastrophic", "High", "Insignificant", "High", "Moderate"] dor = ['Cost','Estimations','Organizational Environment','Organizational Requirements','Planning and Control','Project Complexity','Project complexity','Requirements','Schedule','Software Requirement','Team','User','Planning and Control'] def ml_function(probability, affecting_no_of_modules, fixing_duration, project_category, requirement_category, risk_target_category, magnitude_of_risk, impact, dimension_of_risk, fix_cost_percent_of_project): data = list() data.append(probability) data.append(affecting_no_of_modules) data.append(fixing_duration) data.extend([bool(c in project_category) for c in pc]) data.extend([bool(c in requirement_category) for c in rc]) data.extend([bool(c in risk_target_category) for c in rtc]) data.extend([bool(c in magnitude_of_risk) for c in mor]) data.extend([bool(c in impact) for c in imp]) data.extend([bool(c in dimension_of_risk) for c in dor]) fix_cost_percent_of_project_one_hot = [False] * 10 fix_cost_percent_of_project_one_hot[fix_cost_percent_of_project] = True data.extend(fix_cost_percent_of_project_one_hot) df = pd.DataFrame([data]) df.columns = ['Probability', 'Afftecting No of Modules', 'Fixing Duration (Days)', 'project Category_Enterprise System', 'project Category_Management Information System', 'project Category_Safety Critical System', 'project Category_Transaction Processing System', 'Requirement Category_Constraints', 'Requirement Category_Functional', 'Requirement Category_Interfaces', 'Requirement Category_Performance', 'Requirement Category_Reliability & Availability', 'Requirement Category_Safety', 'Requirement Category_Security', 'Requirement Category_Standards', 'Requirement Category_Supportability', 'Requirement Category_Usability', 'Risk Target Category_Budget', 'Risk Target Category_Business', 'Risk Target Category_Cost', 'Risk Target Category_Design', 'Risk Target Category_FunctionalValidity', 'Risk Target Category_Organizational Environment', 'Risk Target Category_Overdrawn Budget', 'Risk Target Category_People', 'Risk Target Category_Performance', 'Risk Target Category_Personal', 'Risk Target Category_Planning & Control', 'Risk Target Category_Process', 'Risk Target Category_Project complexity', 'Risk Target Category_Quality', 'Risk Target Category_Requirement', 'Risk Target Category_Resource availability', 'Risk Target Category_Schedule', 'Risk Target Category_Software', 'Risk Target Category_Team', 'Risk Target Category_Time Dimension', 'Risk Target Category_Unrealistic Requirements', 'Risk Target Category_User', 'Magnitude of Risk_Extreme', 'Magnitude of Risk_High', 'Magnitude of Risk_Low', 'Magnitude of Risk_Medium', 'Magnitude of Risk_Negligible', 'Magnitude of Risk_Very High', 'Magnitude of Risk_Very Low', 'Impact_Low', 'Impact_catastrophic', 'Impact_high', 'Impact_insignificant', 'Impact_moderate', 'Dimension of Risk_Cost', 'Dimension of Risk_Estimations', 'Dimension of Risk_Organizational Environment', 'Dimension of Risk_Organizational Requirements', 'Dimension of Risk_Planning and Control', 'Dimension of Risk_Project Complexity', 'Dimension of Risk_Project complexity', 'Dimension of Risk_Requirements', 'Dimension of Risk_Schedule', 'Dimension of Risk_Software Requirement', 'Dimension of Risk_Team', 'Dimension of Risk_User', 'Dimension of Risk_planning and control', 'Fix Cost (\% of Project)_0', 'Fix Cost (\% of Project)_1', 'Fix Cost (\% of Project)_10', 'Fix Cost (\% of Project)_11', 'Fix Cost (\% of Project)_2', 'Fix Cost (\% of Project)_21', 'Fix Cost (\% of Project)_3', 'Fix Cost (\% of Project)_4', 'Fix Cost (\% of Project)_5', 'Fix Cost (\% of Project)_6', 'Fix Cost (\% of Project)_?'] df = df.reset_index(drop=True) for col in df.columns: if df[col].dtype == 'object': df[col] = pd.to_numeric(df[col]) xgb_model_loaded = pickle.load(open('xgboost_project_risk_prediction.pickle', "rb")) pred = xgb_model_loaded.predict(df[:1]) return str(pred[0]) # Define the Gradio interface with appropriate input components iface = gr.Interface( fn=ml_function, inputs=[ gr.Number(label="Probability"), gr.Number(label="Affecting No of Modules"), gr.Number(label="Fixing Duration (Days)"), gr.Radio(choices=pc, label="Project Category"), gr.Radio(choices=rc, label="Requirement Category"), gr.Radio(choices=rtc, label="Risk Target Category"), gr.Radio(choices=mor, label="Magnitude of Risk"), gr.Radio(choices=imp, label="Impact"), gr.Radio(choices=dor, label="Dimension of Risk"), gr.Slider(minimum=0, maximum=10,step=1, label="Fix Cost (% of Project)") ], outputs=[ gr.Label(label="Risk Level") ] ) # Run the Gradio app iface.launch()