hongaik's picture
initial commit
fdf95c5
raw
history blame
3.17 kB
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!')