| |
| """JourneyGenius.ipynb |
| |
| Automatically generated by Colab. |
| |
| Original file is located at |
| https://colab.research.google.com/drive/1TX_o_0MEaHKPF8J0-L3FEqfqawGLP30J |
| """ |
|
|
| !pip install sentence-transformers |
| from sentence_transformers import SentenceTransformer, util |
|
|
| import ast |
| import pandas as pd |
| import seaborn as sns |
| !pip install geopy |
| !pip install streamlit |
|
|
| import pandas as pd |
| from sentence_transformers import SentenceTransformer |
|
|
| |
| file_path = '/content/ML_proj_dataset_updated (1).csv' |
| df = pd.read_csv(file_path) |
|
|
| |
| relevant_columns = [ |
| 'Primary', |
| 'per_person_price', |
| 'Topography', |
| 'Temprature', |
| 'Weather', |
| 'Mood', |
| 'package_name', |
| 'itinerary', |
| 'sightseeing_places_covered' |
| ] |
| df_relevant = df[relevant_columns].dropna() |
|
|
| |
| def preprocess_data(df): |
| df['description'] = df.apply(lambda row: f"{row['Primary']} {row['Topography']} {row['Temprature']} {row['Weather']} {row['Mood']} {row['per_person_price']}", axis=1) |
| return df |
|
|
| df_relevant = preprocess_data(df_relevant) |
|
|
| |
| model = SentenceTransformer('all-MiniLM-L6-v2') |
| df_relevant['embedding'] = df_relevant['description'].apply(lambda x: model.encode(x, convert_to_tensor=True)) |
|
|
| |
| df_relevant.to_pickle('/content/df_with_embeddings.pkl') |
|
|
| import pandas as pd |
| from sentence_transformers import SentenceTransformer, util |
|
|
| |
| df_with_embeddings = pd.read_pickle('/content/df_with_embeddings.pkl') |
|
|
| |
| def get_user_input(): |
| companions = input("Who are you traveling with (solo, couple, family): ").strip().lower() |
|
|
| if companions == "solo": |
| num_people = 1 |
| elif companions == "couple": |
| num_people = 2 |
| elif companions == "family": |
| num_people = int(input("Enter the number of people: ")) |
| else: |
| print("Invalid input for companions. Please enter 'solo', 'couple', or 'family'.") |
| return get_user_input() |
|
|
| budget = float(input("Enter your budget per person: ")) |
| days_of_lodging = int(input("Enter the number of days of lodging: ")) |
| preferred_weather = input("Enter preferred weather (Sunny, Rainy, Snowy): ").strip().capitalize() |
|
|
| return budget, num_people, companions, days_of_lodging, preferred_weather |
|
|
| |
| model = SentenceTransformer('all-MiniLM-L6-v2') |
|
|
| def encode_user_input(user_input): |
| user_description = f"budget {user_input[0]} companions {user_input[2]} days {user_input[3]} weather {user_input[4]}" |
| return model.encode(user_description, convert_to_tensor=True) |
|
|
| |
| def recommend_destinations(user_input, df): |
| user_embedding = encode_user_input(user_input) |
| df['similarity'] = df['embedding'].apply(lambda x: util.pytorch_cos_sim(user_embedding, x).item()) |
|
|
| |
| recommendations = df.sort_values(by='similarity', ascending=False).drop_duplicates(subset='Primary').head(5) |
|
|
| return recommendations[['Primary', 'per_person_price', 'Topography', 'Temprature', 'Weather', 'Mood']] |
|
|
| |
| def display_package_details(selection, df): |
| selected_row = df.loc[df['Primary'] == selection] |
| if not selected_row.empty: |
| print("\nSelected Package Details:") |
| print(f"Package Name: {selected_row['package_name'].values[0]}") |
| print(f"Itinerary: {selected_row['itinerary'].values[0]}") |
| print(f"Sightseeing Places Covered: {selected_row['sightseeing_places_covered'].values[0]}") |
| else: |
| print("Invalid selection. No package found.") |
|
|
| |
| def main(): |
| user_input = get_user_input() |
| recommendations = recommend_destinations(user_input, df_with_embeddings) |
| print("Top recommended destinations for you:") |
| print(recommendations) |
|
|
| |
| selected_primary = input("\nEnter the Primary name of the package you want to view details for: ").strip() |
| display_package_details(selected_primary, df_with_embeddings) |
|
|
| |
| if __name__ == "__main__": |
| main() |
|
|
| if __name__ == "__main__": |
| main() |
|
|
|
|