sivakornchong's picture
add code to calculate df
7c9d88c
raw
history blame contribute delete
No virus
2.89 kB
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)