Esempio n. 1
0
    def setUp(self):
        TestWithAttributeData.setUp(self)

        self.cross_scenario_source_data = SourceData(
            cache_directory=self.temp_cache_path,
            comparison_cache_directory=self.temp_cache_path2,
            years=[1980],
            dataset_pool_configuration=DatasetPoolConfiguration(
                package_order=['opus_core'], ))
        self.source_data = SourceData(
            cache_directory=self.temp_cache_path,
            years=[1980],
            dataset_pool_configuration=DatasetPoolConfiguration(
                package_order=['opus_core'], ))
def make_zone_dbfs(cache_directory):
    xmlconfig = XMLConfiguration(filename="sanfrancisco.xml",
                                 default_directory=r'C:\opus\project_configs',
                                 is_parent=False)
    runconfig = xmlconfig.get_run_configuration("sanfrancisco_baseline2009",
                                                merge_controllers=True)
    tm_config = runconfig['travel_model_configuration']
    print tm_config['urbansim_to_tm_variable_mapping']

    travel_model_years = []
    for key in tm_config.iterkeys():
        if isinstance(key, int) and tm_config[key].has_key('year_dir'):
            travel_model_years.append(key)
    travel_model_years.sort()

    zonedbfs_source_data = SourceData(
        cache_directory=cache_directory,
        run_description="Run description is used for what?",
        years=travel_model_years,
        dataset_pool_configuration=DatasetPoolConfiguration(
            package_order=['sanfrancisco', 'urbansim', 'opus_core'], ),
    )

    attrs = []
    for key, val in tm_config['urbansim_to_tm_variable_mapping'].iteritems():
        key = key.replace(".", "_")
        attrs.append("%s=%s" % (key, val))

    attrs.extend([\
      "pwac_bus=sanfrancisco.zone.bus_travel_time_weighted_access_by_population",
      "pwac_exp=sanfrancisco.zone.exp_travel_time_weighted_access_by_population",
      "pwac_lrt=sanfrancisco.zone.lrt_travel_time_weighted_access_by_population",
      "pwac_bart=sanfrancisco.zone.bart_travel_time_weighted_access_by_population",
      "pwac_hwy=sanfrancisco.zone.hwy_travel_time_weighted_access_by_population",
      "ewac_bus=sanfrancisco.zone.bus_travel_time_weighted_access_to_employment",
      "ewac_exp=sanfrancisco.zone.exp_travel_time_weighted_access_to_employment",
      "ewac_lrt=sanfrancisco.zone.lrt_travel_time_weighted_access_to_employment",
      "ewac_bart=sanfrancisco.zone.bart_travel_time_weighted_access_to_employment",
      "ewac_hwy=sanfrancisco.zone.hwy_travel_time_weighted_access_to_employment",
      "ttpw_bus=sanfrancisco.zone.bus_travel_time_to_751",
      "ttpw_exp=sanfrancisco.zone.exp_travel_time_to_751",
      "ttpw_lrt=sanfrancisco.zone.lrt_travel_time_to_751",
      "ttpw_bart=sanfrancisco.zone.bart_travel_time_to_751",
      "ttpw_hwy=sanfrancisco.zone.hwy_travel_time_to_751",
      "d2powell=sanfrancisco.zone.dist_travel_time_to_751"
    ])

    zonedbf_indicators = [
        DatasetTable(source_data=zonedbfs_source_data,
                     dataset_name='zone',
                     name='zone Indicators',
                     output_type='dbf',
                     attributes=attrs)
    ]

    IndicatorFactory().create_indicators(indicators=zonedbf_indicators,
                                         display_error_box=False,
                                         show_results=False)
 def setUp(self):
     TestWithAttributeData.setUp(self)
     self.i_results = IndicatorResults()
     self.i_results.indicator_documentation_mapping = {}
     self.source_data = SourceData(
         cache_directory=self.temp_cache_path,
         run_description='(opus_core)',
         dataset_pool_configuration=DatasetPoolConfiguration(
             package_order=['opus_core'], ))
Esempio n. 4
0
def get_end_year_indicators(cache_directory,
                            run_description,
                            years=[2017, 2050],
                            base_year=2014):
    source_data = SourceData(
        cache_directory=cache_directory,
        run_description=run_description,
        years=years,
        base_year=base_year,
        dataset_pool_configuration=DatasetPoolConfiguration(
            package_order=[
                'psrc_parcel', 'urbansim_parcel', 'psrc', 'urbansim',
                'opus_core'
            ],
            package_order_exceptions={},
        ),
    )

    indicators = [
        DatasetTable(
            source_data=source_data,
            dataset_name='building',
            name='new_buildings',
            attributes=[
                'building.building_type_id', 'building.parcel_id',
                'urbansim_parcel.building.unit_price',
                'urbansim_parcel.building.residential_units',
                'urbansim_parcel.building.non_residential_sqft',
                'urbansim_parcel.building.year_built', 'building.template_id',
                'urbansim_parcel.building.building_sqft'
            ],
            exclude_condition='building.year_built<2015',
        ),
        DatasetTable(
            source_data=source_data,
            dataset_name='parcel',
            name='households_jobs',
            attributes=[
                'parcel.county_id', 'parcel.minority_id', 'parcel.poverty_id',
                'households = urbansim_parcel.parcel.number_of_households',
                'urbansim_parcel.parcel.population',
                'urbansim_parcel.parcel.residential_units',
                'urbansim_parcel.parcel.employment',
                'non_home_based_employment = parcel.aggregate(psrc_parcel.building.number_of_non_home_based_jobs)',
                'non_residential_sqft = parcel.aggregate(building.non_residential_sqft)',
                'building_sqft = parcel.aggregate(urbansim_parcel.building.building_sqft)',
                'psrc_parcel.parcel.job_capacity', 'parcel.plan_type_id',
                'residential_units_base = parcel.aggregate(building.residential_units * (building.year_built < 2015))'
            ],
        ),
    ]
    return indicators
Esempio n. 5
0
    def _create_indicator(self, indicator_class, params, non_constructor_attributes, source_data_params):
        source_data = SourceData(**source_data_params)
        
        for k,v in params.items():
            if v=='None':
                params[k] = None
                
        params['source_data'] = source_data
        module = self._get_module_from_indicator_class(indicator_class)

        if indicator_class != 'DatasetTable':
            params['attribute'] = params['attributes'][0]
            del params['attributes']
                    
        exec('from opus_core.indicator_framework.image_types.%s import %s'%(module, indicator_class))
        indicator = locals()[indicator_class](**params)
        
        for attr, value in non_constructor_attributes.items():
            if value == 'None':
                value = None
            indicator.__setattr__(attr,value)
        return indicator 
Esempio n. 6
0
 def test_one_indicator(self):
     source_data = SourceData(
         cache_directory = self.temp_dir,
         run_description = 'test',
         years = [self.year],
         dataset_pool_configuration = DatasetPoolConfiguration(
             package_order=['psrc','urbansim','opus_core'],
             ),
         )       
             
     indicator_defs = [
         Table(
               attribute = 'psrc.large_area.average_land_value_for_plan_type_group_residential',
               dataset_name = 'large_area',
               source_data = source_data,
               ),
         ]
     
     IndicatorFactory().create_indicators(
         indicators = indicator_defs,
         display_error_box = False, 
         show_results = False)   
Esempio n. 7
0
    exit_after_export:
        Determines if ArcMap exits after its done exporting the 
        indicator. Will default to FalseOptional. Will default 
        to False.
    export_type:
        The output format of the outputted indicator from ArcMap.
        Optional. Will default to jpg
