Exemple #1
0
def combine_upstream_and_gen_df(gen_df, upstream_df):
    """
    Combine the generation and upstream dataframes into a single dataframe.
    The emissions represented here are the annutal emissions for all power
    plants. This dataframe would be suitable for further analysis.

    Parameters
    ----------
    gen_df : dataframe
        The generator dataframe, generated by get_gen_plus_netl or
        get_generation_process_df. Note that get_generation_process_df returns
        two dataframes. The intention would be to send the second returned
        dataframe (plant-level emissions) to this routine.
    upstream_df : dataframe
        The upstream dataframe, generated by get_upstream_process_df
    """

    import electricitylci.combinator as combine
    import electricitylci.import_impacts as import_impacts

    print("Combining upstream and generation inventories")
    combined_df = combine.concat_clean_upstream_and_plant(gen_df, upstream_df)
    canadian_gen = import_impacts.generate_canadian_mixes(combined_df)
    combined_df = pd.concat([combined_df, canadian_gen], ignore_index=True)
    return combined_df, canadian_gen
Exemple #2
0
def get_generation_process_df(regions=None, **kwargs):
    """
    Create a dataframe of emissions from power generation by fuel type in each
    region. kwargs would include the upstream emissions dataframe (upstream_df) if
    upstream emissions are being included.

    Parameters
    ----------
    regions : str, optional
        Regions to include in the analysis (the default is None, which uses the value
        read from a settings YAML file). Other options include "eGRID", "NERC", "BA",
        "US", "FERC", and "EIA"

    Returns
    -------
    DataFrame
        Each row represents information about a single emission from a fuel category
        in a single region. Columns are:

       'Subregion', 'FuelCategory', 'FlowName', 'FlowUUID', 'Compartment',
       'Year', 'Source', 'Unit', 'ElementaryFlowPrimeContext',
       'TechnologicalCorrelation', 'TemporalCorrelation', 'DataCollection',
       'Emission_factor', 'Reliability_Score', 'GeographicalCorrelation',
       'GeomMean', 'GeomSD', 'Maximum', 'Minimum'
    """
    from electricitylci.generation import create_generation_process_df
    from electricitylci.combinator import concat_clean_upstream_and_plant
    if config.model_specs.include_renewable_generation is True:
        generation_process_df = get_gen_plus_netl()
    else:
        generation_process_df = create_generation_process_df()
    if config.model_specs.include_netl_water is True:
        import electricitylci.plant_water_use as water
        water_df = water.generate_plant_water_use(
            config.model_specs.eia_gen_year)
        generation_process_df = concat_clean_upstream_and_plant(
            generation_process_df, water_df)

    if config.model_specs.include_upstream_processes is True:
        try:
            upstream_df = kwargs['upstream_df']
            upstream_dict = kwargs['upstream_dict']
        except KeyError:
            print(
                "A kwarg named 'upstream_dict' must be included if include_upstream_processes"
                "is True")
#        upstream_dict = write_upstream_process_database_to_dict(
#            upstream_df
#        )
#        upstream_dict = write_upstream_dicts_to_jsonld(upstream_dict)
        combined_df, canadian_gen = combine_upstream_and_gen_df(
            generation_process_df, upstream_df)
        gen_plus_fuels = add_fuels_to_gen(generation_process_df, upstream_df,
                                          canadian_gen, upstream_dict)
    else:
        import electricitylci.import_impacts as import_impacts
        canadian_gen_df = import_impacts.generate_canadian_mixes(
            generation_process_df)
        generation_process_df = pd.concat(
            [generation_process_df, canadian_gen_df], ignore_index=True)
        gen_plus_fuels = generation_process_df
        #This change has been made to accomodate the new method of generating
        #consumption mixes for FERC regions. They now pull BAs to provide
        #a more accurate inventory. The tradeoff here is that it's no longer possible
        #to make a FERC region generation mix and also provide the consumption mix.
        #Or it could be possible but would requir running through aggregate twice.


#        generation_process_df = aggregate_gen(
#            gen_plus_fuels, subregion=regions
#        )
    if regions is None:
        regions = config.model_specs.regional_aggregation
    if regions in ["BA", "FERC", "US"]:
        generation_process_df = aggregate_gen(gen_plus_fuels, subregion="BA")
    else:
        generation_process_df = aggregate_gen(gen_plus_fuels,
                                              subregion=regions)
    return generation_process_df
if __name__ == "__main__":
    import electricitylci.coal_upstream as coal
    import electricitylci.natural_gas_upstream as ng
    import electricitylci.petroleum_upstream as petro
    import electricitylci.geothermal as geo
    import electricitylci.solar_upstream as solar
    import electricitylci.wind_upstream as wind
    import electricitylci.nuclear_upstream as nuke

    coal_df = coal.generate_upstream_coal(2016)
    ng_df = ng.generate_upstream_ng(2016)
    petro_df = petro.generate_petroleum_upstream(2016)
    geo_df = geo.generate_upstream_geo(2016)
    solar_df = solar.generate_upstream_solar(2016)
    wind_df = wind.generate_upstream_wind(2016)
    nuke_df = nuke.generate_upstream_nuc(2016)
    upstream_df = concat_map_upstream_databases(
        coal_df, ng_df, petro_df, geo_df, nuke_df, solar_df, wind_df
    )
    plant_df = altg.create_generation_process_df()
    plant_df["stage_code"] = "Power plant"
    print(plant_df.columns)
    print(upstream_df.columns)
    combined_df = concat_clean_upstream_and_plant(plant_df, upstream_df)
    canadian_inventory = import_impacts.generate_canadian_mixes(combined_df)
    combined_df = pd.concat([combined_df, canadian_inventory])
    combined_df.sort_values(
        by=["eGRID_ID", "Compartment", "FlowName", "stage_code"], inplace=True
    )
    combined_df.to_csv(f"{output_dir}/combined_df.csv")