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