| import pandas as pd | |
| from pandas import DataFrame | |
| from typing import Optional | |
| from annotation.src.utils import extract_before_parenthesis | |
| class Accommodations: | |
| def __init__(self, path="/home/user/app/database/accommodations/clean_accommodations_2022.csv"): | |
| self.path = path | |
| self.data = pd.read_csv(self.path).dropna()[['NAME','price','room type', 'house_rules', 'minimum nights', 'maximum occupancy', 'review rate number', 'city']] | |
| print("Accommodations loaded.") | |
| def load_db(self): | |
| self.data = pd.read_csv(self.path).dropna() | |
| def run(self, | |
| city: str, | |
| ) -> DataFrame: | |
| """Search for accommodations by city.""" | |
| results = self.data[self.data["city"] == city] | |
| # results = results[results["date"] == date] | |
| # if order == "ascPrice": | |
| # results = results.sort_values(by=["price"], ascending=True) | |
| # elif order == "descPrice": | |
| # results = results.sort_values(by=["price"], ascending=False) | |
| # elif order == "ascRate": | |
| # results = results.sort_values(by=["review rate number"], ascending=True) | |
| # elif order == "descRate": | |
| # results = results.sort_values(by=["review rate number"], ascending=False) | |
| # elif order == "ascMinumNights": | |
| # results = results.sort_values(by=["minimum nights"], ascending=True) | |
| # elif order == "descMinumNights": | |
| # results = results.sort_values(by=["minimum nights"], ascending=False) | |
| # elif order == "ascMaximumOccupancy": | |
| # results = results.sort_values(by=["maximum occupancy"], ascending=True) | |
| # elif order == "descMaximumOccupancy": | |
| # results = results.sort_values(by=["maximum occupancy"], ascending=False) | |
| # if room_type == "all": | |
| # return results | |
| # elif room_type == "Entire home/apt": | |
| # return results[results["room type"]=="Entire home/apt"] | |
| # elif room_type == "Hotel room": | |
| # return results[results["room type"]=="Hotel room"] | |
| # elif room_type == "Private room": | |
| # return results[results["room type"]=="Private room"] | |
| # elif room_type == "Shared room": | |
| # return results[results["room type"]=="Shared room"] | |
| # else: | |
| # return None | |
| if len(results) == 0: | |
| return "There is no attraction in this city." | |
| return results | |
| def run_for_annotation(self, | |
| city: str, | |
| ) -> DataFrame: | |
| """Search for accommodations by city.""" | |
| results = self.data[self.data["city"] == extract_before_parenthesis(city)] | |
| # results = results[results["date"] == date] | |
| # if order == "ascPrice": | |
| # results = results.sort_values(by=["price"], ascending=True) | |
| # elif order == "descPrice": | |
| # results = results.sort_values(by=["price"], ascending=False) | |
| # elif order == "ascRate": | |
| # results = results.sort_values(by=["review rate number"], ascending=True) | |
| # elif order == "descRate": | |
| # results = results.sort_values(by=["review rate number"], ascending=False) | |
| # elif order == "ascMinumNights": | |
| # results = results.sort_values(by=["minimum nights"], ascending=True) | |
| # elif order == "descMinumNights": | |
| # results = results.sort_values(by=["minimum nights"], ascending=False) | |
| # elif order == "ascMaximumOccupancy": | |
| # results = results.sort_values(by=["maximum occupancy"], ascending=True) | |
| # elif order == "descMaximumOccupancy": | |
| # results = results.sort_values(by=["maximum occupancy"], ascending=False) | |
| # if room_type == "all": | |
| # return results | |
| # elif room_type == "Entire home/apt": | |
| # return results[results["room type"]=="Entire home/apt"] | |
| # elif room_type == "Hotel room": | |
| # return results[results["room type"]=="Hotel room"] | |
| # elif room_type == "Private room": | |
| # return results[results["room type"]=="Private room"] | |
| # elif room_type == "Shared room": | |
| # return results[results["room type"]=="Shared room"] | |
| # else: | |
| # return None | |
| return results |