Snigs98's picture
Update app.py
83d0abc verified
import gradio as gr
import pandas as pd
import numpy as np
import zipfile
import os
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix, roc_curve, auc
# Extract ZIP File
zip_path = "DIABETES_PREDICTION.zip"
extract_path = "diabetes_data"
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_path)
# Load Dataset
csv_file_path = os.path.join(extract_path, "diabetes_prediction_dataset.csv")
df = pd.read_csv(csv_file_path)
# Data Preprocessing
df['smoking_history'] = df['smoking_history'].map({'never':0, 'No Info':1, 'current':2, 'former':3, 'ever':4, 'not current':5})
df['gender'] = df['gender'].map({'Male': 0, 'Female': 1})
# Feature Selection
target = 'diabetes'
X = df.drop(columns=[target])
y = df[target]
# Normalize Features
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Train-Test Split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# Train Model
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# Define Prediction Function
def predict_diabetes(gender, age, hypertension, heart_disease, smoking_history, bmi, HbA1c, blood_glucose):
# Convert categorical inputs to numeric
gender_numeric = 1 if gender == "Male" else 0 # Encode 'Male' as 1, 'Female' as 0
# Prepare the input as a NumPy array
input_data = np.array([[gender_numeric, age, hypertension, heart_disease, smoking_history, bmi, HbA1c, blood_glucose]])
# Scale the input data
input_scaled = scaler.transform(input_data) # Ensure all values are numeric
# Make prediction
prediction = model.predict(input_scaled)
return "Diabetes Positive" if prediction[0] == 1 else "Diabetes Negative"
# Define UI with Gradio
iface = gr.Interface(
fn=predict_diabetes,
inputs=[
gr.Radio(["Male", "Female"], label="Gender"),
gr.Number(label="Age"),
gr.Radio([0, 1], label="Hypertension (0: No, 1: Yes)"),
gr.Radio([0, 1], label="Heart Disease (0: No, 1: Yes)"),
gr.Dropdown([0, 1, 2, 3, 4, 5], label="Smoking History (Encoded)"),
gr.Number(label="BMI"),
gr.Number(label="HbA1c Level"),
gr.Number(label="Blood Glucose Level")
],
outputs=gr.Textbox(label="Diabetes Prediction"),
title="Diabetes Risk Prediction",
description="Enter the patient's details to predict diabetes risk."
)
# Launch App
if __name__ == "__main__":
iface.launch()