|
import json |
|
import requests |
|
from misc import nearest_mrt |
|
import pickle |
|
import os |
|
import pandas as pd |
|
import datetime |
|
from datetime import datetime |
|
|
|
def main_fn(Postal_,age_,town_,storey_,room_): |
|
|
|
filename = 'finalized_model2.sav' |
|
if os.path.exists("./finalized_model2.sav"): |
|
model = pickle.load(open(filename, 'rb')) |
|
print('loaded model') |
|
else: |
|
print('failed loading model') |
|
|
|
|
|
feature_names = model.feature_names_in_.tolist() |
|
input = [0]*len(feature_names) |
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
|
|
|
Postal_input = int(Postal_) |
|
|
|
input[feature_names.index('Postal')] = Postal_input |
|
|
|
|
|
search_term = Postal_ |
|
query_string= 'https://www.onemap.gov.sg/api/common/elastic/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] |
|
|
|
|
|
distance_km, nearest_mr = nearest_mrt(chosen_result['LATITUDE'], chosen_result['LONGITUDE'], mrt_name, mrt_loc) |
|
input[feature_names.index('distance_mrt')] = distance_km |
|
|
|
|
|
|
|
height_input = int(storey_) |
|
|
|
Height = (height_input+2)//3 |
|
input[feature_names.index('storey_height')] = Height |
|
|
|
|
|
input[feature_names.index("town")]=town_ |
|
|
|
|
|
input[feature_names.index("flat_num")]=room_ |
|
|
|
|
|
age_input = int(age_) |
|
|
|
|
|
|
|
current_date = datetime.now() |
|
|
|
input[feature_names.index('age_transation')] = age_input |
|
input[feature_names.index('transaction_yr')] = current_date.year |
|
|
|
|
|
Actual = dict(zip(feature_names,input)) |
|
Actual_df = pd.DataFrame(Actual, index=[0]) |
|
|
|
|
|
resale_adj_price = model.predict(Actual_df)[0] |
|
|
|
|
|
|
|
quarter = (current_date.month - 1) // 3 + 1 |
|
|
|
formatted_quarter = f"{quarter}Q{current_date.year}" |
|
RPI_pd = pd.read_csv('data/RPI_dict.csv', header=None) |
|
RPI_dict = dict(zip(RPI_pd[0], RPI_pd[1])) |
|
RPI = float(RPI_dict[formatted_quarter]) |
|
price = resale_adj_price*(RPI/133.9) |
|
|
|
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) |