| import pandas as pd |
| import random |
| from sklearn.model_selection import train_test_split |
| from sklearn.preprocessing import LabelEncoder |
| from sklearn.tree import DecisionTreeRegressor |
| import gradio as gr |
|
|
| |
| |
| |
| sleeping_pattern = ['early_bird', 'night_owl'] |
| food_preference = ['veg', 'non_veg', 'vegan'] |
| cleanliness = ['low', 'medium', 'high'] |
| smoking = ['yes', 'no'] |
| pet_friendly = ['yes', 'no'] |
| personality = ['introvert', 'extrovert'] |
| work_mode = ['wfh', 'office'] |
| music_preference = ['loud', 'soft', 'quiet'] |
| alcohol = ['yes', 'no', 'occasionally'] |
| guests = ['yes', 'no'] |
| education = ['high_school', 'bachelor', 'master', 'phd'] |
| states = ['Karnataka', 'Tamil Nadu', 'Kerala', 'Maharashtra', 'Delhi'] |
| languages = ['English', 'Hindi', 'Kannada', 'Tamil', 'Telugu'] |
| hobbies = ['reading', 'gaming', 'sports', 'music', 'cooking'] |
| duration_options = [6, 12, 18, 24, 36] |
|
|
| |
| |
| |
| data = [] |
| for _ in range(300): |
| row = { |
| 'sleeping_pattern': random.choice(sleeping_pattern), |
| 'food_preference': random.choice(food_preference), |
| 'cleanliness': random.choice(cleanliness), |
| 'smoking': random.choice(smoking), |
| 'pet_friendly': random.choice(pet_friendly), |
| 'personality': random.choice(personality), |
| 'work_mode': random.choice(work_mode), |
| 'music_preference': random.choice(music_preference), |
| 'alcohol': random.choice(alcohol), |
| 'guests_frequently': random.choice(guests), |
| 'education': random.choice(education), |
| 'duration_of_stay': random.choice(duration_options), |
| 'state': random.choice(states), |
| 'language': random.choice(languages), |
| 'hobby': random.choice(hobbies), |
| 'compatibility_score': random.randint(50, 100) |
| } |
| data.append(row) |
|
|
| df = pd.DataFrame(data) |
|
|
| |
| |
| |
| label_encoders = {} |
| for column in df.columns: |
| if df[column].dtype == "object": |
| le = LabelEncoder() |
| df[column] = le.fit_transform(df[column]) |
| label_encoders[column] = le |
|
|
| X = df.drop("compatibility_score", axis=1) |
| y = df["compatibility_score"] |
| X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) |
|
|
| model = DecisionTreeRegressor(random_state=42) |
| model.fit(X_train, y_train) |
|
|
| |
| |
| |
| roommates = [] |
| for _ in range(10): |
| roommates.append({ |
| 'sleeping_pattern': random.choice(sleeping_pattern), |
| 'food_preference': random.choice(food_preference), |
| 'cleanliness': random.choice(cleanliness), |
| 'smoking': random.choice(smoking), |
| 'pet_friendly': random.choice(pet_friendly), |
| 'personality': random.choice(personality), |
| 'work_mode': random.choice(work_mode), |
| 'music_preference': random.choice(music_preference), |
| 'alcohol': random.choice(alcohol), |
| 'guests_frequently': random.choice(guests), |
| 'education': random.choice(education), |
| 'duration_of_stay': random.choice(duration_options), |
| 'state': random.choice(states), |
| 'language': random.choice(languages), |
| 'hobby': random.choice(hobbies), |
| }) |
|
|
| |
| |
| |
| def predict_compatibility(sleeping_pattern, food_preference, cleanliness, smoking, pet_friendly, |
| personality, work_mode, music_preference, alcohol, guests_frequently, |
| education, duration_of_stay, state, language, hobby): |
|
|
| inputs = [ |
| label_encoders['sleeping_pattern'].transform([sleeping_pattern])[0], |
| label_encoders['food_preference'].transform([food_preference])[0], |
| label_encoders['cleanliness'].transform([cleanliness])[0], |
| label_encoders['smoking'].transform([smoking])[0], |
| label_encoders['pet_friendly'].transform([pet_friendly])[0], |
| label_encoders['personality'].transform([personality])[0], |
| label_encoders['work_mode'].transform([work_mode])[0], |
| label_encoders['music_preference'].transform([music_preference])[0], |
| label_encoders['alcohol'].transform([alcohol])[0], |
| label_encoders['guests_frequently'].transform([guests_frequently])[0], |
| label_encoders['education'].transform([education])[0], |
| int(duration_of_stay), |
| label_encoders['state'].transform([state])[0], |
| label_encoders['language'].transform([language])[0], |
| label_encoders['hobby'].transform([hobby])[0], |
| ] |
|
|
| prediction = model.predict([inputs])[0] |
|
|
| |
| best_match = None |
| highest_score = -1 |
| for roommate in roommates: |
| roommate_encoded = [ |
| label_encoders['sleeping_pattern'].transform([roommate['sleeping_pattern']])[0], |
| label_encoders['food_preference'].transform([roommate['food_preference']])[0], |
| label_encoders['cleanliness'].transform([roommate['cleanliness']])[0], |
| label_encoders['smoking'].transform([roommate['smoking']])[0], |
| label_encoders['pet_friendly'].transform([roommate['pet_friendly']])[0], |
| label_encoders['personality'].transform([roommate['personality']])[0], |
| label_encoders['work_mode'].transform([roommate['work_mode']])[0], |
| label_encoders['music_preference'].transform([roommate['music_preference']])[0], |
| label_encoders['alcohol'].transform([roommate['alcohol']])[0], |
| label_encoders['guests_frequently'].transform([roommate['guests_frequently']])[0], |
| label_encoders['education'].transform([roommate['education']])[0], |
| roommate['duration_of_stay'], |
| label_encoders['state'].transform([roommate['state']])[0], |
| label_encoders['language'].transform([roommate['language']])[0], |
| label_encoders['hobby'].transform([roommate['hobby']])[0], |
| ] |
| score = 100 - sum(abs(a - b) for a, b in zip(inputs, roommate_encoded)) |
| if score > highest_score: |
| highest_score = score |
| best_match = roommate |
|
|
| return f"π― Predicted Score: {round(prediction)} / 100\nπ Best Roommate Match: {best_match['personality'].capitalize()} from {best_match['state']} with similar habits!" |
|
|
| |
| |
| |
| with gr.Blocks(title="Roommate Compatibility Predictor", theme="soft") as interface: |
| gr.Markdown("## π§βπ€βπ§ Roommate Compatibility Predictor") |
| gr.Markdown("Enter your preferences and background info to see how compatible you are with potential roommates! π―") |
|
|
| with gr.Row(): |
| with gr.Column(): |
| gr.Markdown("### π― Personal Preferences") |
| sp = gr.Dropdown(sleeping_pattern, label="π Sleeping Pattern") |
| fp = gr.Dropdown(food_preference, label="π½οΈ Food Preference") |
| cl = gr.Dropdown(cleanliness, label="π§Ό Cleanliness Level") |
| sm = gr.Dropdown(smoking, label="π¬ Smoking") |
| pf = gr.Dropdown(pet_friendly, label="πΆ Pet Friendly") |
| ps = gr.Dropdown(personality, label="π§ Personality") |
|
|
| with gr.Column(): |
| gr.Markdown("### πΉ Lifestyle Choices") |
| wm = gr.Dropdown(work_mode, label="π» Work Mode") |
| mp = gr.Dropdown(music_preference, label="π΅ Music Preference") |
| al = gr.Dropdown(alcohol, label="π· Alcohol Consumption") |
| gf = gr.Dropdown(guests, label="π Guests Frequently") |
|
|
| with gr.Row(): |
| with gr.Column(): |
| gr.Markdown("### π Background Information") |
| ed = gr.Dropdown(education, label="π Education") |
| ds = gr.Number(label="π Duration of Stay (in months)") |
| st = gr.Dropdown(states, label="π State") |
| lg = gr.Dropdown(languages, label="π£οΈ Language") |
| hb = gr.Dropdown(hobbies, label="π― Hobby/Interest") |
|
|
| submit_btn = gr.Button("π Predict Compatibility") |
| output = gr.Textbox(label="Result", lines=3) |
|
|
| submit_btn.click( |
| fn=predict_compatibility, |
| inputs=[sp, fp, cl, sm, pf, ps, wm, mp, al, gf, ed, ds, st, lg, hb], |
| outputs=output |
| ) |
|
|
| interface.launch() |
|
|