Spaces:
Running
Running
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) |