Source code for new_effects

from tool_code.dict_and_df_converters import create_effects_dict, convert_dict_to_df


[docs]def calc_new_fatality_metrics(df): """ Note: This function calculates 'Fatality risk per billion VMT' and removes 'Fatalities from Rebound.' Parameters: df: A DataFrame containing 'Fatalities', 'Fatalities from Rebound' and 'kVMT.' Return: The passed DataFrame without 'Fatalities from Rebound' and with 'Fatality risk per billion VMT.' """ # remove fatalities from rebound and calc fatalities per billion VMT df.drop(columns='Fatalities From Rebound', inplace=True) df.insert(df.columns.get_loc('Fatalities') + 1, 'Fatality risk per billion VMT', df['Fatalities'] / df['kVMT'] * 1e6) return df
[docs]def calc_new_effects(settings, df, id_cols): """ Note: This function calculates new effects for the effects file. Parameters: settings: The SetInputs class.\n df: A DataFrame based on an effects report.\n id_cols: The identifying columns to use as keys for the dictionary that is created in function. Return: The passed DataFrame with new effects. """ no_action = settings.base_social_name calc_dict = create_effects_dict(df, id_cols) base_key = () # delta_dict = dict() for key in calc_dict.keys(): if len(key) == 4: scenario_name, year, reg_class, fuel_type = key base_key = (no_action, year, reg_class, fuel_type) if len(key) == 6: scenario_name, model_year, age, calendar_year, reg_class, fuel_type = key base_key = (no_action, model_year, age, calendar_year, reg_class, fuel_type) # calc new fatality effects fatality_risk_no_action = calc_dict[base_key]['Fatality risk per billion VMT'] fatality_risk_action = calc_dict[key]['Fatality risk per billion VMT'] fatalities_action = calc_dict[key]['Fatalities'] kvmt_action = calc_dict[key]['kVMT'] fatalities_from_change_in_risk = (fatality_risk_action - fatality_risk_no_action) * kvmt_action / 1e6 fatalities_from_change_in_vmt = fatalities_action - fatalities_from_change_in_risk calc_dict[key].update({'Fatalities from Change in Risk': fatalities_from_change_in_risk, 'Fatalities from Change in VMT': fatalities_from_change_in_vmt}) # calc new fuel effects (ignoring diesel, E85, hydrogen since deltas are so small) if fuel_type == 'Gasoline': gasoline_bbl = calc_dict[key]['kGallons'] * 1000 / settings.gal_per_bbl percent_of_annual = gasoline_bbl / settings.bbl_us_annual calc_dict[key].update({'Barrels': gasoline_bbl, f'Percent of {settings.year_for_compares} US': percent_of_annual}) if fuel_type == 'Electricity': kwh_electricity = calc_dict[key]['kGallons'] * 1000 / settings.kwh_per_gge percent_of_annual = kwh_electricity / settings.kwh_us_annual calc_dict[key].update({'kWh': kwh_electricity, f'Percent of {settings.year_for_compares} US': percent_of_annual}) return_df = convert_dict_to_df(calc_dict, *id_cols) return return_df
if __name__ == '__main__': print('This module does not run as a script.')