'''

#An example script:

source_data = SourceData(
    #cache_directory = r'D:\urbansim_cache\run_1090.2006_11_14_12_12',
    cache_directory=
    '/Users/hana/urbansim_cache/washtenaw/runs/run_3328.2007_08_01_19_36',
    #comparison_cache_directory = r'D:\urbansim_cache\run_1091.2006_11_14_12_12',
    years=[2006],
    dataset_pool_configuration=DatasetPoolConfiguration(
        package_order=['urbansim', 'opus_core'], ),
)

indicators = [
    Table(source_data=source_data,
          dataset_name='gridcell',
          attribute='urbansim.gridcell.number_of_households',
          output_type='tab'),
    Table(
        source_data=source_data,
        dataset_name='city',
        name='average_income',
        attribute=
    def create_travel_model_input_file(self, config, year, *args, **kwargs):
        """"""

        logger.start_block('Starting GetCacheDataIntoMatsim.run(...)')

        #        # When this is called for the first time, the 'matsim_flag' is not there.  Will be constructed here:
        #        if not 'matsim_flag' in persons.get_known_attribute_names():
        #            persons = SessionConfiguration().get_dataset_from_pool('person')
        #            persons_size = persons.size()
        #            sampling_rate = config['travel_model_configuration']['sampling_rate']
        #            matsim_flag = zeros(persons_size, dtype='int32')
        #            sampled_person_index = sample_noreplace( arange(persons_size),
        #                                                     int(sampling_rate * persons_size),
        #                                                     return_indices=True )
        #            matsim_flag[sampled_person_index] = 1
        #            persons.add_attribute(matsim_flag, 'matsim_flag', metadata=AttributeType.PRIMARY)
        #            persons.flush_attribute('matsim_flag')

        # I guess this is access to the full urbansim cache data.
        source_data = SourceData(
            cache_directory=config['cache_directory'],
            years=[year],
            dataset_pool_configuration=DatasetPoolConfiguration(package_order=[
                'psrc_parcel', 'urbansim_parcel', 'psrc', 'urbansim',
                'opus_core'
            ], ),
        )

        output_root = os.path.join(os.environ['OPUS_HOME'], "opus_matsim")
        if not os.path.exists(output_root):
            try:
                os.mkdir(output_root)
            except:
                pass

        output_directory = os.path.join(os.environ['OPUS_HOME'], "opus_matsim",
                                        "tmp")
        if not os.path.exists(output_directory):
            try:
                os.mkdir(output_directory)
            except:
                pass

        ### PERSONS
        export_indicators = [
            DatasetTable(
                attributes=[
                    'parcel_id_home = person.disaggregate(parcel.parcel_id, intermediates=[building,household])',
                    'parcel_id_work = person.disaggregate(parcel.parcel_id, intermediates=[building,job])',
                ],
                dataset_name='person',
                #                exclude_condition = 'person.matsim_flag==0',
                storage_location=output_directory,
                source_data=source_data,
                output_type='tab',
                name='exported_indicators',
            )
        ]
        # This is (I assume) executing the export
        IndicatorFactory().create_indicators(indicators=export_indicators,
                                             display_error_box=False,
                                             show_results=False)

        ### "FACILITIES"
        export_indicators = [
            DatasetTable(
                attributes=[
                    'parcel.x_coord_sp',
                    'parcel.y_coord_sp',
                    'parcel.zone_id',
                ],
                dataset_name='parcel',
                storage_location=output_directory,
                source_data=source_data,
                output_type='tab',
                name='exported_indicators',
            )
        ]
        IndicatorFactory().create_indicators(indicators=export_indicators,
                                             display_error_box=False,
                                             show_results=False)

        logger.end_block()
Esempio n. 9
0
from opus_core.indicator_framework.image_types.table import Table
from opus_core.indicator_framework.image_types.geotiff_map import GeotiffMap
from opus_core.indicator_framework.image_types.dataset_table import DatasetTable
from opus_core.indicator_framework.image_types.matplotlib_lorenzcurve import LorenzCurve
from opus_core.database_management.configurations.database_configuration import DatabaseConfiguration

run_description = '(baseline 11/26/2007)'
cache_directory = r'/urbansim_cache/psrc_parcel/run_5900.2008_04_02_12_40'

#run_description = '(no build 11/26/2007)'
#cache_directory = r'D:\urbansim_cache\run_4169.2007_11_21_00_12'

source_data = SourceData(
    cache_directory=cache_directory,
    run_description=run_description,
    years=[2002],  #range(2000, 2021, 10),
    dataset_pool_configuration=DatasetPoolConfiguration(package_order=[
        'psrc_parcel', 'urbansim_parcel', 'psrc', 'urbansim', 'opus_core'
    ], ),
)

indicators = [
    #    Table(
    #        attribute = 'population=large_area.aggregate(urbansim_parcel.building.population, intermediates=[parcel, zone, faz])',
    #        dataset_name = 'large_area',
    #        source_data = source_data,
    #        ),
    #    Table(
    #        attribute = 'employment=large_area.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel, zone, faz])',
    #        dataset_name = 'large_area',
    #        source_data = source_data,
    #        ),
Esempio n. 10
0
def get_indicators(cache_directory, run_description, years = [2015], base_year=2014):
    source_data = SourceData(
        cache_directory = cache_directory,
        run_description = run_description,
        years = years,
        base_year = base_year,
        dataset_pool_configuration = DatasetPoolConfiguration(
            package_order=['psrc_parcel','urbansim_parcel','psrc', 'urbansim','opus_core'],
            package_order_exceptions={},
            ),       
    )
    
    indicators=[
    
    # ## City indicators
    # ==================
    
       Table(
           attribute = 'max_dev_residential_capacity=city.aggregate(psrc_parcel.parcel.max_developable_residential_capacity)',
           dataset_name = 'city',
           source_data = source_data,
           ), 
       Table(
           attribute = 'max_dev_nonresidential_capacity=city.aggregate(psrc_parcel.parcel.max_developable_nonresidential_capacity)',
           dataset_name = 'city',
           source_data = source_data,
           ), 
       Table(
           attribute = 'max_dev_capacity=city.aggregate(psrc_parcel.parcel.max_developable_capacity)',
           dataset_name = 'city',
           source_data = source_data,
           ),
       #Table(
           #attribute = 'max_dev_residential_capacity=city.aggregate(parcel.aggregate(development_project_proposal.aggregate(urbansim_parcel.development_project_proposal_component.residential_units), function=maximum))',
           #dataset_name = 'city',
           #source_data = source_data,
           #), 
       #Table(
           #attribute = 'max_dev_nonresidential_capacity=city.aggregate(parcel.aggregate(urbansim_parcel.development_project_proposal.building_sqft_non_residential, function=maximum))',
           #dataset_name = 'city',
           #source_data = source_data,
           #), 
       #Table(
           #attribute = 'max_dev_capacity=city.aggregate(parcel.aggregate(urbansim_parcel.development_project_proposal.building_sqft, function=maximum))',
           #dataset_name = 'city',
           #source_data = source_data,
           #),    
       
       # ## FAZ indicators
       # ==================
       
       Table(
           attribute = 'max_dev_residential_capacity=faz.aggregate(psrc_parcel.parcel.max_developable_residential_capacity, intermediates=[zone])',
           dataset_name = 'faz',
           source_data = source_data,
           ),
       Table(
           attribute = 'max_dev_nonresidential_capacity=faz.aggregate(psrc_parcel.parcel.max_developable_nonresidential_capacity, intermediates=[zone])',
           dataset_name = 'faz',
           source_data = source_data,
           ),
       Table(
           attribute = 'max_dev_capacity=faz.aggregate(psrc_parcel.parcel.max_developable_capacity, intermediates=[zone])',
           dataset_name = 'faz',
           source_data = source_data,
           ),              
    
       #Table(
           #attribute = 'max_dev_residential_capacity=faz.aggregate(parcel.aggregate(development_project_proposal.aggregate(urbansim_parcel.development_project_proposal_component.residential_units), function=maximum), intermediates=[zone])',
           #dataset_name = 'faz',
           #source_data = source_data,
           #), 
       #Table(
           #attribute = 'max_dev_nonresidential_capacity=faz.aggregate(parcel.aggregate(urbansim_parcel.development_project_proposal.building_sqft_non_residential, function=maximum), intermediates=[zone])',
           #dataset_name = 'faz',
           #source_data = source_data,
           #), 
       #Table(
           #attribute = 'max_dev_capacity=faz.aggregate(parcel.aggregate(urbansim_parcel.development_project_proposal.building_sqft, function=maximum), intermediates=[zone])',
           #dataset_name = 'faz',
           #source_data = source_data,
           #),   
           
       # ## TAZ indicators                                                                                                                                     
       # ==================                                                                                                                                    

       #Table(
           #attribute = 'max_dev_residential_capacity=zone.aggregate(parcel.aggregate(development_project_proposal.aggregate(urbansim_parcel.development_project_proposal_component.residential_units), function=maximum))',
           #dataset_name = 'zone',
           #source_data = source_data,
           #),
       #Table(
           #attribute = 'max_dev_nonresidential_capacity=zone.aggregate(parcel.aggregate(urbansim_parcel.development_project_proposal.building_sqft_non_residential, function=maximum))',
           #dataset_name = 'zone',
           #source_data = source_data,
           #),
       #Table(
           #attribute = 'max_dev_capacity=zone.aggregate(parcel.aggregate(urbansim_parcel.development_project_proposal.building_sqft, function=maximum))',
           #dataset_name = 'zone',
           #source_data = source_data,
           #),
       Table(
           attribute = 'max_dev_residential_capacity=zone.aggregate(psrc_parcel.parcel.max_developable_residential_capacity)',
           dataset_name = 'zone',
           source_data = source_data,
           ),
       Table(
           attribute = 'max_dev_nonresidential_capacity=zone.aggregate(psrc_parcel.parcel.max_developable_nonresidential_capacity)',
           dataset_name = 'zone',
           source_data = source_data,
           ),
       Table(
           attribute = 'max_dev_capacity=zone.aggregate(psrc_parcel.parcel.max_developable_capacity)',
           dataset_name = 'zone',
           source_data = source_data,
           ), 
       
       # ## Growth centers indicators
       # ============================
   
       Table(
              attribute = 'max_dev_residential_capacity=growth_center.aggregate(psrc_parcel.parcel.max_developable_residential_capacity)',
              dataset_name = 'growth_center',
              source_data = source_data,
              ), 
       Table(
              attribute = 'max_dev_nonresidential_capacity=growth_center.aggregate(psrc_parcel.parcel.max_developable_nonresidential_capacity)',
              dataset_name = 'growth_center',
              source_data = source_data,
              ), 
       Table(
              attribute = 'max_dev_capacity=growth_center.aggregate(psrc_parcel.parcel.max_developable_capacity)',
              dataset_name = 'growth_center',
              source_data = source_data,
              ),       
    
    ]
    return indicators
Esempio n. 11
0
def get_indicators(cache_directory,
                   run_description,
                   years=[2014, 2017, 2050],
                   base_year=2014):

    source_data = SourceData(
        cache_directory=cache_directory,
        run_description=run_description,
        years=years,
        base_year=base_year,
        dataset_pool_configuration=DatasetPoolConfiguration(
            package_order=[
                'psrc_parcel', 'urbansim_parcel', 'psrc', 'urbansim',
                'opus_core'
            ],
            package_order_exceptions={},
        ),
    )

    indicators = [

        # # Minority - population, households, employment, and activity units
        Table(
            attribute=
            'population = minority.aggregate(urbansim_parcel.parcel.population, intermediates=[parcel])',
            dataset_name='minority',
            source_data=source_data,
        ),
        Table(
            attribute=
            'households = minority.aggregate(urbansim_parcel.parcel.number_of_households, intermediates=[parcel])',
            dataset_name='minority',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment = minority.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[parcel])',
            dataset_name='minority',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units = minority.aggregate(urbansim_parcel.parcel.population, intermediates=[parcel]) + minority.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[parcel])',
            dataset_name='minority',
            source_data=source_data,
        ),

        # ## Hex Level Indicators (minority_id = 2) -- for mapping
        Table(
            attribute=
            'minority_population = hex.aggregate(urbansim_parcel.parcel.population * (parcel.minority_id == 2))',
            dataset_name='hex',
            source_data=source_data,
        ),
        Table(
            attribute=
            'minority_households = hex.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.minority_id == 2))',
            dataset_name='hex',
            source_data=source_data,
        ),
        Table(
            attribute=
            'minority_employment = hex.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.minority_id == 2))',
            dataset_name='hex',
            source_data=source_data,
        ),
        Table(
            attribute=
            'minority_activity_units = hex.aggregate(urbansim_parcel.parcel.population, intermediates=[parcel]) + hex.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.minority_id == 2))',
            dataset_name='hex',
            source_data=source_data,
        ),

        # # # Minority Park/OS Buffer Indicators - #64
        Table(
            attribute=
            'population_park_buffer = minority.aggregate(urbansim_parcel.parcel.population * (parcel.park_buffer_id == 1) * (parcel.is_inside_urban_growth_boundary == 1))',
            dataset_name='minority',
            source_data=source_data,
        ),

        # Table(
        # attribute = 'households_park_buffer = minority.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.park_buffer_id == 1) * (parcel.is_inside_urban_growth_boundary == 1))',
        # dataset_name = 'minority',
        # source_data = source_data,
        # ),
        Table(
            attribute=
            'employment_park_buffer = minority.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.park_buffer_id == 1) * (parcel.is_inside_urban_growth_boundary == 1))',
            dataset_name='minority',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units_park_buffer = minority.aggregate((urbansim_parcel.parcel.population + urbansim_parcel.parcel.number_of_jobs) * (parcel.park_buffer_id == 1) * (parcel.is_inside_urban_growth_boundary == 1))',
            dataset_name='minority',
            source_data=source_data,
        ),

        # # # Minority Growth Amenities Buffer Indicators - #31
        Table(
            attribute=
            'population_growth_amenities = minority.aggregate(urbansim_parcel.parcel.population * (parcel.growth_amenities_id == 1))',
            dataset_name='minority',
            source_data=source_data,
        ),

        # Table(
        # attribute = 'households_growth_amenities = minority.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.growth_amenities_id == 1))',
        # dataset_name = 'minority',
        # source_data = source_data,
        # ),
        Table(
            attribute=
            'employment_growth_amenities = minority.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.growth_amenities_id == 1))',
            dataset_name='minority',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units_growth_amenities = minority.aggregate((urbansim_parcel.parcel.population + urbansim_parcel.parcel.number_of_jobs) * (parcel.growth_amenities_id == 1))',
            dataset_name='minority',
            source_data=source_data,
        ),

        # # # Minority Transit Buffer level by Indicators - #28a
        Table(
            attribute=
            'population_transit_buffer = minority.aggregate(urbansim_parcel.parcel.population * (parcel.transit_buffer_id == 1))',
            dataset_name='minority',
            source_data=source_data,
        ),

        # Table(
        # attribute = 'households_transit_buffer = minority.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.transit_buffer_id == 1))',
        # dataset_name = 'minority',
        # source_data = source_data,
        # ),
        Table(
            attribute=
            'employment_transit_buffer = minority.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.transit_buffer_id == 1))',
            dataset_name='minority',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units_transit_buffer = minority.aggregate((urbansim_parcel.parcel.population + urbansim_parcel.parcel.number_of_jobs) * (parcel.transit_buffer_id == 1))',
            dataset_name='minority',
            source_data=source_data,
        ),

        # # # Minority Census Tract Level Indicators - #79

        # # Non-minority = 1
        Table(
            attribute=
            'non_minority_population = census_tract.aggregate(urbansim_parcel.parcel.population * (parcel.minority_id == 1))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_minority_households = census_tract.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.minority_id == 1))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_minority_employment = census_tract.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.minority_id == 1))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        # # # Minority = 2
        Table(
            attribute=
            'non_minority_population = census_tract.aggregate(urbansim_parcel.parcel.population * (parcel.minority_id == 2))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_minority_households = census_tract.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.minority_id == 2))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_minority_employment = census_tract.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.minority_id == 2))',
            dataset_name='census_tract',
            source_data=source_data,
        ),

        # # # Minority Subarea Level Indicators - #18

        # # Non-minority = 1
        Table(
            attribute=
            'non_minority_population = subarea.aggregate(urbansim_parcel.parcel.population * (parcel.minority_id == 1))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_minority_households = subarea.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.minority_id == 1))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_minority_employment = subarea.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.minority_id == 1))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        # # Minority = 2
        Table(
            attribute=
            'minority_population = subarea.aggregate(urbansim_parcel.parcel.population * (parcel.minority_id == 2))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        Table(
            attribute=
            'minority_households = subarea.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.minority_id == 2))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        Table(
            attribute=
            'minority_employment = subarea.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.minority_id == 2))',
            dataset_name='subarea',
            source_data=source_data,
        ),

        # # # Minority TOD Level Indicators - #30

        # # Non-Minority = 1
        Table(
            attribute=
            'non_minority_population = tod.aggregate(urbansim_parcel.parcel.population * (parcel.minority_id == 1))',
            dataset_name='tod',
            source_data=source_data,
        ),
        # Table(
        # attribute = 'non_minority_households = tod.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.minority_id == 1))',
        # dataset_name = 'tod',
        # source_data = source_data,
        # ),
        Table(
            attribute=
            'non_minority_employment = tod.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.minority_id == 1))',
            dataset_name='tod',
            source_data=source_data,
        ),

        # # Minority = 2
        Table(
            attribute=
            'minority_population = tod.aggregate(urbansim_parcel.parcel.population * (parcel.minority_id == 2))',
            dataset_name='tod',
            source_data=source_data,
        ),
        Table(
            attribute=
            'minority_households = tod.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.minority_id == 2))',
            dataset_name='tod',
            source_data=source_data,
        ),
        Table(
            attribute=
            'minority_employment = tod.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.minority_id == 2))',
            dataset_name='tod',
            source_data=source_data,
        ),
        Table(
            attribute=
            'developed_acres = minority.aggregate(numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft,intermediates=[parcel])/43560.0',
            dataset_name='minority',
            source_data=source_data,
        ),
        DatasetTable(
            source_data=source_data,
            dataset_name='minority',
            name='Acreage_by_built_res_density',
            attributes=[
                'Nonres_existing = minority.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) < 2015) * (psrc_parcel.parcel.residential_units == 0) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Nonres_redev = minority.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units == 0) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Nonres_newdev = minority.aggregate((parcel.baseyear_built < 1850) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units == 0) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Low_existing = minority.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) < 2015) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 3630) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Low_redev = minority.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 3630) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Low_newdev = minority.aggregate((parcel.baseyear_built < 1850) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 3630) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Medium_existing = minority.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) < 2015) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 3630) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Medium_redev = minority.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 3630) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Medium_newdev = minority.aggregate((parcel.baseyear_built < 1850) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 3630) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'High_existing = minority.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) < 2015) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'High_redev = minority.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'High_newdev = minority.aggregate((parcel.baseyear_built < 1850) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
            ],
        ),

        # # Poverty - population, households, employment, and activity units
        Table(
            attribute=
            'population = poverty.aggregate(urbansim_parcel.parcel.population, intermediates=[parcel])',
            dataset_name='poverty',
            source_data=source_data,
        ),
        Table(
            attribute=
            'households = poverty.aggregate(urbansim_parcel.parcel.number_of_households, intermediates=[parcel])',
            dataset_name='poverty',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment = poverty.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[parcel])',
            dataset_name='poverty',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units = poverty.aggregate(urbansim_parcel.parcel.population, intermediates=[parcel]) + poverty.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[parcel])',
            dataset_name='poverty',
            source_data=source_data,
        ),

        ## Hex Level Indicators (poverty = 2) -- for mapping
        Table(
            attribute=
            'poverty_population = hex.aggregate(urbansim_parcel.parcel.population, * (parcel.poverty_id == 2))',
            dataset_name='hex',
            source_data=source_data,
        ),
        Table(
            attribute=
            'poverty_households = hex.aggregate(urbansim_parcel.parcel.number_of_households, * (parcel.poverty_id == 2))',
            dataset_name='hex',
            source_data=source_data,
        ),
        Table(
            attribute=
            'poverty_employment = hex.aggregate(urbansim_parcel.parcel.number_of_jobs, * (parcel.poverty_id == 2))',
            dataset_name='hex',
            source_data=source_data,
        ),
        Table(
            attribute=
            'poverty_activity_units = hex.aggregate(urbansim_parcel.parcel.population, intermediates=[parcel]) + hex.aggregate(urbansim_parcel.parcel.number_of_jobs, * (parcel.poverty_id == 2))',
            dataset_name='hex',
            source_data=source_data,
        ),

        # # # Poverty Park/OS Buffer Indicators - #64
        Table(
            attribute=
            'population_park_buffer = poverty.aggregate(urbansim_parcel.parcel.population * (parcel.park_buffer_id == 1) * (parcel.is_inside_urban_growth_boundary == 1))',
            dataset_name='poverty',
            source_data=source_data,
        ),

        # Table(
        # attribute = 'households_park_buffer = poverty.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.park_buffer_id == 1) * (parcel.is_inside_urban_growth_boundary == 1))',
        # dataset_name = 'poverty',
        # source_data = source_data,
        # ),
        Table(
            attribute=
            'employment_park_buffer = poverty.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.park_buffer_id == 1) * (parcel.is_inside_urban_growth_boundary == 1))',
            dataset_name='poverty',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units_park_buffer = poverty.aggregate((urbansim_parcel.parcel.population + urbansim_parcel.parcel.number_of_jobs) * (parcel.park_buffer_id == 1) * (parcel.is_inside_urban_growth_boundary == 1))',
            dataset_name='poverty',
            source_data=source_data,
        ),

        # # # Poverty Growth Amenities Buffer Indicators - #31
        Table(
            attribute=
            'population_growth_amenities = poverty.aggregate(urbansim_parcel.parcel.population * (parcel.growth_amenities_id == 1))',
            dataset_name='poverty',
            source_data=source_data,
        ),

        # Table(
        # attribute = 'households_growth_amenities = poverty.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.growth_amenities_id == 1))',
        # dataset_name = 'poverty',
        # source_data = source_data,
        # ),
        Table(
            attribute=
            'employment_growth_amenities = poverty.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.growth_amenities_id == 1))',
            dataset_name='poverty',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units_growth_amenities = poverty.aggregate((urbansim_parcel.parcel.population + urbansim_parcel.parcel.number_of_jobs) * (parcel.growth_amenities_id == 1))',
            dataset_name='poverty',
            source_data=source_data,
        ),

        # # # Poverty Transit Buffer level by Indicators - #28a
        Table(
            attribute=
            'population_transit_buffer = poverty.aggregate(urbansim_parcel.parcel.population * (parcel.transit_buffer_id == 1))',
            dataset_name='poverty',
            source_data=source_data,
        ),

        # Table(
        # attribute = 'households_transit_buffer = poverty.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.transit_buffer_id == 1))',
        # dataset_name = 'poverty',
        # source_data = source_data,
        # ),
        Table(
            attribute=
            'employment_transit_buffer = poverty.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.transit_buffer_id == 1))',
            dataset_name='poverty',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units_transit_buffer = poverty.aggregate((urbansim_parcel.parcel.population + urbansim_parcel.parcel.number_of_jobs) * (parcel.transit_buffer_id == 1))',
            dataset_name='poverty',
            source_data=source_data,
        ),

        # # # Poverty Census Tract Level Indicators - #79

        # # Non-poverty = 1
        Table(
            attribute=
            'non_poverty_population = census_tract.aggregate(urbansim_parcel.parcel.population * (parcel.poverty_id == 1))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_poverty_households = census_tract.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.poverty_id == 1))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_poverty_employment = census_tract.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.poverty_id == 1))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        # # # Poverty = 2
        Table(
            attribute=
            'non_poverty_population = census_tract.aggregate(urbansim_parcel.parcel.population * (parcel.poverty_id == 2))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_poverty_households = census_tract.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.poverty_id == 2))',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_poverty_employment = census_tract.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.poverty_id == 2))',
            dataset_name='census_tract',
            source_data=source_data,
        ),

        # # # Poverty Subarea Level Indicators - #18

        # # Non-poverty = 1
        Table(
            attribute=
            'non_poverty_population = subarea.aggregate(urbansim_parcel.parcel.population * (parcel.poverty_id == 1))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_poverty_households = subarea.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.poverty_id == 1))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_poverty_employment = subarea.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.poverty_id == 1))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        # # Poverty = 2
        Table(
            attribute=
            'poverty_population = subarea.aggregate(urbansim_parcel.parcel.population * (parcel.poverty_id == 2))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        Table(
            attribute=
            'poverty_households = subarea.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.poverty_id == 2))',
            dataset_name='subarea',
            source_data=source_data,
        ),
        Table(
            attribute=
            'poverty_employment = subarea.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.poverty_id == 2))',
            dataset_name='subarea',
            source_data=source_data,
        ),

        # # # Poverty TOD Level Indicators - #30

        # # Non-Poverty = 1
        Table(
            attribute=
            'non_poverty_population = tod.aggregate(urbansim_parcel.parcel.population * (parcel.poverty_id == 1))',
            dataset_name='tod',
            source_data=source_data,
        ),
        # Table(
        # attribute = 'non_poverty_households = tod.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.poverty_id == 1))',
        # dataset_name = 'tod',
        # source_data = source_data,
        # ),
        Table(
            attribute=
            'non_poverty_employment = tod.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.poverty_id == 1))',
            dataset_name='tod',
            source_data=source_data,
        ),

        # # Poverty = 2
        Table(
            attribute=
            'poverty_population = tod.aggregate(urbansim_parcel.parcel.population * (parcel.poverty_id == 2))',
            dataset_name='tod',
            source_data=source_data,
        ),
        # Table(
        # attribute = 'poverty_households = tod.aggregate(urbansim_parcel.parcel.number_of_households * (parcel.poverty_id == 2))',
        # dataset_name = 'tod',
        # source_data = source_data,
        # ),
        Table(
            attribute=
            'poverty_employment = tod.aggregate(urbansim_parcel.parcel.number_of_jobs * (parcel.poverty_id == 2))',
            dataset_name='tod',
            source_data=source_data,
        ),
        Table(
            attribute=
            'developed_acres = poverty.aggregate(numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft,intermediates=[parcel])/43560.0',
            dataset_name='poverty',
            source_data=source_data,
        ),
        DatasetTable(
            source_data=source_data,
            dataset_name='poverty',
            name='Acreage_by_built_res_density',
            attributes=[
                'Nonres_existing = poverty.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) < 2015) * (psrc_parcel.parcel.residential_units == 0) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Nonres_redev = poverty.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units == 0) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Nonres_newdev = poverty.aggregate((parcel.baseyear_built < 1850) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units == 0) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Low_existing = poverty.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) < 2015) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 3630) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Low_redev = poverty.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 3630) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Low_newdev = poverty.aggregate((parcel.baseyear_built < 1850) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 3630) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Medium_existing = poverty.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) < 2015) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 3630) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Medium_redev = poverty.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 3630) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'Medium_newdev = poverty.aggregate((parcel.baseyear_built < 1850) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 3630) * (urbansim_parcel.parcel.parcel_sqft_per_unit > 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'High_existing = poverty.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) < 2015) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'High_redev = poverty.aggregate((parcel.baseyear_built > 0) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
                'High_newdev = poverty.aggregate((parcel.baseyear_built < 1850) * (parcel.aggregate(building.year_built, function=maximum) > 2014) * (psrc_parcel.parcel.residential_units > 0) * (urbansim_parcel.parcel.parcel_sqft_per_unit <= 871) * numpy.logical_or((psrc_parcel.parcel.residential_units > 0),(parcel.aggregate(psrc_parcel.building.job_capacity_computed_if_necessary) > 0)) * parcel.parcel_sqft, intermediates=[parcel]) / 43560.0',
            ],
        ),
    ]
    return indicators
Esempio n. 12
0
#cache_directory = r'D:\urbansim_cache\run_1454.2006_12_12_16_28'
#run_description = '(run 1454 - travel data from quick travel model)'
#cache_directory = r'D:\urbansim_cache\run_1090.2006_11_14_12_12'
cache_directory = r'C:\cache\run_1090.2006_11_14_12_12'
run_description = '(run 1453 - travel data from full travel model)'
#cache_directory = r'Y:\urbansim_cache\run_1431.2006_12_08_09_45'
#run_description = '(run 1431 - baseyear travel data from travel model run)'
#cache_directory = r'D:\urbansim_cache\run_1154.2006_11_17_20_06'
#run_description = '(run 1154 - no ugb + double highway capacity 11/28/2006)'
#cache_directory = r'D:\urbansim_cache\run_1155.2006_11_17_20_07'
#run_description = '(run 1155 - no ugb 11/28/2006)'

source_data = SourceData(
    cache_directory = cache_directory,
    run_description = run_description,
    years = [2000],
    dataset_pool_configuration = DatasetPoolConfiguration(
        package_order=['psrc','urbansim','opus_core'],
        ),       
)
single_year_requests = [

   DatasetTable(
       years = [2000],
       source_data = source_data,
       dataset_name = 'zone',
       name = 'pop_and_ind_sqft',
       attributes = [ 
         'urbansim.zone.population',
         'urbansim.zone.industrial_sqft',                     
       ],
       #exclude_condition = '==0' #exclude_condition now accepts opus expressions
def opusRun(progressCB,logCB,params):

    params_dict = {}
    for key, val in params.iteritems():
        params_dict[str(key)] = str(val)

    cache_directory = params_dict['cache_directory']
    output_type = params_dict['output_type']
    storage_location = params_dict['storage_location']
    year = params_dict['year']
    
    if output_type == '':
        output_type = 'tab'

    """ Prerequisite:
    1. run buildingout_query.sql to create building_sqft_per_job_by_zone_generic_land_use_type_id table, or similar table for other geography 
    2. cache the table to the cache that needs to create buildout indicators for
    3. get/create building_sqft_per_job_by_zone_generic_land_use_type_id_dataset.py (in urbansim_parcel/datasets)
    4. active/planned/proposed projects are cached in development_project_proposals and development_project_proposal_components
    5. add is_redevelopable attribute to parcel
    """
    
    run_description = 'Create indicators for buildout analysis'
    
    source_data = SourceData(
        cache_directory = cache_directory,
        run_description = run_description,
        years = [int(year)],
        dataset_pool_configuration = DatasetPoolConfiguration(
            package_order=['psrc_parcel','urbansim_parcel','psrc', 'urbansim','opus_core'],
            ),       
    )
    
    attrs_by_glu = []  
    # this loop create indicators for each generic_land_type from 1 to 8
    for glu_id in range(3, 9):
        attrs_by_glu += [
            ## existing
            "existing_job_spaces_glu%s = zone.aggregate(parcel.aggregate(building.non_residential_sqft)) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id),
            
            ## existing units/job spaces excluding redevelopable parcels
            "existing_job_spaces_unredev_glu%s=zone.aggregate(parcel.aggregate(building.non_residential_sqft) * numpy.logical_not(urbansim_parcel.parcel.is_redevelopable).astype(int32) ) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id),
            
            ## redevelopment
            "redev_buildout_units_glu%s=zone.aggregate(urbansim_parcel.parcel.max_units_per_acre_capacity_for_generic_land_use_type_%s * parcel.parcel_sqft * (urbansim_parcel.parcel.is_redevelopable).astype(int32) )" % (glu_id, glu_id),
            "redev_buildout_job_spaces_glu%s=zone.aggregate(urbansim_parcel.parcel.max_far_capacity_for_generic_land_use_type_%s * parcel.parcel_sqft * (urbansim_parcel.parcel.is_redevelopable).astype(int32) ) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id, glu_id),
    
            ## active(status_id==1)/planned(status_id==3)/proposed(status_id==2)
            "proposed_job_spaces_glu%s = zone.aggregate(development_project_proposal.aggregate(urbansim_parcel.development_project_proposal_component.units_proposed * (numpy.logical_not(urbansim_parcel.development_project_proposal_component.is_residential)).astype(int32)) * (urbansim_parcel.development_project_proposal.status_id==2).astype(int32), intermediates=[parcel] ) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id), 
    
            ## vacant/agriculture buildout
            "va_buildout_glu%s = zone.aggregate( urbansim_parcel.parcel.max_units_per_acre_capacity_for_generic_land_use_type_%s * ( parcel.parcel_sqft / 43560.0 ) * ( parcel.number_of_agents(development_project_proposal) == 0) * numpy.logical_or( parcel.disaggregate(land_use_type.land_use_name)=='vacant',  parcel.disaggregate(land_use_type.land_use_name)=='agriculture') )" % (glu_id, glu_id), 
            "va_buildout_job_spaces_glu%s = zone.aggregate( urbansim_parcel.parcel.max_far_capacity_for_generic_land_use_type_%s * parcel.parcel_sqft * ( parcel.number_of_agents(development_project_proposal) == 0) * numpy.logical_or( parcel.disaggregate(land_use_type.land_use_name)=='vacant',  parcel.disaggregate(land_use_type.land_use_name)=='agriculture') )  / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id, glu_id),        
        ]

    for glu_id in range(1, 3):
        attrs_by_glu += [
            ## existing
            "existing_job_spaces_glu%s = zone.aggregate(parcel.aggregate(building.non_residential_sqft)) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id),
            
            ## existing units/job spaces excluding redevelopable parcels
            "existing_job_spaces_unredev_glu%s=zone.aggregate(parcel.aggregate(building.non_residential_sqft) * numpy.logical_not(urbansim_parcel.parcel.is_redevelopable).astype(int32) ) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id),
            
            ## redevelopment
            "redev_buildout_units_glu%s=zone.aggregate(urbansim_parcel.parcel.max_units_per_acre_capacity_for_generic_land_use_type_%s * parcel.parcel_sqft * (urbansim_parcel.parcel.is_redevelopable).astype(int32) )" % (glu_id, glu_id),
#            "redev_buildout_job_spaces_glu%s=zone.aggregate(urbansim_parcel.parcel.max_far_capacity_for_generic_land_use_type_%s * parcel.parcel_sqft * (urbansim_parcel.parcel.is_redevelopable).astype(int32) ) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id, glu_id),
    
            ## active(status_id==1)/planned(status_id==3)/proposed(status_id==2)
            "proposed_job_spaces_glu%s = zone.aggregate(development_project_proposal.aggregate(urbansim_parcel.development_project_proposal_component.units_proposed * (numpy.logical_not(urbansim_parcel.development_project_proposal_component.is_residential)).astype(int32)) * (urbansim_parcel.development_project_proposal.status_id==2).astype(int32), intermediates=[parcel] ) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id), 
    
            ## vacant/agriculture buildout
            "va_buildout_glu%s = zone.aggregate( urbansim_parcel.parcel.max_units_per_acre_capacity_for_generic_land_use_type_%s * ( parcel.parcel_sqft / 43560.0 ) * ( parcel.number_of_agents(development_project_proposal) == 0) * numpy.logical_or( parcel.disaggregate(land_use_type.land_use_name)=='vacant',  parcel.disaggregate(land_use_type.land_use_name)=='agriculture') )" % (glu_id, glu_id), 
#            "va_buildout_job_spaces_glu%s = zone.aggregate( urbansim_parcel.parcel.max_far_capacity_for_generic_land_use_type_%s * parcel.parcel_sqft * ( parcel.number_of_agents(development_project_proposal) == 0) * numpy.logical_or( parcel.disaggregate(land_use_type.land_use_name)=='vacant',  parcel.disaggregate(land_use_type.land_use_name)=='agriculture') )  / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu%s)" % (glu_id, glu_id, glu_id),        
        ]
    
    
    
    indicators=[
       DatasetTable(
           attributes = [
               ### indicators don't need to iterate by generic_land_use_type
               ## existing
               "existing_units = zone.aggregate(urbansim_parcel.parcel.residential_units)",
               #"existing_job_spaces_glu1 = zone.aggregate(parcel.aggregate(building.non_residential_sqft)) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu1)",
    
               ## existing units/job spaces excluding redevelopable parcels
               "existing_units_unredev=zone.aggregate(urbansim_parcel.parcel.residential_units * numpy.logical_not(urbansim_parcel.parcel.is_redevelopable).astype(int32) )",
               #"existing_job_spaces_unredev_glu1=zone.aggregate(parcel.aggregate(building.non_residential_sqft) * numpy.logical_not(urbansim_parcel.parcel.is_redevelopable).astype(int32) ) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu1)",
    
               ## redevelopment
               #"redev_buildout_units_glu1=zone.aggregate(urbansim_parcel.parcel.max_units_per_acre_capacity_for_generic_land_use_type_1 * parcel.parcel_sqft * (urbansim_parcel.parcel.is_redevelopable).astype(int32) )",
               #"redev_buildout_job_spaces_glu1=zone.aggregate(urbansim_parcel.parcel.max_far_capacity_for_generic_land_use_type_1 * parcel.parcel_sqft * (urbansim_parcel.parcel.is_redevelopable).astype(int32) ) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu1)",
    
               ## active(status_id==1)/planned(status_id==3)/proposed(status_id==2)
               "proposed_units = zone.aggregate(development_project_proposal.aggregate(urbansim_parcel.development_project_proposal_component.units_proposed * (urbansim_parcel.development_project_proposal_component.is_residential).astype(int32)) * (urbansim_parcel.development_project_proposal.status_id==2).astype(int32), intermediates=[parcel] )",
               #"proposed_job_spaces_glu1 = zone.aggregate(development_project_proposal.aggregate(urbansim_parcel.development_project_proposal_component.units_proposed * (numpy.logical_not(urbansim_parcel.development_project_proposal_component.is_residential)).astype(int32)) * (urbansim_parcel.development_project_proposal.status_id==2).astype(int32), intermediates=[parcel] ) / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu1)",
    
               ## vacant/agriculture buildout
               #"va_buildout_glu1 = zone.aggregate( urbansim_parcel.parcel.max_units_per_acre_capacity_for_generic_land_use_type_1 * parcel.parcel_sqft * ( parcel.number_of_agents(development_project_proposal) == 0) * numpy.logical_or( parcel.disaggregate(land_use_type.land_use_name)=='vacant',  parcel.disaggregate(land_use_type.land_use_name)=='agriculture') )", 
               #"va_buildout_job_spaces_glu1 = zone.aggregate( urbansim_parcel.parcel.max_far_capacity_for_generic_land_use_type_1 * parcel.parcel_sqft * ( parcel.number_of_agents(development_project_proposal) == 0) * numpy.logical_or( parcel.disaggregate(land_use_type.land_use_name)=='vacant',  parcel.disaggregate(land_use_type.land_use_name)=='agriculture') )  / zone.disaggregate(building_sqft_per_job_by_zone_generic_land_use_type_id.building_sqft_per_job_glu1)",        
               ] + attrs_by_glu,
           dataset_name = 'zone',
           source_data = source_data,
           name = 'zone_buildout',
           output_type = output_type,
           storage_location = storage_location
           ),
    ]
    
    IndicatorFactory().create_indicators(
         indicators = indicators,
         display_error_box = False, 
         show_results = False)    
Esempio n. 14
0
def main():
    project_name = 'eugene_gridcell'
    run_name1 = 'run_6473.2008_05_11_22_27'
    run_name2 = 'run_6478.2008_05_12_19_04'

    source_data = SourceData(
        cache_directory=paths.get_opus_data_path_path(
            project_name, 'runs',
            run_name1),  # r'D:\urbansim_cache\run_1090.2006_11_14_12_12',
        #   comparison_cache_directory = os.path.join(os.environ['OPUS_DATA_PATH'],project_name,'runs',run_name2),
        years=[1980, 1981],
        dataset_pool_configuration=DatasetPoolConfiguration(
            package_order=['eugene', 'urbansim', 'opus_core'], ),
    )

    indicators = [
        Map(
            source_data=source_data,
            dataset_name='zone',
            attribute='urbansim.zone.population',
            years=[1980],
        ),

        #   Chart(
        #       source_data = source_data,
        #       dataset_name = 'gridcell',
        #       attribute = 'urbansim.gridcell.population',
        #       ),
        #
        #   Table(
        #       source_data = source_data,
        #       dataset_name = 'zone',
        #       attribute = 'urbansim.zone.industrial_sqft',
        #       output_type = 'tab'
        #       ),

        #   Table(
        #       source_data = source_data,
        #       dataset_name = 'zone',
        #       attribute = 'urbansim.zone.industrial_sqft',
        #       output_type = 'dbf',
        #       years = [1980, 1981]
        #       ),

        #   GeotiffMap(
        #       source_data = source_data,
        #       dataset_name = 'gridcell',
        #       package = 'psrc',
        #       attribute = 'urbansim.gridcell.number_of_jobs',
        #       name = 'jobs',
        #    ),

        #   DatasetTable(
        #       source_data = source_data,
        #       dataset_name = 'zone',
        #       name = 'pop_and_ind_sqft',
        #       attributes = [
        #         'urbansim.zone.population',
        #         'urbansim.zone.industrial_sqft',
        #       ],
        #       exclude_condition = 'urbansim.zone.population<100' #this accepts any opus expression
        #   ),

        #Expression example
        #   Table(
        #       source_data = source_data,
        #       dataset_name = 'large_area',
        #       name = 'de_population_change',
        #       attribute = 'psrc.large_area.de_population_DDDD - psrc.large_area.de_population_2000',
        #   ),

        #example of using an operation ("change since baseyear"). Other available operations
        #are "percent_change" and "size" (of the dataset)
        #   Table(
        #       source_data = source_data,
        #       attribute = 'urbansim.faz.population',
        #       dataset_name = 'faz',
        #       name = 'population_change(DDDD-00)',
        #       operation = 'change',
        #       years = [1980]
        #   ),

        #example using regional-level aggregators
        #   Table(
        #       attribute = 'alldata.aggregate_all(urbansim.zone.number_of_home_based_jobs)',
        #       dataset_name = 'alldata',
        #       source_data = source_data,
        #       name =  'number_of_home_based_jobs',
        #       years = [1980, 1981]
        #   ),
    ]

    from opus_core.indicator_framework.core.indicator_factory import IndicatorFactory

    IndicatorFactory().create_indicators(indicators=indicators,
                                         display_error_box=False,
                                         show_results=True)
Esempio n. 15
0
    def create_travel_model_input_file(self, config, year, *args, **kwargs):
        """"""

        logger.start_block('Starting GetCacheDataIntoMatsimTest.run(...)')

        source_data = SourceData(
            cache_directory=config['cache_directory'],
            years=[year],
            dataset_pool_configuration=DatasetPoolConfiguration(package_order=[
                'psrc_parcel', 'urbansim_parcel', 'psrc', 'urbansim',
                'opus_core'
            ], ),
        )

        output_root = config['root']
        if not os.path.exists(output_root):
            try:
                os.mkdir(output_root)
            except:
                pass

        output_root_extended = os.path.join(config['root'], 'opus_matsim')
        if not os.path.exists(output_root_extended):
            try:
                os.mkdir(output_root_extended)
            except:
                pass

        output_directory = os.path.join(output_root_extended, 'tmp')
        if not os.path.exists(output_directory):
            try:
                os.mkdir(output_directory)
            except:
                pass

        ### PERSONS
        export_indicators = [
            DatasetTable(
                attributes=[
                    'parcel_id_home = person.disaggregate(parcel.parcel_id, intermediates=[building,household])',
                    'parcel_id_work = person.disaggregate(parcel.parcel_id, intermediates=[building,job])',
                ],
                dataset_name='person',
                storage_location=output_directory,
                source_data=source_data,
                output_type='tab',
                name='exported_indicators',
            )
        ]
        # This is (I assume) executing the export
        IndicatorFactory().create_indicators(indicators=export_indicators,
                                             display_error_box=False,
                                             show_results=False)

        ### "FACILITIES"
        export_indicators = [
            DatasetTable(
                attributes=[
                    'parcel.x_coord_sp',
                    'parcel.y_coord_sp',
                    'parcel.zone_id',
                ],
                dataset_name='parcel',
                storage_location=output_directory,
                source_data=source_data,
                output_type='tab',
                name='exported_indicators',
            )
        ]
        IndicatorFactory().create_indicators(indicators=export_indicators,
                                             display_error_box=False,
                                             show_results=False)

        logger.end_block()
def make_multiyear_workbook(cache_directory, yearstart=2010, yearend=2035):
    """ This spits out the indicators for a multiyear workbook and then combines them 
        into a single file, cache_directory/alldata.csv
        You can then copy this a copy of the MultiyearLU_template.xls and see some basic
          performance/troubleshooting graphs for the various submodels.
    """

    multiyear_workbook_source_data = SourceData(
        cache_directory=cache_directory,
        run_description="Run description is used for what?",
        years=range(yearstart, yearend + 1),
        dataset_pool_configuration=DatasetPoolConfiguration(
            package_order=['sanfrancisco', 'urbansim', 'opus_core'], ),
    )

    multiyear_workbook_alldata_attributes = \
    [
        # commercial
        'bldg_count_comm=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==1,1,0))',
        'bldg_occsqft_comm=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==1,sanfrancisco.building.occupied_sqft,0))',
        'bldg_count_totsqft_comm=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==1,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_vacrate_comm=(alldata.aggregate_all(where(sanfrancisco.building.building_group_id==1,sanfrancisco.building.non_residential_sqft,0))-' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==1,sanfrancisco.building.occupied_sqft,0)))/' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==1,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_count_totunit_comm=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==1,sanfrancisco.building.residential_units,0))',

        # institutional
        'bldg_count_inst=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==2,1,0))',
        'bldg_occsqft_inst=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==2,sanfrancisco.building.occupied_sqft,0))',
        'bldg_count_totsqft_inst=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==2,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_vacrate_inst=(alldata.aggregate_all(where(sanfrancisco.building.building_group_id==2,sanfrancisco.building.non_residential_sqft,0))-' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==2,sanfrancisco.building.occupied_sqft,0)))/' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==2,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_count_totunit_inst=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==2,sanfrancisco.building.residential_units,0))',

        # office
        'bldg_count_offc=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==3,1,0))',
        'bldg_occsqft_offc=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==3,sanfrancisco.building.occupied_sqft,0))',
        'bldg_count_totsqft_offc=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==3,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_vacrate_offc=(alldata.aggregate_all(where(sanfrancisco.building.building_group_id==3,sanfrancisco.building.non_residential_sqft,0))-' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==3,sanfrancisco.building.occupied_sqft,0)))/' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==3,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_count_totunit_offc=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==3,sanfrancisco.building.residential_units,0))',

        # residential
        'bldg_count_res=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==4,1,0))',
        'bldg_occunit_res=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==4,sanfrancisco.building.number_of_households,0))',
        'bldg_count_totunit_res=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==4,sanfrancisco.building.residential_units,0))',
        'bldg_vacrate_res=(alldata.aggregate_all(where(sanfrancisco.building.building_group_id==4,sanfrancisco.building.residential_units,0))-' +
                          'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==4,sanfrancisco.building.number_of_households,0)))/' +
                          'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==4,sanfrancisco.building.residential_units,0))',
        'bldg_count_totsqft_res=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==4,sanfrancisco.building.non_residential_sqft,0))',

        # res in non-res group buildings
        'bldg_count_reso=alldata.aggregate_all(where(sanfrancisco.building.building_group_id!=4,1,0))',
        'bldg_occunit_reso=alldata.aggregate_all(where(sanfrancisco.building.building_group_id!=4,sanfrancisco.building.number_of_households,0))',
        'bldg_count_totunit_reso=alldata.aggregate_all(where(sanfrancisco.building.building_group_id!=4,sanfrancisco.building.residential_units,0))',
        'bldg_vacrate_reso=(alldata.aggregate_all(where(sanfrancisco.building.building_group_id!=4,sanfrancisco.building.residential_units,0))-' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id!=4,sanfrancisco.building.number_of_households,0)))/' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id!=4,sanfrancisco.building.residential_units,0))',
        'bldg_count_totsqft_ores=alldata.aggregate_all(where(sanfrancisco.building.building_group_id!=4,sanfrancisco.building.non_residential_sqft,0))',

        # visitor
        'bldg_count_vis=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==5,1,0))',
        'bldg_occsqft_vis=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==5,sanfrancisco.building.occupied_sqft,0))',
        'bldg_count_totsqft_vis=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==5,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_vacrate_vis=(alldata.aggregate_all(where(sanfrancisco.building.building_group_id==5,sanfrancisco.building.non_residential_sqft,0))-' +
                          'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==5,sanfrancisco.building.occupied_sqft,0)))/' +
                          'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==5,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_count_totunit_vis=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==5,sanfrancisco.building.residential_units,0))',

        # mixed
        'bldg_count_mix=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==6,1,0))',
        'bldg_occsqft_mix=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==6,sanfrancisco.building.occupied_sqft,0))',
        'bldg_count_totsqft_mix=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==6,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_vacrate_mix=(alldata.aggregate_all(where(sanfrancisco.building.building_group_id==6,sanfrancisco.building.non_residential_sqft,0))-' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==6,sanfrancisco.building.occupied_sqft,0)))/' +
                           'alldata.aggregate_all(where(sanfrancisco.building.building_group_id==6,sanfrancisco.building.non_residential_sqft,0))',
        'bldg_count_totunit_mix=alldata.aggregate_all(where(sanfrancisco.building.building_group_id==6,sanfrancisco.building.residential_units,0))',

        # unplaced buildings
        'bldg_count_unplaced=alldata.aggregate_all(where(sanfrancisco.building.parcel_id<0,1,0))',
        'bldg_count_unplaced_BLCMspec=alldata.aggregate_all(where(numpy.logical_and(sanfrancisco.building.parcel_id<0,sanfrancisco.building.is_placed_type>0),1,0))',
        'bldg_count_unplaced_noBLCMspec=alldata.aggregate_all(where(numpy.logical_and(sanfrancisco.building.parcel_id<0,sanfrancisco.building.is_placed_type==0),1,0))',

        # household counts
        'hhld_count_sz1=alldata.aggregate_all(where(household.household_size==1,1,0))',
        'hhld_count_sz2=alldata.aggregate_all(where(household.household_size==2,1,0))',
        'hhld_count_sz34=alldata.aggregate_all(where(numpy.logical_or(household.household_size==3,household.household_size==4),1,0))',
        'hhld_count_sz56=alldata.aggregate_all(where(numpy.logical_or(household.household_size==5,household.household_size==6),1,0))',
        'hhld_count_sz7=alldata.aggregate_all(where(household.household_size>=7,1,0))',

        # business counts
        'jobs_count_sect1=alldata.aggregate_all(where(business.sector_id==1,business.employment,0))',
        'jobs_count_sect2=alldata.aggregate_all(where(business.sector_id==2,business.employment,0))',
        'jobs_count_sect3=alldata.aggregate_all(where(business.sector_id==3,business.employment,0))',
        'jobs_count_sect4=alldata.aggregate_all(where(business.sector_id==4,business.employment,0))',
        'jobs_count_sect5=alldata.aggregate_all(where(business.sector_id==5,business.employment,0))',
        'jobs_count_sect6=alldata.aggregate_all(where(business.sector_id==6,business.employment,0))',
        'jobs_count_sect7=alldata.aggregate_all(where(business.sector_id==7,business.employment,0))',
        'jobs_count_sect8=alldata.aggregate_all(where(business.sector_id==8,business.employment,0))',
        'jobs_count_sect9=alldata.aggregate_all(where(business.sector_id==9,business.employment,0))',
        'jobs_count_sect10=alldata.aggregate_all(where(business.sector_id==10,business.employment,0))',
        'jobs_count_sect11=alldata.aggregate_all(where(business.sector_id==11,business.employment,0))',

        # unplaced businesses, how full are buildings?  overall nonres sqft totals
        'business_count_unplaced=alldata.aggregate_all(where(business.building_id<1,1,0))',
        'bldg_count_overfullbiz=alldata.aggregate_all(where(sanfrancisco.building.occupied_sqft>building.non_residential_sqft,1,0))',
        'bldg_count_partialfullbiz=alldata.aggregate_all(where(numpy.logical_and(sanfrancisco.building.occupied_sqft<building.non_residential_sqft,'+
                                                                                'sanfrancisco.building.occupied_sqft>0),1,0))',
        'bldg_count_vacantbiz=alldata.aggregate_all(where(numpy.logical_and(building.non_residential_sqft>0,'+
                                                                           'sanfrancisco.building.occupied_sqft==0),1,0))',
        # these are covered above for building_groups
        'bldg_nonres_sqft_total=alldata.aggregate_all(building.non_residential_sqft)',
        'bldg_nonres_sqft_occ=alldata.aggregate_all(sanfrancisco.building.occupied_sqft)',
        'bldg_nonres_sqft_vacant=alldata.aggregate_all(building.non_residential_sqft)-alldata.aggregate_all(sanfrancisco.building.occupied_sqft)',

        # unplaced households, how full are buildings?  overall hhunit totals
        'hhld_count_unplaced=alldata.aggregate_all(where(household.building_id<1,1,0))',
        'hhld_count_overfullhh=alldata.aggregate_all(where(sanfrancisco.building.number_of_households>building.residential_units,1,0))',
        'hhld_count_partialfullhh=alldata.aggregate_all(where(numpy.logical_and(sanfrancisco.building.number_of_households<building.residential_units,'+
                                                                                'sanfrancisco.building.number_of_households>0),1,0))',
        'hhld_count_vacanthh=alldata.aggregate_all(where(numpy.logical_and(building.residential_units>0,'+
                                                                          'sanfrancisco.building.number_of_households==0),1,0))',
        # these are covered above for building_groups
        'hhld_res_unit_total=alldata.aggregate_all(building.residential_units)',
        'hhld_res_unit_occ=alldata.aggregate_all(sanfrancisco.building.number_of_households)',
        'hhld_res_unit_vacant=alldata.aggregate_all(building.residential_units)-alldata.aggregate_all(sanfrancisco.building.number_of_households)',

    ]

    class SFIndicatorDialect(csv.excel):
        lineterminator = '\n'

    csv.register_dialect("SFIndicatorDialect", SFIndicatorDialect)

    onetableWriter = csv.writer(open(
        os.path.join(cache_directory, "alldata.csv"), 'w'),
                                dialect='SFIndicatorDialect')
    headeryears = []
    for year in multiyear_workbook_source_data.years:
        headeryears.append("y" + str(year))
    onetableWriter.writerow(['variable'] + headeryears)

    for attr in multiyear_workbook_alldata_attributes:
        attr_name = attr.partition('=')[0]
        request = [
            Table(source_data=multiyear_workbook_source_data,
                  dataset_name='alldata',
                  name=attr_name,
                  attribute=attr)
        ]
        IndicatorFactory().create_indicators(indicators=request,
                                             display_error_box=False,
                                             show_results=False)
        # open this file
        filename = request[0].get_file_path()
        indicatorReader = csv.reader(open(filename, 'r'))

        # title row
        fields = indicatorReader.next()
        assert (len(fields) == len(multiyear_workbook_source_data.years) + 1
                )  # quick check

        # data row
        fields = indicatorReader.next()
        fields[0] = attr_name
        onetableWriter.writerow(fields)

        # for *_count_* rows, add *_new_* row
        if attr_name.find("_count_") >= 0:
            attr_new_name = attr_name.replace("_count_", "_new_")
            new_fields = [attr_new_name, 0]
            for ind in range(1, len(multiyear_workbook_source_data.years)):
                new_fields.append(float(fields[ind + 1]) - float(fields[ind]))

            onetableWriter.writerow(new_fields)
def make_topsheet(cache_directory):
    """ Run the indicators for the LU topsheet
    """
    run_description = '(baseline 11/02/2008)'
    yearstart = 2010
    yearend = 2035
    source_data = SourceData(
        cache_directory=cache_directory,
        run_description=run_description,
        years=[yearstart, yearend],
        dataset_pool_configuration=DatasetPoolConfiguration(
            package_order=['sanfrancisco', 'urbansim', 'opus_core'], ),
    )

    single_year_requests = [
        DatasetTable(
            source_data=source_data,
            dataset_name='tract',
            name='Tract Indicators',
            output_type='csv',
            attributes=[
                'hholds_0_wrk=tract.aggregate(sanfrancisco.building.number_of_households_with_0_workers, intermediates=[parcel])',
                'hholds_1_wrk =tract.aggregate(sanfrancisco.building.number_of_households_with_1_workers, intermediates=[parcel])',
                'hholds_2_wrk=tract.aggregate(sanfrancisco.building.number_of_households_with_2_workers, intermediates=[parcel])',
                'hholds_3_wrk=tract.aggregate(sanfrancisco.building.number_of_households_with_3_workers, intermediates=[parcel])',
                'hholds_4_wrk=tract.aggregate(sanfrancisco.building.number_of_households_with_4_workers, intermediates=[parcel])',
                'hoolds_5_wrk=tract.aggregate(sanfrancisco.building.number_of_households_with_5_workers, intermediates=[parcel])',
                'hholds_6_wrk=tract.aggregate(sanfrancisco.building.number_of_households_with_6_workers, intermediates=[parcel])',
                'hholds_7_wrk=tract.aggregate(sanfrancisco.building.number_of_households_with_7_workers, intermediates=[parcel])',
                'res_units=tract.aggregate(sanfrancisco.building.residential_units, intermediates=[parcel])',
                'res_sqft=tract.aggregate(sanfrancisco.building.residential_sqft, intermediates=[parcel])',
                'avg_total_price=tract.aggregate(sanfrancisco.building.total_price, function=mean, intermediates=[parcel])',
                'households=tract.aggregate(sanfrancisco.building.number_of_households, intermediates=[parcel])',
                'population=tract.aggregate(sanfrancisco.building.population, intermediates=[parcel])',
                'avg_hhsize=safe_array_divide(tract.aggregate(sanfrancisco.building.population, intermediates=[parcel]),tract.aggregate(sanfrancisco.building.number_of_households, intermediates=[parcel]))',
                'sector_1_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_1, intermediates=[parcel])',
                'sector_2_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_2, intermediates=[parcel])',
                'sector_3_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_3, intermediates=[parcel])',
                'sector_4_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_4, intermediates=[parcel])',
                'sector_5_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_5, intermediates=[parcel])',
                'sector_6_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_6, intermediates=[parcel])',
                'sector_7_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_7, intermediates=[parcel])',
                'sector_8_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_8, intermediates=[parcel])',
                'sector_9_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_9, intermediates=[parcel])',
                'sector_10_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_10, intermediates=[parcel])',
                'sector_11_emp=tract.aggregate(sanfrancisco.building.employment_of_sector_11, intermediates=[parcel])',
                r"sector_CIE_emp=tract.aggregate(where(sanfrancisco.business.activity_id==1,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_RET_emp=tract.aggregate(where(sanfrancisco.business.activity_id==5,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_PDR_emp=tract.aggregate(where(sanfrancisco.business.activity_id==4,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_MIPS_emp=tract.aggregate(where(sanfrancisco.business.activity_id==3,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_MED_emp=tract.aggregate(where(sanfrancisco.business.activity_id==2,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_VIS_emp=tract.aggregate(where(sanfrancisco.business.activity_id==6,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                'employment=tract.aggregate(sanfrancisco.building.employment, intermediates=[parcel])',
                'sector_1_bus=tract.aggregate(business.sector_id == 1, intermediates=[building, parcel])',
                'sector_2_bus=tract.aggregate(business.sector_id == 2, intermediates=[building, parcel])',
                'sector_3_bus=tract.aggregate(business.sector_id == 3, intermediates=[building, parcel])',
                'sector_4_bus=tract.aggregate(business.sector_id == 4, intermediates=[building, parcel])',
                'sector_5_bus=tract.aggregate(business.sector_id == 5, intermediates=[building, parcel])',
                'sector_6_bus=tract.aggregate(business.sector_id == 6, intermediates=[building, parcel])',
                'sector_7_bus=tract.aggregate(business.sector_id == 7, intermediates=[building, parcel])',
                'sector_8_bus=tract.aggregate(business.sector_id == 8, intermediates=[building, parcel])',
                'sector_9_bus=tract.aggregate(business.sector_id == 9, intermediates=[building, parcel])',
                'sector_10_bus=tract.aggregate(business.sector_id == 10, intermediates=[building, parcel])',
                'sector_11_bus=tract.aggregate(business.sector_id == 11, intermediates=[building, parcel])',
                'businesses=tract.aggregate(sanfrancisco.building.number_of_businesses, intermediates=[parcel])',
                'sqft_cie=tract.aggregate(where(sanfrancisco.building.building_use_id==7,sanfrancisco.building.non_residential_sqft,0), intermediates=[parcel])',
                'sqft_retail=tract.aggregate(where(sanfrancisco.building.building_use_id==14,sanfrancisco.building.non_residential_sqft,0), intermediates=[parcel])',
                'sqft_pdr=tract.aggregate(where(sanfrancisco.building.building_use_id==13,sanfrancisco.building.non_residential_sqft,0), intermediates=[parcel])',
                'sqft_mips=tract.aggregate(where(sanfrancisco.building.building_use_id==8,sanfrancisco.building.non_residential_sqft,0), intermediates=[parcel])',
                'sqft_visitor=tract.aggregate(where(sanfrancisco.building.building_use_id==17,sanfrancisco.building.non_residential_sqft,0), intermediates=[parcel])',
                'sqft_nonres=tract.aggregate(sanfrancisco.building.non_residential_sqft, intermediates=[parcel])',
            ],
            #exclude_condition = '==0' #exclude_condition now accepts opus expressions
        ),
        DatasetTable(
            source_data=source_data,
            dataset_name='pdist',
            name='pdist_indicators',
            output_type='csv',
            attributes=[
                'pdist.district',
                'hholds_0_wrk=pdist.aggregate(sanfrancisco.building.number_of_households_with_0_workers, intermediates=[parcel])',
                'hholds_1_wrk =pdist.aggregate(sanfrancisco.building.number_of_households_with_1_workers, intermediates=[parcel])',
                'hholds_2_wrk=pdist.aggregate(sanfrancisco.building.number_of_households_with_2_workers, intermediates=[parcel])',
                'hholds_3_wrk=pdist.aggregate(sanfrancisco.building.number_of_households_with_3_workers, intermediates=[parcel])',
                'hholds_4_wrk=pdist.aggregate(sanfrancisco.building.number_of_households_with_4_workers, intermediates=[parcel])',
                'hholds_5_wrk=pdist.aggregate(sanfrancisco.building.number_of_households_with_5_workers, intermediates=[parcel])',
                'hholds_6_wrk=pdist.aggregate(sanfrancisco.building.number_of_households_with_6_workers, intermediates=[parcel])',
                'hholds_7_wrk=pdist.aggregate(sanfrancisco.building.number_of_households_with_7_workers, intermediates=[parcel])',
                'res_units=pdist.aggregate(sanfrancisco.building.residential_units, intermediates=[parcel])',
                'res_sqft=pdist.aggregate(sanfrancisco.building.residential_sqft, intermediates=[parcel])',
                'avg_total_price=pdist.aggregate(where(sanfrancisco.building.residential_units>0,sanfrancisco.building.total_price,0), function=mean, intermediates=[parcel])',
                'stdev_total_price=pdist.aggregate(sanfrancisco.building.total_price, function=standard_deviation, intermediates=[parcel])',
                'stdev_total_price2=pdist.aggregate(where(sanfrancisco.building.residential_units>0,sanfrancisco.building.total_price,0), function=standard_deviation, intermediates=[parcel])',
                'households=pdist.aggregate(sanfrancisco.building.number_of_households, intermediates=[parcel])',
                'population=pdist.aggregate(sanfrancisco.building.population, intermediates=[parcel])',
                'avg_hhsize=safe_array_divide(pdist.aggregate(sanfrancisco.building.population, intermediates=[parcel]),pdist.aggregate(sanfrancisco.building.number_of_households, intermediates=[parcel]))',
                'price_per_person=pdist.aggregate(safe_array_divide(sanfrancisco.building.total_price, sanfrancisco.building.population), function=mean, intermediates=[parcel])',
                'ag_natural_resources_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_1, intermediates=[parcel])',
                'construction_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_2, intermediates=[parcel])',
                'manufacturing_wholesale_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_3, intermediates=[parcel])',
                'retail_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_4, intermediates=[parcel])',
                'transportation_utilities_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_5, intermediates=[parcel])',
                'information_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_6, intermediates=[parcel])',
                'financial_leasing_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_7, intermediates=[parcel])',
                'prof_managerial_services_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_8, intermediates=[parcel])',
                'health_educ_services_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_9, intermediates=[parcel])',
                'arts_rec_other_services_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_10, intermediates=[parcel])',
                'government_emp=pdist.aggregate(sanfrancisco.building.employment_of_sector_11, intermediates=[parcel])',
                r"sector_CIE_emp=pdist.aggregate(where(sanfrancisco.business.activity_id==1,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_RET_emp=pdist.aggregate(where(sanfrancisco.business.activity_id==5,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_PDR_emp=pdist.aggregate(where(sanfrancisco.business.activity_id==4,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_MIPS_emp=pdist.aggregate(where(sanfrancisco.business.activity_id==3,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_MED_emp=pdist.aggregate(where(sanfrancisco.business.activity_id==2,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_VIS_emp=pdist.aggregate(where(sanfrancisco.business.activity_id==6,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r'employment=pdist.aggregate(sanfrancisco.building.employment, intermediates=[parcel])',
                'ag_natural_resources_bus=pdist.aggregate(business.sector_id == 1, intermediates=[building, parcel])',
                'construction_bus=pdist.aggregate(business.sector_id == 2, intermediates=[building, parcel])',
                'manufacturing_wholesale_bus=pdist.aggregate(business.sector_id == 3, intermediates=[building, parcel])',
                'retail_bus=pdist.aggregate(business.sector_id == 4, intermediates=[building, parcel])',
                'transportation_utilities_bus=pdist.aggregate(business.sector_id == 5, intermediates=[building, parcel])',
                'information_bus=pdist.aggregate(business.sector_id == 6, intermediates=[building, parcel])',
                'financial_leasing_bus=pdist.aggregate(business.sector_id == 7, intermediates=[building, parcel])',
                'prof_managerial_services_bus=pdist.aggregate(business.sector_id == 8, intermediates=[building, parcel])',
                'health_educ_services_bus=pdist.aggregate(business.sector_id == 9, intermediates=[building, parcel])',
                'arts_rec_other_services_bus=pdist.aggregate(business.sector_id == 10, intermediates=[building, parcel])',
                'government_bus=pdist.aggregate(business.sector_id == 11, intermediates=[building, parcel])',
                'businesses=pdist.aggregate(sanfrancisco.building.number_of_businesses, intermediates=[parcel])',
                'office_sqft=pdist.aggregate(where(sanfrancisco.building.building_type_id==10,sanfrancisco.building.building_sqft,0), intermediates=[parcel])',
                'office_occ=safe_array_divide(pdist.aggregate(where(sanfrancisco.business.activity_id==3,sanfrancisco.business.sqft,0), intermediates=[building, parcel]),pdist.aggregate(where(sanfrancisco.building.building_type_id==10,sanfrancisco.building.non_residential_sqft,0), intermediates=[parcel]))'

                #'xxx=123',
                #'planningdistrict=pdist.get_data_element(pdists.district)'
            ],
            #exclude_condition = '==0' #exclude_condition now accepts opus expressions
        ),
        DatasetTable(
            source_data=source_data,
            dataset_name='zone',
            name='zone Indicators',
            output_type='csv',
            attributes=[
                'hholds_0_wrk=zone.aggregate(sanfrancisco.building.number_of_households_with_0_workers, intermediates=[parcel])',
                'hholds_1_wrk =zone.aggregate(sanfrancisco.building.number_of_households_with_1_workers, intermediates=[parcel])',
                'hholds_2_wrk=zone.aggregate(sanfrancisco.building.number_of_households_with_2_workers, intermediates=[parcel])',
                'hholds_3_wrk=zone.aggregate(sanfrancisco.building.number_of_households_with_3_workers, intermediates=[parcel])',
                'hholds_4_wrk=zone.aggregate(sanfrancisco.building.number_of_households_with_4_workers, intermediates=[parcel])',
                'hoolds_5_wrk=zone.aggregate(sanfrancisco.building.number_of_households_with_5_workers, intermediates=[parcel])',
                'hholds_6_wrk=zone.aggregate(sanfrancisco.building.number_of_households_with_6_workers, intermediates=[parcel])',
                'hholds_7_wrk=zone.aggregate(sanfrancisco.building.number_of_households_with_7_workers, intermediates=[parcel])',
                'res_units=zone.aggregate(sanfrancisco.building.residential_units, intermediates=[parcel])',
                'res_sqft=zone.aggregate(sanfrancisco.building.residential_sqft, intermediates=[parcel])',
                'avg_total_price=zone.aggregate(sanfrancisco.building.total_price, function=mean, intermediates=[parcel])',
                'households=zone.aggregate(sanfrancisco.building.number_of_households, intermediates=[parcel])',
                'population=zone.aggregate(sanfrancisco.building.population, intermediates=[parcel])',
                'avg_hhsize=safe_array_divide(zone.aggregate(sanfrancisco.building.population, intermediates=[parcel]),zone.aggregate(sanfrancisco.building.number_of_households, intermediates=[parcel]))',
                'sector_1_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_1, intermediates=[parcel])',
                'sector_2_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_2, intermediates=[parcel])',
                'sector_3_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_3, intermediates=[parcel])',
                'sector_4_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_4, intermediates=[parcel])',
                'sector_5_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_5, intermediates=[parcel])',
                'sector_6_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_6, intermediates=[parcel])',
                'sector_7_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_7, intermediates=[parcel])',
                'sector_8_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_8, intermediates=[parcel])',
                'sector_9_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_9, intermediates=[parcel])',
                'sector_10_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_10, intermediates=[parcel])',
                'sector_11_emp=zone.aggregate(sanfrancisco.building.employment_of_sector_11, intermediates=[parcel])',
                r"sector_CIE_emp=zone.aggregate(where(sanfrancisco.business.activity_id==1,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_RET_emp=zone.aggregate(where(sanfrancisco.business.activity_id==5,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_PDR_emp=zone.aggregate(where(sanfrancisco.business.activity_id==4,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_MIPS_emp=zone.aggregate(where(sanfrancisco.business.activity_id==3,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_MED_emp=zone.aggregate(where(sanfrancisco.business.activity_id==2,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                r"sector_VIS_emp=zone.aggregate(where(sanfrancisco.business.activity_id==6,sanfrancisco.business.employment,0), intermediates=[building, parcel])",
                'employment=zone.aggregate(sanfrancisco.building.employment, intermediates=[parcel])',
                'sector_1_bus=zone.aggregate(business.sector_id == 1, intermediates=[building, parcel])',
                'sector_2_bus=zone.aggregate(business.sector_id == 2, intermediates=[building, parcel])',
                'sector_3_bus=zone.aggregate(business.sector_id == 3, intermediates=[building, parcel])',
                'sector_4_bus=zone.aggregate(business.sector_id == 4, intermediates=[building, parcel])',
                'sector_5_bus=zone.aggregate(business.sector_id == 5, intermediates=[building, parcel])',
                'sector_6_bus=zone.aggregate(business.sector_id == 6, intermediates=[building, parcel])',
                'sector_7_bus=zone.aggregate(business.sector_id == 7, intermediates=[building, parcel])',
                'sector_8_bus=zone.aggregate(business.sector_id == 8, intermediates=[building, parcel])',
                'sector_9_bus=zone.aggregate(business.sector_id == 9, intermediates=[building, parcel])',
                'sector_10_bus=zone.aggregate(business.sector_id == 10, intermediates=[building, parcel])',
                'sector_11_bus=zone.aggregate(business.sector_id == 11, intermediates=[building, parcel])',
                'businesses=zone.aggregate(sanfrancisco.building.number_of_businesses, intermediates=[parcel])'
            ]
            #exclude_condition = '==0' #exclude_condition now accepts opus expressions
        ),
    ]

    IndicatorFactory().create_indicators(indicators=single_year_requests,
                                         display_error_box=False,
                                         show_results=False)
Esempio n. 18
0
        to False.
    export_type:
        The output format of the outputted indicator from ArcMap.
        Optional. Will default to jpg
'''

