AICOE-PR-BSK / app.py
billusanda007's picture
Update app.py
eb9cb8a verified
raw
history blame
3.15 kB
import gradio as gr
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics.pairwise import cosine_similarity
# Load data
citizen_data = pd.read_csv("citizen_data_5000.csv")
services_data = pd.read_csv("citizen_services_5000.csv")
# Merge on citizen_id
merged_data = pd.merge(citizen_data, services_data, on="citizen_id")
# Encode categorical columns
categorical_cols = ['gender', 'education_level', 'marital_status', 'social_category', 'occupation', 'district', 'block', 'village']
encoders = {}
for col in categorical_cols:
enc = LabelEncoder()
merged_data[col] = enc.fit_transform(merged_data[col])
encoders[col] = enc
# Feature columns for similarity
feature_cols = ['age', 'gender', 'education_level', 'marital_status', 'social_category',
'annual_income', 'occupation', 'district', 'block', 'village']
# Define function for recommendation
def recommend(age, gender, education, marital, social, income, occupation, district, block, village):
input_vector = pd.DataFrame([[
age,
encoders['gender'].transform([gender])[0],
encoders['education_level'].transform([education])[0],
encoders['marital_status'].transform([marital])[0],
encoders['social_category'].transform([social])[0],
income,
encoders['occupation'].transform([occupation])[0],
encoders['district'].transform([district])[0],
encoders['block'].transform([block])[0],
encoders['village'].transform([village])[0]
]], columns=feature_cols)
features_matrix = merged_data[feature_cols]
similarities = cosine_similarity(input_vector, features_matrix)[0]
merged_data['similarity'] = similarities
top_users = merged_data.sort_values(by='similarity', ascending=False).head(10)
service_cols = [col for col in services_data.columns if col != "citizen_id"]
recommended_services = top_users[service_cols].sum().sort_values(ascending=False).head(5)
return [f"{s} βœ…" for s in recommended_services.index]
# Gradio interface
iface = gr.Interface(
fn=recommend,
inputs=[
gr.Slider(18, 100, value=30, label="Age"),
gr.Dropdown(encoders['gender'].classes_.tolist(), label="Gender"),
gr.Dropdown(encoders['education_level'].classes_.tolist(), label="Education Level"),
gr.Dropdown(encoders['marital_status'].classes_.tolist(), label="Marital Status"),
gr.Dropdown(encoders['social_category'].classes_.tolist(), label="Social Category"),
gr.Slider(0, 2000000, value=300000, step=10000, label="Annual Income"),
gr.Dropdown(encoders['occupation'].classes_.tolist(), label="Occupation"),
gr.Dropdown(encoders['district'].classes_.tolist(), label="District"),
gr.Dropdown(encoders['block'].classes_.tolist(), label="Block"),
gr.Dropdown(encoders['village'].classes_.tolist(), label="Village"),
],
outputs=gr.List(label="Top 5 Recommended Services"),
title="🧠 Citizen Service Recommender",
description="Provide your details to get 5 recommended services based on citizen similarity"
)
iface.launch()