def go(): from opus_gui.results_manager.run.indicator_framework.representations.indicator import Indicator import os indicators = { 'zone_jobs': Indicator(dataset_name='zone', attribute='urbansim.zone.number_of_jobs') } from opus_core.configurations.dataset_pool_configuration import DatasetPoolConfiguration from opus_gui.results_manager.run.indicator_framework.maker.source_data import SourceData project_name = 'eugene_gridcell' run_name1 = 'base_year_data' years = [1980, 1980] source_data = SourceData( cache_directory=paths.get_opus_data_path_path(project_name, run_name1), #comparison_cache_directory = '', years=years, dataset_pool_configuration=DatasetPoolConfiguration( package_order=['urbansim', 'opus_core'], ), project_name=project_name) ################################################################ #COMPUTE indicators ################################################################ from opus_gui.results_manager.run.indicator_framework.maker.maker import Maker maker = Maker(project_name) computed_indicators = maker.create_batch(indicators=indicators, source_data=source_data) ############################################ #VISUALIZE the resulting computed indicators ############################################ from opus_gui.results_manager.run.indicator_framework.visualizer.visualization_factory import VisualizationFactory visualizer = VisualizationFactory() visualizations = [] maps = [('zone_jobs', 'matplotlib_chart')] for item in maps: vistype = 'mapnik_map' # default to map if type(item) == type(()): item, vistype = item print "Generating indicator %s" % item visualizations += visualizer.visualize( indicators_to_visualize=[ item ], # override default indicators to visualize (all) computed_indicators=computed_indicators, visualization_type=vistype, name=item) print "Done generating indicators." return dict((v.name, v.get_file_path()) for v in visualizations)
def _visualize(self, args, cache_directory = None): self.visualizations = [] indicators_to_visualize = {} interface = IndicatorFrameworkInterface(self.project) not_visualized = [] #get common years years = set([]) for indicator in self.indicators: years |= set(indicator['years']) source_data_objs = {} for indicator in self.indicators: indicator_name = indicator['indicator_name'] source_data_name = indicator['source_data_name'] dataset_name = indicator['dataset_name'] if (self.indicator_type == 'mapnik_map' or self.indicator_type == 'mapnik_animated_map') and dataset_name not in self.spatial_datasets: not_visualized.append(indicator) continue if source_data_name not in source_data_objs: source_data = interface.get_source_data( source_data_name = source_data_name, years = list(years), cache_directory = cache_directory ) source_data_objs[source_data_name] = source_data else: source_data = source_data_objs[source_data_name] indicator = interface.get_indicator( indicator_name = indicator_name, dataset_name = dataset_name) computed_indicator = interface.get_computed_indicator(indicator = indicator, source_data = source_data, dataset_name = dataset_name) computed_indicator.gui_indicator_name = indicator_name ##################### #hack to get plausible primary keys... cache_directory = source_data.cache_directory _storage_location = os.path.join(cache_directory, 'indicators', '_stored_data', repr(source_data.years[0])) storage = StorageFactory().get_storage( type = 'flt_storage', storage_location = _storage_location) cols = storage.get_column_names( table_name = dataset_name) primary_keys = [col for col in cols if col.find('_id') != -1] computed_indicator.primary_keys = primary_keys ################## name = computed_indicator.get_file_name( suppress_extension_addition = True) indicators_to_visualize[name] = computed_indicator viz_args = {} if self.indicator_type == 'mapnik_map': viz_type = self.indicator_type elif self.indicator_type == 'mapnik_animated_map': viz_type = self.indicator_type elif self.indicator_type == 'matplotlib_chart': viz_type = self.indicator_type elif self.indicator_type == 'tab': viz_type = 'table' if 'output_style' not in viz_args: viz_args['output_style'] = Table.ALL viz_args['output_type'] = 'tab' elif self.indicator_type == 'table_esri': viz_type = 'table' if 'output_style' not in viz_args: viz_args['output_style'] = Table.ALL viz_args['output_type'] = 'esri' elif self.indicator_type == 'table_per_year': viz_type = 'table' if 'output_style' not in viz_args: viz_args['output_style'] = Table.PER_YEAR viz_args['output_type'] = 'tab' elif self.indicator_type == 'table_per_attribute': viz_type = 'table' if 'output_style' not in viz_args: viz_args['output_style'] = Table.PER_ATTRIBUTE viz_args['output_type'] = 'tab' viz_args.update(self.kwargs) viz_args.update(args) # try: # import pydevd;pydevd.settrace() # except: # pass viz_factory = VisualizationFactory() self.visualizations = viz_factory.visualize( indicators_to_visualize = indicators_to_visualize.keys(), computed_indicators = indicators_to_visualize, visualization_type = viz_type, **viz_args) if self.visualizations is None: self.visualizations = [] return not_visualized
def main(): from opus_gui.results_manager.run.indicator_framework.representations.indicator import Indicator indicators = { 'zone_population': Indicator(dataset_name='zone', attribute='urbansim.zone.population'), 'gridcell_population': Indicator(dataset_name='gridcell', attribute='urbansim.gridcell.population'), 'zone_industrial_sqft': Indicator(dataset_name='zone', attribute='urbansim.zone.industrial_sqft'), 'gridcell_number_of_jobs': Indicator(dataset_name='gridcell', attribute='urbansim.gridcell.number_of_jobs', name='jobs'), 'zone_number_of_jobs': Indicator(dataset_name='zone', attribute='urbansim.gridcell.number_of_jobs', name='zone_jobs'), #Expression example (comparison to baseyear) 'large_area_population_change': Indicator( dataset_name='large_area', name='de_population_change', attribute= 'psrc.large_area.de_population_DDDD - psrc.large_area.de_population_2000', ), #example using regional-level aggregators 'alldata_home_based_jobs': Indicator( attribute= 'alldata.aggregate_all(urbansim.zone.number_of_home_based_jobs)', dataset_name='alldata', name='number_of_home_based_jobs'), } ################################################################# #DEFINE data source ################################################################# # define any number of cache directories and/or years # over which the indicators are computed from opus_core.configurations.dataset_pool_configuration import DatasetPoolConfiguration from opus_gui.results_manager.run.indicator_framework.maker.source_data import SourceData result_template = SourceData( cache_directory=r'D:\urbansim_cache\run_1090.2006_11_14_12_12', comparison_cache_directory= r'D:\urbansim_cache\run_1091.2006_11_14_12_12', years=[2000, 2010], dataset_pool_configuration=DatasetPoolConfiguration( package_order=['urbansim', 'opus_core'], ), name='run_1090') ################################################################ #COMPUTE indicators ################################################################ # setup an indicator Maker that will compute a set of indicators # for a given result template from opus_gui.results_manager.run.indicator_framework.maker.maker import Maker maker = Maker() computed_indicators = maker.create_batch(indicators=indicators, result_template=result_template) ############################################ #VISUALIZE the resulting computed indicators ############################################ from opus_gui.results_manager.run.indicator_framework.visualizer.visualization_factory import VisualizationFactory from opus_core.database_management.configurations.database_configuration import DatabaseConfiguration visualizer = VisualizationFactory() visualizations = [] # View an indicator as a Map maps = ['zone_population', 'gridcell_population'] visualizations += visualizer.visualize( indicators_to_visualize= maps, #override default indicators to visualize (all) computed_indicators=computed_indicators, visualization_type='mapnik_map', name='my_maps') # View an indicator as a matplotlib Chart charts = ['gridcell_population'] visualizations += visualizer.visualize( indicators_to_visualize=charts, computed_indicators=computed_indicators, visualization_type='matplotlib_chart', years=[2010], #override default years to visualize (all) name='charts') # Write an indicator as a Table tables = [ 'zone_industrial_sqft', 'large_area_population_change', 'alldata_home_based_jobs' ] for output_type in ['tab', 'cvs', 'dbf']: visualizations += visualizer.visualize( indicators_to_visualize=tables, computed_indicators=computed_indicators, visualization_type='table', output_type=output_type, name='tables', ) # Write a set of indicators sharing a dataset as a Dataset Table indicators_in_dataset_table = ['zone_population', 'zone_industrial_sqft'] visualizations += visualizer.visualize( indicators_to_visualize=indicators_in_dataset_table, computed_indicators=computed_indicators, visualization_type='dataset_table', output_type='csv', exclude_condition= 'urbansim.zone.population<100', #this accepts any opus expression name='dataset_table', ) ################################################################ #Generate a REPORT with the visualizations ################################################################ from opus_gui.results_manager.run.indicator_framework.reporter.report_factory import ReportFactory reporter = ReportFactory() reporter.generate_report(visualized_indicators=visualized_indicators, report_type='basic', open_immediately=True, storage_location='c:/my_reports')
# setup an indicator Maker that will compute a set of indicators # for a given result template from opus_gui.results_manager.run.indicator_framework.maker.maker import Maker maker = Maker() computed_indicators = maker.create_batch( indicators = indicators, result_template = result_template) ############################################ #VISUALIZE the resulting computed indicators ############################################ from opus_gui.results_manager.run.indicator_framework.visualizer.visualization_factory import VisualizationFactory from opus_core.database_management.configurations.database_configuration import DatabaseConfiguration visualizer = VisualizationFactory() visualizations = [] # View an indicator as a Map maps = ['zone_population', 'gridcell_population'] visualizations += visualizer.visualize( indicators_to_visualize = maps, #override default indicators to visualize (all) computed_indicators = computed_indicators, visualization_type = 'mapnik_map', name = 'my_maps' ) # View an indicator as a matplotlib Chart charts = ['gridcell_population']