Rubanza Silver
Update app.py
33659a3 verified
Raw
History Blame Contribute Delete
4.51 kB
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)