Travel_Recommendation_System / journeygenius.py
Harsh1306's picture
Upload 4 files
5840396 verified
# -*- coding: utf-8 -*-
"""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
# Load the dataset
file_path = '/content/ML_proj_dataset_updated (1).csv'
df = pd.read_csv(file_path)
# Extract relevant columns in the order to be returned
relevant_columns = [
'Primary',
'per_person_price',
'Topography',
'Temprature',
'Weather',
'Mood',
'package_name',
'itinerary',
'sightseeing_places_covered'
]
df_relevant = df[relevant_columns].dropna()
# Preprocess data
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)
# Encode data
model = SentenceTransformer('all-MiniLM-L6-v2')
df_relevant['embedding'] = df_relevant['description'].apply(lambda x: model.encode(x, convert_to_tensor=True))
# Save embeddings to file
df_relevant.to_pickle('/content/df_with_embeddings.pkl')
import pandas as pd
from sentence_transformers import SentenceTransformer, util
# Load precomputed embeddings
df_with_embeddings = pd.read_pickle('/content/df_with_embeddings.pkl')
# User input function
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() # Recursively ask for input again
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
# Encode user input
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)
# Recommend destinations
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())
# Sort by similarity and drop duplicates based on 'Primary' column
recommendations = df.sort_values(by='similarity', ascending=False).drop_duplicates(subset='Primary').head(5)
return recommendations[['Primary', 'per_person_price', 'Topography', 'Temprature', 'Weather', 'Mood']]
# Display selected package details
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.")
# Main function to run the recommendation system
def main():
user_input = get_user_input()
recommendations = recommend_destinations(user_input, df_with_embeddings)
print("Top recommended destinations for you:")
print(recommendations)
# Let the user select a recommendation
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)
# Run the main function
if __name__ == "__main__":
main()
if __name__ == "__main__":
main()