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() |