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