In [1]:
import numpy as np, pandas as pd, os
from synthicity.utils import misc
from drcog.models import elcm_simulation, hlcm_simulation, regression_model_simulation, dataset
dset = dataset.DRCOGDataset(os.path.join(misc.data_dir(),'drcog.h5'))
In [2]:
p = dset.fetch('parcels')
elcm_configuration = {'building_sqft_per_job_table':'building_sqft_per_job','scaling_factor':1.0}
b = dset.fetch('buildings',building_sqft_per_job_table=elcm_configuration['building_sqft_per_job_table'],bsqft_job_scaling=elcm_configuration['scaling_factor'])
b = b[['building_type_id','improvement_value','land_area','non_residential_sqft','parcel_id','residential_units','sqft_per_unit','stories','tax_exempt','year_built','bldg_sq_ft','unit_price_non_residential','unit_price_residential','building_sqft_per_job','non_residential_units','base_year_jobs','all_units']]
z = dset.fetch('zones')
pz = pd.merge(p.reset_index(),z,left_on='zone_id',right_index=True,how='left')
pz = pz.set_index('parcel_id')
bpz = pd.merge(b,pz,left_on='parcel_id',right_index=True)
In [6]:
pz = pz.set_index('parcel_id')
In [4]:
p[['prop_constrained']].to_csv('c://users//janowicz//desktop//prop_constrained.csv')
In [3]:
bpz
Out[3]:
In [1]:
import numpy as np, pandas as pd, os
from synthicity.utils import misc
from drcog.models import elcm_simulation, hlcm_simulation, regression_model_simulation, dataset
dset = dataset.DRCOGDataset(os.path.join(misc.data_dir(),'drcog.h5'))
np.random.seed(1)
#Variable Library
from drcog.variables import variable_library
variable_library.calculate_variables(dset)
establishments = dset.establishments
households = dset.households
households_for_estimation = dset.households_for_estimation
buildings = dset.buildings
sim_year = 2011
coeff_store_path = os.path.join(misc.data_dir(),'coeffs.h5')
coeff_store = pd.HDFStore(coeff_store_path)
dset.coeffs = coeff_store.coeffs.copy()
coeff_store.close()
hh_zone1 = dset.fetch('households').groupby('zone_id').size()
emp_zone1 = dset.fetch('establishments').groupby('zone_id').employees.sum()
In [12]:
buildings.head()
Out[12]:
In [4]:
dset.store.buildings[['residential_units',]]
Out[4]:
In [2]:
e = establishments.reset_index()
bids = []
eids = []
hbs = []
sids = []
for idx in e.index:
for job in range(e.employees[idx]):
bids.append(e.building_id[idx])
eids.append(e.index[idx])
hbs.append(e.home_based_status[idx])
sids.append(e.sector_id[idx])
print len(bids)
print len(eids)
print len(hbs)
print len(sids)
jobs = pd.DataFrame({'tempid':range(1,len(bids)+1),'building_id':bids,'establishment_id':eids,'home_based_status':hbs,'sector_id':sids})
In [3]:
jobs
Out[3]:
In [4]:
buildings[['residential_units','centroid_x','centroid_y','external_zone_id']]
Out[4]:
In [5]:
np.unique(buildings.external_zone_id)
Out[5]:
In [13]:
jobs['x'] = buildings.centroid_x[jobs.building_id].values
jobs['y'] = buildings.centroid_y[jobs.building_id].values
jobs['taz05_id'] = buildings.external_zone_id[jobs.building_id].values
jobs['sector_id_six'] = 1*(jobs.sector_id==61) + 2*(jobs.sector_id==71) + 3*np.in1d(jobs.sector_id,[11,21,22,23,31,32,33,42,48,49]) + 4*np.in1d(jobs.sector_id,[7221,7222,7224]) + 5*np.in1d(jobs.sector_id,[44,45,7211,7212,7213,7223]) + 6*np.in1d(jobs.sector_id,[51,52,53,54,55,56,62,81,92])
jobs['jobtypename'] = ''
jobs.jobtypename[jobs.sector_id_six==1] = 'Education'
jobs.jobtypename[jobs.sector_id_six==2] = 'Entertainment'
jobs.jobtypename[jobs.sector_id_six==3] = 'Production'
jobs.jobtypename[jobs.sector_id_six==4] = 'Restaurant'
jobs.jobtypename[jobs.sector_id_six==5] = 'Retail'
jobs.jobtypename[jobs.sector_id_six==6] = 'Service'
jobs['urbancenter_id'] = 0
In [5]:
np.unique(dset.zones['external_zone_id'].values)
Out[5]:
In [14]:
jobs.tail()
Out[14]:
In [10]:
jobs[jobs.building_id==-1]
Out[10]:
In [32]:
establishments[establishments.building_id==-1]
Out[32]:
In [2]:
alternatives = buildings[(buildings.residential_units>0)]
hlcm_simulation.simulate(dset, year=sim_year,
depvar = 'building_id',alternatives=alternatives,simulation_table = 'households',output_names = ("drcog-coeff-hlcm-%s.csv","DRCOG HOUSEHOLD LOCATION CHOICE MODELS (%s)","hh_location_%s","household_building_ids"),
agents_groupby= ['income_3_tenure',],
transition_config = {'Enabled':True,'control_totals_table':'annual_household_control_totals','scaling_factor':1.0},
relocation_config = {'Enabled':True,'relocation_rates_table':'annual_household_relocation_rates','scaling_factor':1.0},
)
In [3]:
alternatives = buildings[(buildings.non_residential_sqft>0)]
elcm_simulation.simulate(dset, year=sim_year,
depvar = 'building_id',alternatives=alternatives,simulation_table = 'establishments',output_names = ("drcog-coeff-elcm-%s.csv","DRCOG EMPLOYMENT LOCATION CHOICE MODELS (%s)","emp_location_%s","establishment_building_ids"),
agents_groupby= ['sector_id_retail_agg',],
transition_config = {'Enabled':True,'control_totals_table':'annual_employment_control_totals','scaling_factor':1.0})
In [4]:
regression_model_simulation.simulate(dset, year=sim_year, output_varname='unit_price_residential',
simulation_table='buildings', output_names = ["drcog-coeff-reshedonic-%s.csv","DRCOG RESHEDONIC MODEL (%s)","resprice_%s"],
agents_groupby = 'building_type_id', segment_ids = [2,3,20,24])
In [5]:
regression_model_simulation.simulate(dset, year=sim_year,
output_varname='unit_price_non_residential', simulation_table='buildings', output_names = ["drcog-coeff-nrhedonic-%s.csv","DRCOG NRHEDONIC MODEL (%s)","nrprice_%s"],
agents_groupby = 'building_type_id', segment_ids = [5,8,11,16,17,18,21,23,9,22])
In [6]:
developer_configuration = {
'enforce_environmental_constraints':True,
'enforce_allowable_use_constraints':True,
'enforce_ugb':False,
'outside_ugb_allowable_density':1.0,
'uga_policies':False,
'inside_uga_allowable_density':1.0,
'max_allowable_far_field_name':'far',
'land_property_acquisition_cost_factor':1.0,
'profit_factor':1.0,
'min_building_sqft':400,
'min_lot_sqft':500,
'zonal_levers':True
}
from urbandeveloper import proforma_developer_model
buildings, newbuildings = proforma_developer_model.run(dset,hh_zone1,emp_zone1,developer_configuration,sim_year)
dset.d['buildings'] = pd.concat([buildings,newbuildings])
In [7]:
# sim_year = 2015
# urbancanvas_scenario_id = 0
# def export_to_urbancanvas(building_df,current_year,urbancanvas_scenario_id):
# import pandas.io.sql as sql
# import psycopg2
# import cStringIO
# conn_string = "host='paris.urbansim.org' dbname='denver' user='drcog' password='M0untains#' port=5433"
# conn=psycopg2.connect(conn_string)
# cur = conn.cursor()
# if urbancanvas_scenario_id == 0:
# query = "select nextval('developmentproject_id_seq');"
# nextval = sql.read_frame(query,conn)
# nextval = nextval.values[0][0]
# query = "select max(id)+1 from scenario_project;"
# id = sql.read_frame(query,conn)
# id = id.values[0][0]
# query = "INSERT INTO scenario(id, name) VALUES(%s, 'Run #%s');" % (nextval,nextval)
# cur.execute(query)
# conn.commit()
# query = "INSERT INTO scenario_project(id, scenario, project) VALUES(%s, %s, 1);" % (id,nextval)
# cur.execute(query)
# conn.commit()
# query = "select max(id)+1 from scenario_project;"
# id = sql.read_frame(query,conn)
# id = id.values[0][0]
# query = "INSERT INTO scenario_project(id, scenario, project) VALUES(%s, %s, %s);" % (id,nextval,nextval)
# cur.execute(query)
# conn.commit()
# else:
# nextval = urbancanvas_scenario_id
# nextval_string = '{' + str(nextval) + '}'
# building_df['projects'] = nextval_string
# valid_from = '{' + str(current_year) + '-1-1}'
# building_df['valid_from'] = valid_from
# building_df['land_area'] = 0
# building_df['tax_exempt'] = 0
# building_df['srcparc_id'] = '0'
# building_df['building_id'] = building_df.index.values
# building_df['stories'] = 30 ###For testing!
# del building_df['unit_price_residential']
# del building_df['unit_price_non_residential']
# del building_df['building_sqft_per_job']
# del building_df['base_year_jobs']
# del building_df['non_residential_units']
# del building_df['all_units']
# print 'Exporting %s buildings to Urbancanvas database for project %s and year %s.' % (building_df.index.size,nextval,current_year)
# output = cStringIO.StringIO()
# building_df.to_csv(output, sep='\t', header=False, index=False)
# output.seek(0)
# cur.copy_from(output, 'building_footprints', columns =tuple(building_df.columns.values.tolist()))
# conn.commit()
# return nextval
# nv = export_to_urbancanvas(newbuildings, sim_year, urbancanvas_scenario_id)
In [8]:
urbancanvas_scenario_id = 0
from drcog.variables import urbancanvas_export
nv = urbancanvas_export.export_to_urbancanvas(newbuildings, sim_year, urbancanvas_scenario_id)
In [9]:
nv
Out[9]: