Completed
Push — master ( 783fd3...8a64e3 )
by
unknown
21:20
created

scenario_builder.snippets.load_NEP_pp_capacities()   A

Complexity

Conditions 1

Size

Total Lines 11
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 11
rs 10
c 0
b 0
f 0
cc 1
nop 1
1
import pandas as pd
2
from reegis import geometries as geo_reegis
3
from deflex import geometries as geo_deflex
4
from reegis import land_availability_glaes, demand_disaggregator
5
from disaggregator import data
6
7
def get_cost_emission_scenario_data(path_to_data):
8
9
    commodity_sources = dict.fromkeys({'StatusQuo', 'NEP2030', 'AllElectric', 'SynFuel'})
10
11
    for n in commodity_sources.keys():
12
        cost_data = pd.read_excel(path_to_data, n)
13
        cost_data.set_index('Unnamed: 0', drop=True, inplace=True)
14
        cost_data.drop(['emission_cost', 'total_cost'], inplace=True)
15
        commodity_sources[n] = cost_data
16
17
    return commodity_sources
18
19
20
def return_normalized_domestic_profiles(regions, df):
21
22
    test = df.groupby(level=[0,2], axis=1).sum()
23
    profile_domestic = pd.DataFrame(index=test.index, columns=regions.index[0:18] )
24
25
    for reg in regions.index[0:18]:
26
        profile_domestic[reg] = test[reg]["domestic"] + test[reg]["retail"]
27
28
    profile_domestic = profile_domestic.div(profile_domestic.sum())
29
30
    return profile_domestic
31
32
33
def return_normalized_industrial_profiles(regions, df):
34
35
    test = df.groupby(level=[0, 2], axis=1).sum()
36
    profile_domestic = pd.DataFrame(index=test.index, columns=regions.index[0:18])
37
38
    for reg in regions.index[0:18]:
39
        profile_domestic[reg] = test[reg]["industrial"]
40
41
    profile_industrial = profile_domestic.div(profile_domestic.sum())
42
43
    return profile_industrial
44
45
46
def transform_NEP_capacities_to_de21(path_to_NEP_capacities):
47
    de21 = geo_deflex.deflex_regions(rmap='de21')
48
    fed_states = geo_reegis.get_federal_states_polygon()
49
    nuts3_index = data.database_shapes().index
50
51
    # Load NEP capacities
52
    NEP2030_capacity = pd.read_excel(path_to_NEP_capacities)
53
    NEP2030_capacity.set_index('fedstate', drop=True, inplace=True)
54
    NEP2030_capacity = NEP2030_capacity.multiply(1e3)
55
56
    #Fetch GLAES RES capacities and compare to NEP data
57
    glaes_capacity = land_availability_glaes.aggregate_capacity_by_region(fed_states)
58
    compare_RES = pd.concat([glaes_capacity, NEP2030_capacity['onshore'], NEP2030_capacity['offshore'],
59
                      NEP2030_capacity['solar pv']], axis=1)
60
61
    compare_RES.drop(['N0', 'N1', 'O0', 'P0'], axis=0, inplace=True)
62
63
    scaling_wind = compare_RES['onshore'] / compare_RES['P_wind']
64
    scaling_pv = compare_RES['solar pv'] / compare_RES['P_pv']
65
66
    mapped_nuts = demand_disaggregator.get_nutslist_for_regions(fed_states)
67
    res_capacity_nuts3 = land_availability_glaes.get_pv_wind_capacity_potential_by_nuts3()
68
69
        # Zuordnung der installierten Leistungen zu den jeweiligen Landkreisen
70
    P_NEP_nuts3 = pd.DataFrame(index=nuts3_index, columns=['onshore', 'pv'])
71
72
    for zone in compare_RES.index:
73
        region_pick = mapped_nuts.loc[zone]
74
        for nuts3 in region_pick.iloc[0]:
75
            P_NEP_nuts3.loc[nuts3]['onshore'] = res_capacity_nuts3['P_wind'][nuts3] * scaling_wind[zone]
76
            P_NEP_nuts3.loc[nuts3]['pv'] = res_capacity_nuts3['P_pv'][nuts3] * scaling_pv[zone]
77
78
    NEP_capacity_de21 = pd.DataFrame(
79
        index=de21.index, columns=["P_wind", "P_pv"]
80
    )
81
    nuts3_list_de21 = demand_disaggregator.get_nutslist_for_regions(de21)
82
83
    for zone in de21.index:
84
        idx = nuts3_list_de21.loc[zone]["nuts"]
85
        NEP_capacity_de21.loc[zone]["P_wind"] = P_NEP_nuts3["onshore"][idx].sum()
86
        NEP_capacity_de21.loc[zone]["P_pv"] = P_NEP_nuts3["pv"][idx].sum()
87
88
    return NEP_capacity_de21
89
90
91
def load_NEP_pp_capacities(path_to_NEP_capacities):
92
    NEP2030_capacity = pd.read_excel(path_to_NEP_capacities)
93
    NEP2030_capacity.set_index('fedstate', drop=True, inplace=True)
94
    NEP2030_capacity = NEP2030_capacity.multiply(1e3)
95
96
    # Select pp capacities
97
    pp_capacities = pd.concat([NEP2030_capacity['lignite'], NEP2030_capacity['hard coal'], NEP2030_capacity['oil'],
98
                             NEP2030_capacity['natural gas'], NEP2030_capacity['biomass'],
99
                             NEP2030_capacity['other']], axis=1)
100
101
    return pp_capacities
102
103
104
def aggregate_by_region(regions, data):
105
    out_df = pd.Series(index=regions.index)
106
    nuts3_list = demand_disaggregator.get_nutslist_for_regions(regions)
107
108
    for zone in regions.index:
109
        idx = nuts3_list.loc[zone]["nuts"]
110
        out_df.loc[zone] = data[idx].sum()
111
112
    return out_df
113
114