Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import joblib | |
| import pandas as pd | |
| import datasets | |
| import json | |
| import numpy as np | |
| # Load the model | |
| pipe = joblib.load("./model.pkl") | |
| title = "Premium Amount Prediction" | |
| description = "This model predicts the Premium Amount. Drag and drop any slice from the dataset or edit values as you wish in the dataframe component below." | |
| # Load and prepare dataset | |
| df = datasets.load_dataset("silvaKenpachi/mental_health")["train"].to_pandas() | |
| df.dropna(axis=0, inplace=True) | |
| # Load configuration | |
| with open("./config.json") as f: | |
| config_dict = json.load(f) | |
| all_headers = config_dict["sklearn"]["columns"] | |
| # Filter headers to only include those present in the dataset | |
| headers = [col for col in all_headers if col in df.columns] | |
| # Define input and output interfaces | |
| #inputs = [gr.Dataframe(headers=headers, row_count=(2, "dynamic"), col_count=(len(headers), "fixed"), label="Input Data", interactive=True)] | |
| #working code that returns only 2 rows in output | |
| #inputs = [gr.Dataframe(headers=all_headers, row_count=(2, "dynamic"), col_count=(len(all_headers), "fixed"), label="Input Data", interactive=True)] | |
| #outputs = [gr.Dataframe(row_count=(2, "dynamic"), col_count=(1, "fixed"), label="Predictions", headers=["Depression"])] | |
| # Define input and output interfaces with dynamic row counts | |
| inputs = [gr.Dataframe( | |
| headers=headers, | |
| row_count=(10, "dynamic"), # Use tuple format (min_rows, "dynamic") | |
| col_count=(len(headers), "fixed"), | |
| label="Input Data", | |
| interactive=True | |
| )] | |
| outputs = [gr.Dataframe( | |
| row_count=(10, "dynamic"), # Use tuple format (min_rows, "dynamic") | |
| col_count=(2, "fixed"), | |
| label="Predictions", | |
| headers=["Name", "Depression"] | |
| )] | |
| #def infer(inputs): | |
| #data = pd.DataFrame(inputs, columns=headers) | |
| #predictions = pipe.predict(data) | |
| #return pd.DataFrame(predictions, columns=["Depression"]) | |
| #code to fix missing columns with na | |
| #def infer(inputs): | |
| #data = pd.DataFrame(inputs, columns=headers) | |
| # Add missing columns with default values (e.g., 0) | |
| #for col in all_headers: | |
| #if col not in data.columns: | |
| #data[col] = 0 | |
| # Ensure the order of columns matches the training data | |
| #data = data[all_headers] | |
| #predictions = pipe.predict(data) | |
| #return pd.DataFrame(predictions, columns=["Depression"]) | |
| #def infer(inputs): | |
| #data = pd.DataFrame(inputs, columns=headers) | |
| # Replace empty strings with NaN | |
| #data = data.replace('', np.nan) | |
| # Add missing columns with default values (e.g., 0) | |
| #for col in all_headers: | |
| #if col not in data.columns: | |
| #data[col] = 0 | |
| # Ensure the order of columns matches the training data | |
| #data = data[all_headers] | |
| # Fill NaN values with default values (e.g., 0) | |
| #data = data.fillna(0) | |
| # Convert all data to float | |
| #data = data.astype(float) | |
| #predictions = pipe.predict(data) | |
| #return pd.DataFrame(predictions, columns=["Name", "Depression"]) | |
| #return pd.DataFrame({ | |
| #'Name': data['Name'], | |
| #'Depression': predictions | |
| #}) | |
| def infer(inputs): | |
| # Create DataFrame from inputs | |
| data = pd.DataFrame(inputs, columns=headers) | |
| # Create a copy of the input DataFrame to preserve original data | |
| prediction_data = data.copy() | |
| # Replace empty strings with NaN for numeric columns only | |
| numeric_columns = [col for col in all_headers if col != 'Name'] | |
| prediction_data[numeric_columns] = prediction_data[numeric_columns].replace('', np.nan) | |
| # Add missing columns with default values | |
| for col in all_headers: | |
| if col not in prediction_data.columns: | |
| prediction_data[col] = 0 | |
| # Ensure the order of columns matches the training data | |
| prediction_data = prediction_data[all_headers] | |
| # Fill NaN values in numeric columns only | |
| prediction_data[numeric_columns] = prediction_data[numeric_columns].fillna(0) | |
| # Convert numeric columns to float | |
| prediction_data[numeric_columns] = prediction_data[numeric_columns].astype(float) | |
| # Make predictions | |
| predictions = pipe.predict(prediction_data) | |
| # Create output DataFrame using original names | |
| return pd.DataFrame({ | |
| 'Name': data['Name'], | |
| 'Depression': predictions | |
| }) | |
| gr.Interface( | |
| fn=infer, | |
| inputs=inputs, | |
| outputs=outputs, | |
| title=title, | |
| description=description, | |
| examples=[df[headers].head(3).values.tolist()], | |
| cache_examples=False | |
| ).launch(debug=True) | |