Spaces:
Sleeping
Sleeping
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() |