import json import requests from misc import nearest_mrt import pickle import os import pandas as pd ###This is to create MRT names and MRT locations def main_fn(Postal_,age_,town_,storey_,room_): ##Input structure into model is## filename = 'finalized_model.sav' if os.path.exists("./finalized_model.sav"): model = pickle.load(open(filename, 'rb')) print('loaded model') else: print('failed loading model') #extract feature names# feature_names = model.feature_names input = [0]*len(feature_names) # print(feature_names) #Set up mrt_list mrt_name = [] mrt_loc = [] with open('data/mrt_list.json', 'r') as file: for line in file: item = json.loads(line) mrt_name.append(item['MRT']) loc = tuple([float(i) for i in item['location']]) mrt_loc.append(loc) #Query for latitude and longitude ##POSTAL Postal_input = int(Postal_) # Postal_input = 680705 input[feature_names.index('Postal')] = Postal_input ##DISTANCE TO MRT search_term = Postal_input query_string='https://developers.onemap.sg/commonapi/search?searchVal={}&returnGeom=Y&getAddrDetails=Y&pageNum=1'.format(search_term) resp = requests.get(query_string) data = json.loads(resp.content) print(query_string) print(data) chosen_result = data['results'][0] #Calculate the distance to nearest MRT distance_km, nearest_mr = nearest_mrt(chosen_result['LATITUDE'], chosen_result['LONGITUDE'], mrt_name, mrt_loc) input[feature_names.index('distance_mrt')] = distance_km ##STOREY #Height is input, but then converted to the scale we used for iterating model height_input = int(storey_) # height_input = 51 Height = (height_input+2)//3 input[feature_names.index('storey_height')] = Height ##TOWN town_input = town_ # town_input = 'CHOA CHU KANG' input[feature_names.index("town_"+town_input)] = 1 ##ROOM room_input = room_ # room_input = '4 ROOM' input[feature_names.index("flat_num_"+room_input)] = 1 ##AGE/ TRANSACTION YEAR [Current default to 2022] age_input = int(age_) # age_input = 30 input[feature_names.index('age_transation')] = age_input input[feature_names.index('transaction_yr')] = 2022 #Default to 2022 first #Create final_dataframe as input to model Actual = dict(zip(feature_names,input)) Actual_df = pd.DataFrame(Actual, index=[0]) resale_adj_price = model.predict(Actual_df)[0] #New resale index is set arbitrarily as 170 resale_index = 170 price = resale_adj_price*resale_index/133.9 print(Actual_df) return int(price) if __name__ == "__main__": Postal_,age_,town_,storey_,room_ = 680705, 30, 'CHOA CHU KANG', 12, '5 ROOM' price = main_fn(Postal_,age_,town_,storey_,room_) print(price)