#An example script:

project_name = 'eugene_gridcell'
run_name1 = 'run_6473.2008_05_11_22_27'
run_name2 = 'run_6478.2008_05_12_19_04'

source_data = SourceData(
   cache_directory = os.path.join(os.environ['OPUS_DATA_PATH'],project_name,'runs',run_name1),    # r'D:\urbansim_cache\run_1090.2006_11_14_12_12',
#   comparison_cache_directory = os.path.join(os.environ['OPUS_DATA_PATH'],project_name,'runs',run_name2),
   years = [1980, 1981],
   dataset_pool_configuration = DatasetPoolConfiguration(
         package_order=['eugene','urbansim','opus_core'],
         ),                  
)

indicators = [
   Map( 
       source_data = source_data,
       dataset_name = 'zone',
       attribute = 'urbansim.zone.population',
       years = [1980], 
       ),  
   
#   Chart(
#       source_data = source_data,
#       dataset_name = 'gridcell',
Esempio n. 19
0
def get_indicators(
        cache_directory,
        run_description,
        years=[2014, 2015, 2017, 2020, 2025, 2030, 2035, 2040, 2045, 2050],
        base_year=2014):
    #def get_indicators(cache_directory, run_description, years = [2014,2015,2017,2020,2021,2022,2023,2024,2025,2030,2035,2040,2045,2046,2047,2048,2049,2050], base_year=2014):
    #def get_indicators(cache_directory, run_description, years = [2050], base_year=2014):
    #def get_indicators(cache_directory, run_description, years = [2014,2017,2050], base_year=2014):
    source_data = SourceData(
        cache_directory=cache_directory,
        run_description=run_description,
        years=years,
        base_year=base_year,
        dataset_pool_configuration=DatasetPoolConfiguration(
            package_order=[
                'psrc_parcel', 'urbansim_parcel', 'psrc', 'urbansim',
                'opus_core'
            ],
            package_order_exceptions={},
        ),
    )

    indicators = [
        DatasetTable(
            source_data=source_data,
            dataset_name='faz',
            name='DU_and_HH_by_bld_type_by_faz_by_year',
            attributes=[
                'DU_SF_19=faz.aggregate(urbansim_parcel.building.residential_units * (building.building_type_id==19), intermediates=[parcel])',
                'DU_MF_12=faz.aggregate(urbansim_parcel.building.residential_units * (building.building_type_id==12), intermediates=[parcel])',
                'DU_CO_4=faz.aggregate(urbansim_parcel.building.residential_units * (building.building_type_id==4), intermediates=[parcel])',
                'DU_MH_11=faz.aggregate(urbansim_parcel.building.residential_units * (building.building_type_id==11), intermediates=[parcel])',
                'DU_Total=faz.aggregate(urbansim_parcel.building.residential_units, intermediates=[parcel])',
                'HH_SF_19=faz.aggregate(urbansim_parcel.building.number_of_households * (building.building_type_id==19), intermediates=[parcel])',
                'HH_MF_12=faz.aggregate(urbansim_parcel.building.number_of_households * (building.building_type_id==12), intermediates=[parcel])',
                'HH_CO_4=faz.aggregate(urbansim_parcel.building.number_of_households * (building.building_type_id==4), intermediates=[parcel])',
                'HH_MH_11=faz.aggregate(urbansim_parcel.building.number_of_households * (building.building_type_id==11), intermediates=[parcel])',
                'HH_Total=faz.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel])',
            ],
        ),

        ## County Level Control indicators  - added 4.17.2018
        Table(
            attribute=
            'population = county.aggregate(urbansim_parcel.parcel.population, intermediates=[parcel])',
            dataset_name='county',
            source_data=source_data,
        ),
        Table(
            attribute=
            'households = county.aggregate(urbansim_parcel.parcel.number_of_households, intermediates=[parcel])',
            dataset_name='county',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment = county.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[parcel])',
            dataset_name='county',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units = county.aggregate(urbansim_parcel.parcel.population, intermediates=[parcel]) + county.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[parcel])',
            dataset_name='county',
            source_data=source_data,
        ),

        ## County Regional Geography indicators  - added 1.23.2018
        Table(
            attribute=
            'population = fips_rgs_proposed.aggregate(urbansim_parcel.parcel.population, intermediates=[city])',
            dataset_name='fips_rgs_proposed',
            source_data=source_data,
        ),
        Table(
            attribute=
            'households = fips_rgs_proposed.aggregate(urbansim_parcel.parcel.number_of_households, intermediates=[city])',
            dataset_name='fips_rgs_proposed',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment = fips_rgs_proposed.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[city])',
            dataset_name='fips_rgs_proposed',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units = fips_rgs_proposed.aggregate(urbansim_parcel.parcel.population, intermediates=[city]) + fips_rgs_proposed.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[city])',
            dataset_name='fips_rgs_proposed',
            source_data=source_data,
        ),

        ## County MHS vacancy indicators - added 11.1.2017
        DatasetTable(
            source_data=source_data,
            dataset_name='county',
            name='eoy_vacancy_by_building_type',
            output_type='csv',
            attributes=[
                'res_4_VR=numpy.safe_array_divide(county.aggregate(urbansim_parcel.building.vacant_residential_units*(building.building_type_id==4)),county.aggregate(urbansim_parcel.building.residential_units*(building.building_type_id==4)))',
                'res_12_VR=numpy.safe_array_divide(county.aggregate(urbansim_parcel.building.vacant_residential_units*(building.building_type_id==12)),county.aggregate(urbansim_parcel.building.residential_units*(building.building_type_id==12)))',
                'res_19_VR=numpy.safe_array_divide(county.aggregate(urbansim_parcel.building.vacant_residential_units*(building.building_type_id==19)),county.aggregate(urbansim_parcel.building.residential_units*(building.building_type_id==19)))',
                'nonres_3_VR=numpy.safe_array_divide(county.aggregate(psrc_parcel.building.vacant_non_home_based_job_space*(psrc_parcel.building.building_type_id==3)),county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==3)))',
                'nonres_8_VR=numpy.safe_array_divide(county.aggregate(psrc_parcel.building.vacant_non_home_based_job_space*(psrc_parcel.building.building_type_id==8)),county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==8)))',
                'nonres_13_VR=numpy.safe_array_divide(county.aggregate(psrc_parcel.building.vacant_non_home_based_job_space*(psrc_parcel.building.building_type_id==13)),county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==13)))',
                'nonres_20_VR=numpy.safe_array_divide(county.aggregate(psrc_parcel.building.vacant_non_home_based_job_space*(psrc_parcel.building.building_type_id==20)),county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==20)))',
                'nonres_21_VR=numpy.safe_array_divide(county.aggregate(psrc_parcel.building.vacant_non_home_based_job_space*(psrc_parcel.building.building_type_id==21)),county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==21)))',
            ],
        ),
        DatasetTable(
            source_data=source_data,
            dataset_name='county',
            name='units_and_nonres_sqft_by_building_type',
            output_type='csv',
            attributes=[
                'res_4_units=county.aggregate(urbansim_parcel.building.residential_units*(building.building_type_id==4))',
                'res_12_units=county.aggregate(urbansim_parcel.building.residential_units*(building.building_type_id==12))',
                'res_19_units=county.aggregate(urbansim_parcel.building.residential_units*(building.building_type_id==19))',
                'nonres_3_spaces=county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==3))',
                'nonres_8_spaces=county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==8))',
                'nonres_13_spaces=county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==13))',
                'nonres_20_spaces=county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==20))',
                'nonres_21_spaces=county.aggregate(psrc_parcel.building.total_non_home_based_job_space*(psrc_parcel.building.building_type_id==21))',
                'nonres_3_sqft=county.aggregate(psrc_parcel.building.non_residential_sqft*(psrc_parcel.building.building_type_id==3))',
                'nonres_8_sqft=county.aggregate(psrc_parcel.building.non_residential_sqft*(psrc_parcel.building.building_type_id==8))',
                'nonres_13_sqft=county.aggregate(psrc_parcel.building.non_residential_sqft*(psrc_parcel.building.building_type_id==13))',
                'nonres_20_sqft=county.aggregate(psrc_parcel.building.non_residential_sqft*(psrc_parcel.building.building_type_id==20))',
                'nonres_21_sqft=county.aggregate(psrc_parcel.building.non_residential_sqft*(psrc_parcel.building.building_type_id==21))',
            ],
        ),

        ## FAZ indicators
        ## =====================
        Table(
            attribute=
            'households=faz.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel,zone])',
            dataset_name='faz',
            source_data=source_data,
        ),
        Table(
            attribute=
            'population=faz.aggregate(urbansim_parcel.building.population, intermediates=[parcel,zone])',
            dataset_name='faz',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment=faz.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel,zone])',
            dataset_name='faz',
            source_data=source_data,
        ),
        Table(
            attribute=
            'nonres_sqft=faz.aggregate(urbansim_parcel.building.non_residential_sqft, intermediates=[parcel,zone])',
            dataset_name='faz',
            source_data=source_data,
        ),
        Table(
            attribute=
            'residential_units=faz.aggregate(urbansim_parcel.building.residential_units, intermediates=[parcel,zone])',
            dataset_name='faz',
            source_data=source_data,
        ),
        Table(
            attribute=
            'building_sqft=faz.aggregate(urbansim_parcel.parcel.building_sqft, intermediates=[zone])',
            dataset_name='faz',
            source_data=source_data,
        ),

        ## TAZ indicators
        Table(
            attribute=
            'residential_units=zone.aggregate(urbansim_parcel.building.residential_units, intermediates=[parcel])',
            dataset_name='zone',
            source_data=source_data,
        ),
        Table(
            attribute=
            'households=zone.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel])',
            dataset_name='zone',
            source_data=source_data,
        ),
        Table(
            attribute=
            'population=zone.aggregate(urbansim_parcel.building.population, intermediates=[parcel])',
            dataset_name='zone',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment=zone.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel])',
            dataset_name='zone',
            source_data=source_data,
        ),
        Table(
            attribute=
            'nonres_sqft=zone.aggregate(urbansim_parcel.building.non_residential_sqft, intermediates=[parcel])',
            dataset_name='zone',
            source_data=source_data,
        ),
        Table(
            attribute=
            'building_sqft=zone.aggregate(urbansim_parcel.parcel.building_sqft)',
            dataset_name='zone',
            source_data=source_data,
        ),
        DatasetTable(source_data=source_data,
                     dataset_name='zone',
                     name='employment_by_aggr_sector',
                     attributes=jobs_by_sector("zone", "urbansim_parcel"),
                     output_type='tab'),

        ## City indicators
        ## ==================
        Table(
            attribute=
            'households=city.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel])',
            dataset_name='city',
            source_data=source_data,
        ),
        Table(
            attribute=
            'population=city.aggregate(urbansim_parcel.building.population, intermediates=[parcel])',
            dataset_name='city',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment=city.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel])',
            dataset_name='city',
            source_data=source_data,
        ),
        Table(
            attribute=
            'residential_units=city.aggregate(urbansim_parcel.building.residential_units, intermediates=[parcel])',
            dataset_name='city',
            source_data=source_data,
        ),
        Table(
            attribute=
            'nonres_sqft=city.aggregate(urbansim_parcel.building.non_residential_sqft, intermediates=[parcel])',
            dataset_name='city',
            source_data=source_data,
        ),
        Table(
            attribute=
            'building_sqft=city.aggregate(urbansim_parcel.parcel.building_sqft)',
            dataset_name='city',
            source_data=source_data,
        ),
        Table(
            attribute='acres=city.aggregate(parcel.parcel_sqft/43560.)',
            dataset_name='city',
            source_data=source_data,
        ),
        Table(
            attribute=
            'activity_units = city.aggregate(urbansim_parcel.parcel.population, intermediates=[parcel]) + city.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[parcel])',
            dataset_name='city',
            source_data=source_data,
        ),
        DatasetTable(source_data=source_data,
                     dataset_name='city',
                     name='employment_by_aggr_sector',
                     attributes=jobs_by_sector("city"),
                     output_type='tab'),

        # # ## Tract-City indicators
        # # ==================

        # # # Table(
        # # # attribute = 'households=tractcity.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel])',
        # # # dataset_name = 'tractcity',
        # # # source_data = source_data,
        # # # ),
        # # # Table(
        # # # attribute = 'population=tractcity.aggregate(urbansim_parcel.building.population, intermediates=[parcel])',
        # # # dataset_name = 'tractcity',
        # # # source_data = source_data,
        # # # ),
        # # # Table(
        # # # attribute = 'employment=tractcity.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel])',
        # # # dataset_name = 'tractcity',
        # # # source_data = source_data,
        # # # ),
        # # # Table(
        # # # attribute = 'residential_units=tractcity.aggregate(urbansim_parcel.building.residential_units, intermediates=[parcel])',
        # # # dataset_name = 'tractcity',
        # # # source_data = source_data,
        # # # ),
        # # # Table(
        # # # attribute = 'nonres_sqft=tractcity.aggregate(urbansim_parcel.building.non_residential_sqft, intermediates=[parcel])',
        # # # dataset_name = 'tractcity',
        # # # source_data = source_data,
        # # # ),
        # # # Table(
        # # # attribute = 'building_sqft=tractcity.aggregate(urbansim_parcel.parcel.building_sqft)',
        # # # dataset_name = 'tractcity',
        # # # source_data = source_data,
        # # # ),

        ## Growth Centers Indicators
        ## ============================
        Table(
            attribute=
            'residential_units=growth_center.aggregate(urbansim_parcel.building.residential_units, intermediates=[parcel])',
            dataset_name='growth_center',
            source_data=source_data,
        ),
        Table(
            attribute=
            'households=growth_center.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel])',
            dataset_name='growth_center',
            source_data=source_data,
        ),
        Table(
            attribute=
            'population=growth_center.aggregate(urbansim_parcel.building.population, intermediates=[parcel])',
            dataset_name='growth_center',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment=growth_center.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel])',
            dataset_name='growth_center',
            source_data=source_data,
        ),
        Table(
            attribute=
            'nonres_sqft=growth_center.aggregate(urbansim_parcel.building.non_residential_sqft, intermediates=[parcel])',
            dataset_name='growth_center',
            source_data=source_data,
        ),
        Table(
            attribute=
            'building_sqft=growth_center.aggregate(urbansim_parcel.parcel.building_sqft)',
            dataset_name='growth_center',
            source_data=source_data,
        ),
        Table(
            attribute=
            'acres=growth_center.aggregate(parcel.parcel_sqft/43560.)',
            dataset_name='growth_center',
            source_data=source_data,
        ),

        ## Large Area Indicators
        ## ============================
        DatasetTable(source_data=source_data,
                     dataset_name='large_area',
                     name='employment_by_aggr_sector',
                     attributes=['large_area.county_id'] +
                     jobs_by_sector("large_area"),
                     output_type='tab'),

        ## Tract indicators
        ##============================
        Table(
            attribute=
            'households=census_tract.aggregate(urbansim_parcel.parcel.number_of_households)',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'population=census_tract.aggregate(urbansim_parcel.parcel.population)',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment=census_tract.aggregate(urbansim_parcel.parcel.number_of_jobs)',
            dataset_name='census_tract',
            source_data=source_data,
        ),
        # Table(
        # attribute = 'nonres_sqft=fcensus_tract.aggregate(urbansim_parcel.parcel.non_residential_sqft, intermediates=[census_block_group])',
        # dataset_name = 'census_tract',
        # source_data = source_data,
        # )
        Table(
            attribute=
            'residential_units=census_tract.aggregate(urbansim_parcel.parcel.residential_units)',
            dataset_name='census_tract',
            source_data=source_data,
        ),

        #DatasetTable(
        #    source_data = source_data,
        #    dataset_name = 'census_tract',
        #    name = 'employment_by_aggr_sector',
        #    attributes = jobs_by_sector("census_tract"),
        #    output_type = 'csv'
        #    ),

        ##------Liming's Unplaced Households and Jobs in the Region-----------
        Table(
            attribute=
            'num_unplaced_hhs=alldata.aggregate_all(household.building_id<=0)',
            dataset_name='alldata',
            source_data=source_data,
        ),
        Table(
            attribute=
            'num_unplaced_jobs=alldata.aggregate_all(job.building_id<=0)',
            dataset_name='alldata',
            source_data=source_data,
        ),

        ##       Regional Total Tables
        Table(
            attribute=
            'residential_units=alldata.aggregate_all(urbansim_parcel.building.residential_units)',
            dataset_name='alldata',
            source_data=source_data,
        ),
        Table(
            attribute=
            'non_residential_sqft=alldata.aggregate_all(urbansim_parcel.building.non_residential_sqft)',
            dataset_name='alldata',
            source_data=source_data,
        ),
        Table(
            attribute=
            'households=alldata.aggregate_all(urbansim_parcel.building.number_of_households)',
            dataset_name='alldata',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employment=alldata.aggregate_all(urbansim_parcel.building.number_of_jobs)',
            dataset_name='alldata',
            source_data=source_data,
        ),
        Table(
            attribute=
            'population=alldata.aggregate_all(urbansim_parcel.building.population)',
            dataset_name='alldata',
            source_data=source_data,
        ),

        ## Demographic indicators
        ## ======================
        # DatasetTable(
        # source_data = source_data,
        # dataset_name = 'alldata',
        # name =  'pptyp',
        # output_type = 'csv',
        # attributes = [
        # 'full_time_worker = alldata.aggregate_all(person.employment_status==1)',
        # 'part_time_worker = alldata.aggregate_all(numpy.logical_and(person.employment_status==2,person.student==0))',
        # 'non_working_adult_age_65_plus = alldata.aggregate_all(numpy.logical_and(person.employment_status<1,numpy.logical_and(person.student==0,person.age>64)))',
        # 'non_working_adult_age_16_64 = alldata.aggregate_all(numpy.logical_and(person.employment_status<1,numpy.logical_and(person.student==0,numpy.logical_and(person.age<65,person.age>15))))',
        # 'university_student = alldata.aggregate_all(numpy.logical_and(person.employment_status<>1,numpy.logical_and(person.student==1,person.age>18)))',
        # 'hs_student_age_15_up = alldata.aggregate_all(numpy.logical_and(person.employment_status<>1,numpy.logical_and(person.student==1,numpy.logical_and(person.age>15,person.age<19))))',
        # 'child_age_5_15 = alldata.aggregate_all(numpy.logical_and(person.age>4,person.age<16))',
        # 'child_age_0_4 = alldata.aggregate_all(person.age<5)',
        # ##                'age_6_to_10 = alldata.aggregate_all(numpy.logical_and(person.age<11,person.age>=6))',
        # ##                'age_11_to_15 = alldata.aggregate_all(numpy.logical_and(person.age<16,person.age>=11))',
        # ##                'age_16_to_20 = alldata.aggregate_all(numpy.logical_and(person.age<21,person.age>=16))',
        # ##                'age_21_to_25 = alldata.aggregate_all(numpy.logical_and(person.age<26,person.age>=21))',
        # ##                'income = households.income',
        # ],
        # ),
        # DatasetTable(
        # source_data = source_data,
        # dataset_name = 'alldata',
        # name =  'persons_by_age_groups_of_interest',
        # output_type = 'csv',
        # attributes = [
        # 'Under5 = alldata.aggregate_all(person.age<5)',
        # 'Five_18 = alldata.aggregate_all(numpy.logical_and(person.age<19,person.age>=5))',
        # 'Nineteen_24 = alldata.aggregate_all(numpy.logical_and(person.age<25,person.age>=19))',
        # 'Twentyfive_60 = alldata.aggregate_all(numpy.logical_and(person.age<61,person.age>=25))',
        # 'Over_60 = alldata.aggregate_all(person.age>=61)',
        # ],
        # ),

        # DatasetTable(
        # source_data = source_data,
        # dataset_name = 'alldata',
        # name =  'persons_by_5year_age_groups',
        # output_type = 'csv',
        # attributes = [
        # 'age_0_to_5 = alldata.aggregate_all(person.age<6)',
        # 'age_6_to_10 = alldata.aggregate_all(numpy.logical_and(person.age<11,person.age>=6))',
        # 'age_11_to_15 = alldata.aggregate_all(numpy.logical_and(person.age<16,person.age>=11))',
        # 'age_16_to_20 = alldata.aggregate_all(numpy.logical_and(person.age<21,person.age>=16))',
        # 'age_21_to_25 = alldata.aggregate_all(numpy.logical_and(person.age<26,person.age>=21))',
        # 'age_26_to_30 = alldata.aggregate_all(numpy.logical_and(person.age<31,person.age>=26))',
        # 'age_31_to_35 = alldata.aggregate_all(numpy.logical_and(person.age<36,person.age>=31))',
        # 'age_36_to_40 = alldata.aggregate_all(numpy.logical_and(person.age<41,person.age>=36))',
        # 'age_41_to_45 = alldata.aggregate_all(numpy.logical_and(person.age<46,person.age>=41))',
        # 'age_46_to_50 = alldata.aggregate_all(numpy.logical_and(person.age<51,person.age>=46))',
        # 'age_51_to_55 = alldata.aggregate_all(numpy.logical_and(person.age<56,person.age>=51))',
        # 'age_56_to_60 = alldata.aggregate_all(numpy.logical_and(person.age<61,person.age>=56))',
        # 'age_61_to_65 = alldata.aggregate_all(numpy.logical_and(person.age<66,person.age>=61))',
        # 'age_66_to_70 = alldata.aggregate_all(numpy.logical_and(person.age<71,person.age>=66))',
        # 'age_71_to_75 = alldata.aggregate_all(numpy.logical_and(person.age<76,person.age>=71))',
        # 'age_76_to_80 = alldata.aggregate_all(numpy.logical_and(person.age<81,person.age>=76))',
        # 'age_81_to_85 = alldata.aggregate_all(numpy.logical_and(person.age<86,person.age>=81))',
        # 'age_86_to_90 = alldata.aggregate_all(numpy.logical_and(person.age<91,person.age>=86))',
        # 'age_91_to_95 = alldata.aggregate_all(numpy.logical_and(person.age<96,person.age>=91))',
        # 'age_96_and_up = alldata.aggregate_all(person.age>=96)',
        # ],
        # ),

        # DatasetTable(
        # source_data = source_data,
        # dataset_name = 'alldata',
        # name =  'regional_total_hhs_by_new_14incomegroups',
        # output_type = 'csv',
        # #output_type = 'sql',
        # #storage_location = database,
        # attributes = [
        # 'Group1_Under50K = alldata.aggregate_all(household.income<50000)',
        # 'Group2_50_75K = alldata.aggregate_all(numpy.logical_and(household.income<75001,household.income>=50000))',
        # 'Group3_75_100K = alldata.aggregate_all(numpy.logical_and(household.income<100001,household.income>=75000))',
        # 'Group4_Over100K = alldata.aggregate_all(household.income>=100001)',
        # ],
        # ),

        # DatasetTable(
        # source_data = source_data,
        # dataset_name = 'alldata',
        # name =  'regional_total_hhs_by_30_60_90_in_14dollars_groups',
        # output_type = 'csv',
        # #output_type = 'sql',
        # #storage_location = database,
        # attributes = [
        # 'Group1_Under36870K = alldata.aggregate_all(household.income<36870)',
        # 'Group2_UpTo73700 = alldata.aggregate_all(numpy.logical_and(household.income<73700,household.income>=36870))',
        # 'Group3_UpTo110600 = alldata.aggregate_all(numpy.logical_and(household.income<110600,household.income>=73700))',
        # 'Group4_Over110600 = alldata.aggregate_all(household.income>=110600)',
        # ],
        # ),

        # DatasetTable(
        # source_data = source_data,
        # dataset_name = 'alldata',
        # name =  'pwtyp',
        # output_type = 'csv',
        # attributes = [
        # 'full_time = alldata.aggregate_all((person.employment_status==1)*(urbansim_parcel.person.job_id > 0))',
        # 'part_time = alldata.aggregate_all((person.employment_status==2)*(urbansim_parcel.person.job_id > 0))',
        # 'workers_no_job = alldata.aggregate_all((person.employment_status >0)*(urbansim_parcel.person.job_id < 0))',
        # 'non_workers_no_job = alldata.aggregate_all((person.employment_status <1)*(urbansim_parcel.person.job_id < 0))',
        # ],
        # ),
    ]
    return indicators
