import pandas as pd import geopandas as gpd from shapely.geometry import Point, LineString import pickle import requests # Load geospatial data expressway = gpd.read_file('data/expressway.shp') expressway.to_crs(epsg=3857, inplace=True) geosubset = gpd.read_file('data/geosubset.shp') geosubset.to_crs(epsg=3857, inplace=True) geosubset['storey'] = geosubset['storey'].astype(int) geosubset['floor_area'] = geosubset['floor_area'].astype(float) geosubset['age_asof_t'] = geosubset['age_asof_t'].astype(int) geosubset['transactDa'] = pd.to_datetime(geosubset['transactDa']) mrt_raw = pd.read_csv('data/mrt.csv') geo_mrt = gpd.GeoDataFrame(mrt_raw, crs="EPSG:4326", geometry=[Point(xy) for xy in zip(mrt_raw['long'], mrt_raw['lat'])]) geo_mrt.to_crs(epsg=3857, inplace=True) mall_df = pd.read_csv('data/mall.csv') geo_mall = gpd.GeoDataFrame(mall_df, crs="EPSG:4326", geometry=[Point(xy) for xy in zip(mall_df['long'], mall_df['lat'])]) geo_mall.to_crs(epsg=3857, inplace=True) pri_sch_raw = pd.read_csv('data/pri_sch_latlong.csv') geo_pri = gpd.GeoDataFrame(pri_sch_raw, crs="EPSG:4326", geometry=[Point(xy) for xy in zip(pri_sch_raw['long'], pri_sch_raw['lat'])]) geo_pri.to_crs(epsg=3857, inplace=True) sec_sec_raw = pd.read_csv('data/sec_sch_latlong.csv') geo_sec = gpd.GeoDataFrame(sec_sec_raw, crs="EPSG:4326", geometry=[Point(xy) for xy in zip(sec_sec_raw['long'], sec_sec_raw['lat'])]) geo_sec.to_crs(epsg=3857, inplace=True) postal = pd.read_csv('data/district.csv') postal_melt = pd.DataFrame(postal['2dpostal'].str.split(",").to_list(), index=postal.district).stack().reset_index()[['district', 0]] postal_final = postal_melt.merge(postal, how='left', on='district').drop(columns=['2dpostal']) postal_final.columns = ['district', '2dpostal', 'town'] postal_final['2dpostal'] = postal_final['2dpostal'].astype(str).str.strip() # Load models xgb = pickle.load(open('model/xgb_final.sav', "rb")) enc = pickle.load(open('model/encoder.sav', "rb")) # Load CIs sd_hdb = 34.88572450193993 sd_condo = 112.3696357113714 sd_ec = 66.34935799217807 sd_apt = 137.16498181900047 # test one map api here def test_postal(location): searchQuery = "https://developers.onemap.sg/commonapi/search?searchVal=" + location + "&returnGeom=Y&getAddrDetails=Y" response = requests.get(searchQuery) try: result = response.json()['results'][0] latitude = result['LATITUDE'] longitude = result['LONGITUDE'] return [result['SEARCHVAL'], result['ADDRESS'], float(latitude), float(longitude)] except: return 'INVALID LOCATION' # Actual predictions def getSVY21(location): searchQuery = "https://developers.onemap.sg/commonapi/search?searchVal=" + location + "&returnGeom=Y&getAddrDetails=Y" response = requests.get(searchQuery) try: result = response.json()['results'][0] latitude = result['LATITUDE'] longitude = result['LONGITUDE'] return float(latitude), float(longitude) except: return 'INVALID LOCATION' print('utils imported!')