Skip to content

Commit

Permalink
Remove mobility from offline indicators
Browse files Browse the repository at this point in the history
  • Loading branch information
doorleyr committed Jul 14, 2020
1 parent f0b9329 commit 9145920
Showing 1 changed file with 68 additions and 54 deletions.
122 changes: 68 additions & 54 deletions corktown_offline_indicators.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,79 +6,69 @@
@author: doorleyr
"""

from toolbox import Handler, Indicator, CompositeIndicator
from toolbox import Indicator, CompositeIndicator
from proximity_indicator import ProxIndicator
from innovation_indicator import InnoIndicator
from mobility_indicator import MobilityIndicator
from aggregate_indicator import AggregateIndicator
from economic_indicator import EconomicIndicator
from buildings_indicator import BuildingsIndicator
from diversity_indicator import DiversityIndicator

import urllib
import json
import pandas as pd



folder='../Scenarios/24_Jun_20/'


# =============================================================================
# Initialise Indicators
# =============================================================================
I = InnoIndicator()
P = ProxIndicator(name='proximity', indicator_type_in='numeric', table_name='corktown')
#P_hm = ProxIndicator(name='proximity_heatmap', indicator_type_in='heatmap', table_name='corktown')
M = MobilityIndicator(name='mobility', table_name='corktown')
B= BuildingsIndicator(name='buildings', table_name='corktown')
D= DiversityIndicator(name='diversity', table_name='corktown')

# 2nd order individual indicators
E = EconomicIndicator(name='Economic',
table_name='corktown')

#H = Handler('corktown', quietly=False)
#
#H.add_indicators([
# I,
# P,
## P_hm,
# M,
# E,
# B,
# D
# ])
# =============================================================================
# Load contextual data
# =============================================================================

geogrid=json.load(open('{}corktown_geogrid.geojson'.format(folder)))
cell_area=geogrid['properties']['header']['cellSize']**2

geogrid=json.load(open('../CS_Grid_Maker/examples/results/corktown_geogrid.geojson'))
updatable=[((feat['properties']['interactive'])or (feat['properties']['static_new'])
) for feat in geogrid['features']]

types=json.load(open('../CS_Grid_Maker/examples/type_definitions/corktown_types.json'))
types=json.load(open('{}corktown_types.json'.format(folder)))

static_types=json.load(open('../CS_Grid_Maker/examples/type_definitions/corktown_static_types.json'))
static_types=json.load(open('{}corktown_static_types.json'.format(folder)))

types.update(static_types)

reporting_types=[t for t in types if t not in ['None','Residential Low Density', 'Industrial']]

for ind in [I, P,
# P_hm,
M, B, D, E]:
B, D, E]:
ind.types_def=types
ind.geogrid_header=geogrid['properties']['header']

I.types_def



# =============================================================================
# Load the saved land use scenarios
# =============================================================================
geogrid_data_base=json.load(open('{}ford_base.json'.format(folder)))
geogrid_data_campus=json.load(open('{}ford_campus.json'.format(folder)))
geogrid_data_housing=json.load(open('{}ford_housing.json'.format(folder)))
geogrid_data_inno_com=json.load(open('{}ford_inno_com.json'.format(folder)))

cell_area=geogrid['properties']['header']['cellSize']**2

updatable=[((feat['properties']['interactive'])or (feat['properties']['static_new'])
) for feat in geogrid['features']]


# =============================================================================
# Define some functions to calculate indicators and land use stats for each scenario
# =============================================================================
def get_type_stats(geogrid_data, reporting_types, updatable,cell_area, types_def=types):
"""
calculates the square meters and capacity of each LU type added to the interactive area
"""
results={}
for type_name in reporting_types:
sqm_pp=types_def[type_name]['sqm_pperson']
Expand All @@ -95,11 +85,11 @@ def get_type_stats(geogrid_data, reporting_types, updatable,cell_area, types_def



def get_all_indicators(geogrid_data, future_mobility):
def get_all_indicators(geogrid_data):
"""
calculates values of all the individual indicators for a given scenario
"""
all_ind=[]
print('Mobility')
all_ind.extend(M.return_indicator(geogrid_data, future_mobility=future_mobility))

print('Innovation')
all_ind.extend(I.return_indicator(geogrid_data))

Expand All @@ -117,6 +107,10 @@ def get_all_indicators(geogrid_data, future_mobility):
return all_ind

def create_scenario_row(all_ind, stats, scenario_name):
"""
takes the indicators results, square meters and capacities for a given scenario
and creates a row of data for the output csv
"""
all_cols={'Scenario': scenario_name}
for ind in all_ind:
all_cols[ind['name']+' norm']=ind['value']
Expand All @@ -129,19 +123,23 @@ def create_scenario_row(all_ind, stats, scenario_name):
all_cols[type_name + ' capacity']=stats[type_name]['capacity']
return all_cols

base_indicators=get_all_indicators(geogrid_data_base, False)
# =============================================================================
# Calculate indicators and land use stats for each scenario
# =============================================================================

base_indicators=get_all_indicators(geogrid_data_base)
base_stats=get_type_stats(geogrid_data_base, reporting_types, updatable,cell_area)

campus_indicators=get_all_indicators(geogrid_data_campus, False)
campus_indicators=get_all_indicators(geogrid_data_campus)
campus_stats=get_type_stats(geogrid_data_campus, reporting_types, updatable,cell_area)

campus_mobility_indicators=get_all_indicators(geogrid_data_campus, True)
campus_mobility_indicators=get_all_indicators(geogrid_data_campus)
campus_mobility_stats=campus_stats

housing_indicators=get_all_indicators(geogrid_data_housing, False)
housing_indicators=get_all_indicators(geogrid_data_housing)
housing_stats=get_type_stats(geogrid_data_housing, reporting_types, updatable,cell_area)

inno_com_indicators=get_all_indicators(geogrid_data_inno_com, True)
inno_com_indicators=get_all_indicators(geogrid_data_inno_com)
inno_com_stats=get_type_stats(geogrid_data_inno_com, reporting_types, updatable,cell_area)

all_scenarios=[]
Expand All @@ -151,20 +149,36 @@ def create_scenario_row(all_ind, stats, scenario_name):
all_scenarios.append(create_scenario_row(housing_indicators, housing_stats, scenario_name='Housing'))
all_scenarios.append(create_scenario_row(inno_com_indicators, inno_com_stats, scenario_name='Innovation Community'))

output=pd.DataFrame(all_scenarios)


# =============================================================================
# Crea and calculate aggregated indicators
# =============================================================================

aggregation={
'Innovation Potential': ['Knowledge','Skills','R&D Funding'],
'Economic Performance': ['Average Salary','Productivity','Employment Density', 'Diversity Jobs'],
'Sustainable Buildings': ['Buildings Energy Performance'],
'Community Benefits': ['Access to housing', 'Access to education', 'Access to 3rd Places',
'Access to parks', 'Access to employment', 'Diversity Jobs',
'Diversity Third Places', 'Diversity Education']}
for comp_ind in aggregation:
cols=[ind_name +' norm' for ind_name in aggregation[comp_ind]]
output[comp_ind]=output[cols].mean(axis=1)

# =============================================================================
# Create and save output as csv file
# =============================================================================

col_order = ['Scenario']+[col for col in all_scenarios[0] if 'norm' in col]+[
col for col in all_scenarios[0] if 'raw' in col]
col for col in all_scenarios[0] if 'raw' in col]+ [
comp_ind for comp_ind in aggregation]

for type_name in reporting_types:
col_order.append(type_name + ' sqm')
col_order.append(type_name + ' capacity')
col_order.append(type_name + ' capacity')

output=pd.DataFrame(all_scenarios)
output=output[col_order]

output.to_csv('{}scenario_outputs.csv'.format(folder))

import requests
host='https://cityio.media.mit.edu/'
table_name='corktown'
cityIO_output_path=host+'api/table/update/'+table_name
r = requests.post(cityIO_output_path+'/GEOGRIDDATA', data = json.dumps(geogrid_data_inno_com))
print(r)
output.to_csv('{}scenario_outputs.csv'.format(folder))

0 comments on commit 9145920

Please sign in to comment.