Esempio n. 20
0
from numpy import arange
from opus_core.indicator_framework.image_types.matplotlib_map import Map
from opus_core.indicator_framework.image_types.matplotlib_chart import Chart
from opus_core.indicator_framework.image_types.table import Table
from opus_core.indicator_framework.image_types.geotiff_map import GeotiffMap
from opus_core.indicator_framework.image_types.dataset_table import DatasetTable
from opus_core.indicator_framework.image_types.matplotlib_lorenzcurve import LorenzCurve


run_description = '(baseline 06/28/2007)'
cache_directory = r'/Volumes/Data/opus/data/sanfrancisco/runs/run_2.2008_12_30_13_34'

source_data = SourceData(
    cache_directory = cache_directory,
    run_description = run_description,
    years = [2001, 2002, 2005, 2007, 2010, 2020, 2030],
    dataset_pool_configuration = DatasetPoolConfiguration(
        package_order=['sanfrancisco','urbansim','opus_core'],
        ),       
)
single_year_requests = [

       DatasetTable(
       source_data = source_data,
       dataset_name = 'census_tract',
       name = 'Tract Indicators',
       output_type='csv',
       attributes = [ 
                     'households_with_0_workers=census_tract.aggregate(sanfrancisco.building.number_of_households_with_0_workers, intermediates=[parcel])',
                     'households_with_1_worker =census_tract.aggregate(sanfrancisco.building.number_of_households_with_1_workers, intermediates=[parcel])',
                     'households_with_2_workers=census_tract.aggregate(sanfrancisco.building.number_of_households_with_2_workers, intermediates=[parcel])',
                     'households_with_3_workers=census_tract.aggregate(sanfrancisco.building.number_of_households_with_3_workers, intermediates=[parcel])',
Esempio n. 21
0
def get_indicators(cache_directory,
                   run_description,
                   years=range(2014, 2051),
                   base_year=2014):
    source_data = SourceData(
        cache_directory=cache_directory,
        run_description=run_description,
        years=years,
        base_year=base_year,
        dataset_pool_configuration=DatasetPoolConfiguration(
            package_order=[
                'psrc_parcel', 'urbansim_parcel', 'psrc', 'urbansim',
                'opus_core'
            ],
            package_order_exceptions={},
        ),
    )

    indicators = [

        # FAZ indicators
        # =====================
        Table(
            attribute=
            'householdsAn=faz.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel,zone])',
            dataset_name='faz',
            source_data=source_data,
        ),
        Table(
            attribute=
            'populationAn=faz.aggregate(urbansim_parcel.building.population, intermediates=[parcel,zone])',
            dataset_name='faz',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employmentAn=faz.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel,zone])',
            dataset_name='faz',
            source_data=source_data,
        ),

        # TAZ indicators
        Table(
            attribute=
            'householdsAn=zone.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel])',
            dataset_name='zone',
            source_data=source_data,
        ),
        Table(
            attribute=
            'populationAn=zone.aggregate(urbansim_parcel.building.population, intermediates=[parcel])',
            dataset_name='zone',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employmentAn=zone.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel])',
            dataset_name='zone',
            source_data=source_data,
        ),

        # ## City indicators
        # ==================
        Table(
            attribute=
            'householdsAn=city.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel])',
            dataset_name='city',
            source_data=source_data,
        ),
        Table(
            attribute=
            'populationAn=city.aggregate(urbansim_parcel.building.population, intermediates=[parcel])',
            dataset_name='city',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employmentAn=city.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel])',
            dataset_name='city',
            source_data=source_data,
        ),

        # ## Tract-City indicators
        # ==================
        Table(
            attribute=
            'householdsAn=tractcity.aggregate(urbansim_parcel.building.number_of_households, intermediates=[parcel])',
            dataset_name='tractcity',
            source_data=source_data,
        ),
        Table(
            attribute=
            'populationAn=tractcity.aggregate(urbansim_parcel.building.population, intermediates=[parcel])',
            dataset_name='tractcity',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employmentAn=tractcity.aggregate(urbansim_parcel.building.number_of_jobs, intermediates=[parcel])',
            dataset_name='tractcity',
            source_data=source_data,
        ),

        # # County Regional Geography indicators
        Table(
            attribute=
            'populationAn = fips_rgs.aggregate(urbansim_parcel.parcel.population, intermediates=[city])',
            dataset_name='fips_rgs',
            source_data=source_data,
        ),
        Table(
            attribute=
            'householdsAn = fips_rgs.aggregate(urbansim_parcel.parcel.number_of_households, intermediates=[city])',
            dataset_name='fips_rgs',
            source_data=source_data,
        ),
        Table(
            attribute=
            'employmentAn = fips_rgs.aggregate(urbansim_parcel.parcel.number_of_jobs, intermediates=[city])',
            dataset_name='fips_rgs',
            source_data=source_data,
        ),
    ]
    return indicators