Spaces:
Runtime error
Runtime error
| from datetime import datetime | |
| import gradio as gr | |
| import hopsworks | |
| import joblib | |
| import pandas as pd | |
| import numpy as np | |
| project = hopsworks.login() | |
| fs = project.get_feature_store() | |
| mr = project.get_model_registry() | |
| model = mr.get_model("heart_model_v1", version=1) | |
| model_dir = model.download() | |
| model = joblib.load(model_dir + "/heart_model.pkl") | |
| preprocessing_pipeline = joblib.load(model_dir + "/preprocessing_pipeline.pkl") | |
| print("Model downloaded") | |
| def impute(df): | |
| _, numerical_pipeline, numerical = preprocessing_pipeline.transformers_[0] | |
| _, categorical_pipeline, categorical = preprocessing_pipeline.transformers_[1] | |
| numerical_imputer = numerical_pipeline.named_steps['imputer'] | |
| categorical_imputer = categorical_pipeline.named_steps['imputer'] | |
| df[numerical] = numerical_imputer.transform(df[numerical]) | |
| df[categorical] = categorical_imputer.transform(df[categorical]) | |
| return df | |
| def predict(df): | |
| df = preprocessing_pipeline.transform(df) | |
| prediction = model.predict(df) | |
| return prediction[0] | |
| def heart(heartdisease, smoking, alcoholdrinking, stroke, diffwalking, sex, agecategory, race, diabetic, physicalactivity, genhealth, asthma, kidneydisease, skincancer, mentalhealth, physicalhealth, sleeptime, bmi): | |
| df = pd.DataFrame({ | |
| 'smoking': [smoking], | |
| 'alcohol_drinking': [alcoholdrinking], | |
| 'stroke': [stroke], | |
| 'diff_walking': [diffwalking], | |
| 'sex': [sex], | |
| 'age_category': [agecategory], | |
| 'race': [race], | |
| 'diabetic': [diabetic], | |
| 'physical_activity': [physicalactivity], | |
| 'gen_health': [genhealth], | |
| 'asthma': [asthma], | |
| 'kidney_disease': [kidneydisease], | |
| 'skin_cancer': [skincancer], | |
| 'b_m_i': [bmi], | |
| 'mental_health': [mentalhealth], | |
| 'physical_health': [physicalhealth], | |
| 'sleep_time': [sleeptime], | |
| }) | |
| # Replace Unknowns with NaNs | |
| # Feature pipeline has an imputer | |
| df = df.replace('Unknown', np.nan) | |
| store_data = False | |
| if heartdisease != "Unknown": | |
| df = impute(df) | |
| df['heart_disease'] = np.float64(heartdisease == "Yes") | |
| df['timestamp'] = pd.to_datetime(datetime.now()) | |
| # Hacky fix due to Hopsworks Magic | |
| df["timestamp"] = df['timestamp'] - pd.to_timedelta(0 * df.index, unit='s') | |
| # heart_fg = fs.get_feature_group(name="heart", version=1) | |
| heart_fg = fs.get_or_create_feature_group( | |
| name="heart_user_dataset", | |
| version=1, | |
| primary_key=df.columns, | |
| description="Heart Dataset of User Input Values", | |
| event_time="timestamp", | |
| ) | |
| try: | |
| heart_fg.insert(df, write_options={"wait_for_job": False}) | |
| except Exception as e: | |
| print(f"An error occurred: {e}") | |
| store_data = True | |
| if store_data: | |
| return "Thank you for submitting your data. We will use it to improve our model." | |
| pred = predict(df) | |
| if not pred: | |
| return "We predict that you do NOT have heart disease. (But this is not medical advice!)" | |
| else: | |
| return "We predict that you MIGHT have heart disease. (But this is not medical advice!)" | |
| demo = gr.Interface( | |
| fn=heart, | |
| title="Heart Disease Predictive Analytics", | |
| description="Experiment with different heart configurations.", | |
| allow_flagging="never", | |
| inputs=[ | |
| gr.Dropdown(['Unknown', 'No', 'Yes'], label="Heart Disease (TARGET)"), | |
| gr.Dropdown(['Unknown', 'No', 'Yes'], label="Smoking"), | |
| gr.Dropdown(['Unknown', 'No', 'Yes'], label="Alcohol Drinking"), | |
| gr.Dropdown(['Unknown', 'No', 'Yes'], label="Stroke"), | |
| gr.Dropdown(['Unknown', 'No', 'Yes'], label="Diff Walking"), | |
| gr.Dropdown(['Unknown', 'Female', 'Male'], label="Sex"), | |
| gr.Dropdown(['Unknown', '18-24', '25-29', '30-34', '35-39', '40-44', '45-49', '50-54', '55-59', '60-64', '65-69', '70-74', '75-79', '80 or older'], label="Age Category"), | |
| gr.Dropdown(['Unknown', 'American Indian/Alaskan Native', 'Asian', 'Black', 'Hispanic', 'Other', 'White'], label="Race"), | |
| gr.Dropdown(['Unknown', 'No', 'No, borderline diabetes', 'Yes', 'Yes (during pregnancy)'], label="Diabetic"), | |
| gr.Dropdown(['Unknown', 'No', 'Yes'], label="Physical Activity"), | |
| gr.Dropdown(['Unknown', 'Poor', 'Fair', 'Good', 'Very good', 'Excellent'], label="General Health"), | |
| gr.Dropdown(['Unknown', 'No', 'Yes'], label="Asthma"), | |
| gr.Dropdown(['Unknown', 'No', 'Yes'], label="Kidney Disease"), | |
| gr.Dropdown(['Unknown', 'No', 'Yes'], label="Skin Cancer"), | |
| gr.Number(label="Mental Health", minimum=0, maximum=30), | |
| gr.Number(label="Physical Health", minimum=0, maximum=30), | |
| gr.Number(label="Sleep Time", minimum=1, maximum=24), | |
| gr.Number(label="BMI"), | |
| ], | |
| outputs="text") | |
| demo.launch(debug=True) | |