Example #1
0
def calc_conifer_credits(project, current_site_scale, current_facres):
    '''
    calculates credits resulting from local-scale uplift only (excluding
    any site-scale uplift) to reflect uplift from conifer and anthro 
    removal.
    :param project: an instance of the CreditData class.
    :param current_site_scale: the scored current site scale dataframe
    :param current_facres: the current_facres report to compare conifer for the 
    purpose of calculating credits. 
    '''
    desktop_results = project.desktop_results
    projected_ls = project.projected_ls

    # Create current functional acre report
    conifer_facres = calc.calc_facres(desktop_results, current_site_scale,
                                      projected_ls)

    # Caculate credits for uplift from conifer removal
    conifer_credits = calc.calc_credits(project, desktop_results,
                                        current_facres, conifer_facres)

    return conifer_credits
Example #2
0
def calc_scenario_credits(scenarios, project, current_facres):
    '''
    calculate functional acres report for each scenario and compares to current
    functional acres report to calculate credits.
    :param scenarios: nested dict of scenarios and levels of effort, generated by
    run_base_scenarios()
    :param project: an instance of the CreditData class.
    :param current_facres: the current_facres report to compare scenarios for the 
    purpose of calculating credits.
    '''
    desktop_results = project.desktop_results
    site_scale_values = project.site_scale_values
    projected_ls = project.projected_ls
    credit_reports = {}

    for scenario_name, scenario_results in scenarios.items():
        for effort, projected_values in scenario_results.items():
            # Project site-scale values
            projected_site_scale = calc.project_site_scale(
                projected_values, site_scale_values)

            # Score projected site-scale values
            projected_scores = calc.score_site_scale(project,
                                                     projected_site_scale)

            # Create projected functional acre report
            projected_facres = calc.calc_facres(desktop_results,
                                                projected_scores, projected_ls)

            # Calculate projected credits
            projected_credits = calc.calc_credits(project, desktop_results,
                                                  current_facres,
                                                  projected_facres)

            # Append scenario name and dataframe to credit_reports dictionary
            credit_reports[scenario_name + '_' + effort] = projected_credits

    return credit_reports
Example #3
0
def run_scenario_report(project, save_interims=False):
    '''
    returns dataframe with saleable credits per scenario. 
    :param project: an instance of the CreditData class.
    :param save_interims: if True, the full credit report for each scenario 
    and for the conifer scenario is saved as a csv.'''
    # read from database
    site_scale_values = project.site_scale_values
    current_ls = project.current_ls
    desktop_results = project.desktop_results

    # set index of site_scale values for use in run_scenario
    site_scale_values_indexed = site_scale_values.set_index('map_unit_id')

    # Get current facres report to streamline comparison with scenarios
    # Score current site-scale values
    current_site_scale = calc.score_site_scale(project, site_scale_values)

    # Create current functional acre report
    current_facres = calc.calc_facres(desktop_results, current_site_scale,
                                      current_ls)

    # Run scenarios
    scenarios = run_base_scenarios(site_scale_values_indexed)

    # Calculate credits for each scenario
    credit_reports = calc_scenario_credits(scenarios, project, current_facres)

    # Compile saleable_credits for each scenario into a single dataframe
    list_of_credit_reports = list(
        credit_reports.items())  # make list to maintain order
    first_scenario, first_scenario_report = list_of_credit_reports[0]
    scenario_report = first_scenario_report[[
        'map_unit_id', 'map_unit_name', 'meadow', 'map_unit_area',
        'saleable_credits'
    ]].copy()
    scenario_report.rename(columns={'saleable_credits': first_scenario},
                           inplace=True)

    for name, data in list_of_credit_reports[1:]:
        data.rename(columns={'saleable_credits': name}, inplace=True)
        scenario_report = pd.merge(scenario_report,
                                   data[['map_unit_id', name]],
                                   how='outer',
                                   on='map_unit_id',
                                   suffixes=(False, False))

    # Calculate credits from conifer alone
    conifer_credits = calc_conifer_credits(project, current_site_scale,
                                           current_facres)

    # Append to scenario report
    conifer_report = conifer_credits[['map_unit_id',
                                      'saleable_credits']].copy()
    conifer_report.rename(columns={'saleable_credits': 'conifer'},
                          inplace=True)
    scenario_report = pd.merge(scenario_report,
                               conifer_report,
                               how='outer',
                               on='map_unit_id',
                               suffixes=(False, False))

    if save_interims:
        # Save outputs
        for name, data in credit_reports.items():
            save_name = name + '.csv'
            calc.save_output(workspace, data, save_name)

        # Save outputs
        calc.save_output(workspace, conifer_credits, 'conifer_credits.csv')

    return scenario_report