titanic / app.py
Nathanotal's picture
update?
ad32c72
raw
history blame
3.13 kB
import gradio as gr
import numpy as np
from PIL import Image
import requests
import pandas as pd
import hopsworks
import joblib
project = hopsworks.login()
fs = project.get_feature_store()
mr = project.get_model_registry()
model = mr.get_model("titanic_modal", version=1)
model_dir = model.download()
model = joblib.load(model_dir + "/titanic_model.pkl")
df = pd
# features = pd.read_csv(
# "https://raw.githubusercontent.com/Nathanotal/remoteFiles/main/titanicCleaned.csv")
# features = features.drop(columns=["survived"])
# featureLabels = features.columns
featureLabels = ["Pclass", "Name", "Sex", "Age", "SibSp",
"Parch", "Ticket", "Fare", "Cabin", "Embarked"]
def titanic(Pclass, Sex, Age, SibSp, Parch, Fare, Cabin, Embarked):
input_list = []
sexToFeature = {
"male": 0,
"female": 1,
}
# Convert inputs to features
input_list.append(Pclass) # Todo: Convert to feature
input_list.append(sexToFeature.get(Sex)) # Todo: Convert to feature
input_list.append(Age) # !
input_list.append(SibSp) # Todo: Convert to feature
input_list.append(Parch) # Todo: Convert to feature
input_list.append(Fare) # Todo: Convert to feature
input_list.append(Cabin) # Todo: Convert to feature
input_list.append(Embarked) # Todo: Convert to feature
# 'res' is a list of predictions returned as the label.
res = model.predict(np.asarray(input_list).reshape(1, -1))
# We add '[0]' to the result of the transformed 'res', because 'res' is a list, and we only want
# the first element.
intLabelToText = {0: "Died", 1: "Survived"}
age = input_list[0]
gender = input_list[1]
survived = res[0]
survivedText = intLabelToText[survived]
# Temp:
age = 20
gender = "female"
# Todo: survivor, "https://fakeface.rest/face/json?maximum_age=50&gender=female&minimum_age=49"
generate_survivor_url = f'https://fakeface.rest/face/json?maximum_age={age}&gender={gender}&minimum_age={age}'
randomized_face_url = requests.get(
generate_survivor_url).json()["image_url"]
survivor_url = randomized_face_url
img = Image.open(requests.get(survivor_url, stream=True).raw)
return img
inputs = []
numericalInputs = ["age", "sibsp", "parch", "fare", "pclass"]
worthlessInputs = ["name", "ticket"]
categoricalInputs = ["sex", "embarked", "cabin"]
for feature in featureLabels:
if feature in numericalInputs:
inputs.append(gr.inputs.Number(default=1.0, label=feature))
elif feature in worthlessInputs:
pass
# inputs.append(gr.Inputs.Textbox(default='text', label=feature))
elif feature in categoricalInputs:
inputs.append(gr.inputs.Dropdown(
choices=["a", "b"], default="a", label=feature))
else:
raise Exception(f'Feature: "{feature}" not found')
demo = gr.Interface(
fn=titanic,
title="Titanic Survivor Predictive Analytics",
description="Experiment with person features to predict which survivor it is.",
allow_flagging="never",
inputs=inputs,
outputs=gr.Image(type="pil"))
demo.launch()