'Raw' Datasets#
Bevölkerung#
Einwohnerzahl nach Gemeinden des Statistischen Bundesamts.
Dataset: raw/destatis_gv
OpenStreetMap#
OpenStreetMap Datenauszug Deutschland.
Quelle: https://download.geofabrik.de/europe/germany-230101.osm.pbf
Ist nicht Teil des Eingangsdaten-Packages - manueller Download erforderlich.
Dataset: raw/osm
Erzeugungsanlagen aus Marktstammdatenregister#
Ereugungsanlagen aus dem Markstammdatenregister, das mit dem Tool open-mastr erstellt und abgelegt wurde. Die Daten wurden folgendermaßen erstellt:
from open_mastr import Mastr
db = Mastr()
db.download("bulk")
db.to_csv(None) # (None for all data)
Die abgelegten CSV-Dateien (alle Tabellen) wurden um einen benutzerdefinierten
Export von Speichereinheiten mit
sqlite3 -header -csv -separator "," open-mastr.db "select * from storage_units;" > bnetza_mastr_storage_unit_raw.csv
erweitert. Anschließend wurden alle Dateien komprimiert.
Das Marktstammdatenregister (MaStR) ist ein deutsches Register, welches von der Bundesnetzagentur (BNetza) bereitgestellt wird und alle in Deutschland befindlichen Strom- und Gasanlagen erfasst.
Dataset: raw/bnetza_mastr
Installierte Leistungen von Biomasse-Konversionstechnologien#
Die installierten Leistungen in MW wird im Szenario 80 % Transformationspfad und 2,6 Mio. ha Anbauflächen im Jahr 2020 und 2050 der Tabelle 13 im Dokument "Technoökonomische Analyse und Transformationspfade des energetischen Biomassepotentials (TATBIO)" für die folgenden Konversionsanlagen von Biomasse entnommen:
- Biomethan-Blockheizkraftwerk
- Holzhackschnitzelkessel Sektor Industrie
- Pelletkessel Sektor GHD
- Holzhackschnitzelkessel Sektor GHD
- Scheitholzvergaserkessel
- Pelletkessel Sektor Gebäude
- Biogasanlage + Blockheizkraftwerk
- Biomethan Gas- und Dampfkombikraftwerk
- Klärschlammfaulung + Blockheizkraftwerk
- Papier-Zellstoff-KWK
- Holzvergaser + Blockheizkraftwerk
- Mikro-Holzgas-Blockheizkraftwerk
Die Konversionstechnologien sind in der Spalte "technology" gelistet, während sich ihre installierten Leistungen für die beiden Projektionsjahre in den Spalten "capacity_[MW]2020" und "capacity[MW]_2050" befinden.
In den Spalten "decentral" und "central" wird mit "x" angegeben, ob jeweils ein dezentraler und zentraler Einsatz der Konversionsanlage Stand der Technik ist.
In der Spalte "carrier" wird analog zur Konvention der Namensgebung im Energiesystem (siehe esys.md) der jeweilige in die Konversionsanlage eintretende Energieträger notiert. Diese werden Abbildung 3 des Dokuments entommen. Der Energieträger Schwarzlauge wird vereinfachend dem Energieträger feste Biomasse bzw. Holz zugeordnet. Klärgas und Holzgas werden vereinfachend Biogas zugeordnet.
In der Spalte "tech" findet die Zuordnung zu der Technologie anhand der im Energiesystem verwendeten Komponenten (siehe esys.md) statt.
Dataset: raw/dbfz_biomass_heat_capacities
Technologiedaten#
Jahresvolllaststunden#
Anhand typischer heutiger und prognostizierter Werte für Sachsen-Anhalt werden folgende Jahresvolllaststunden angenommen:
Technologie | Jahr | Volllaststunden | Quelle(n) für Annahme | Anmerkung |
---|---|---|---|---|
Windenergie | 2022 | 1800 | foederal-erneuerbar | |
2045 | 2300 | PV- und Windflächenrechner | ||
Freiflächen-PV | 2022 | 980 | foederal-erneuerbar, ISE | |
2045 | 980 | PV- und Windflächenrechner, Ariadne Szenarienreport | ||
Aufdach-PV | 2022 | 910 | foederal-erneuerbar, ISE | |
2045 | 910 | Ariadne Szenarienreport | ||
Laufwasserkraft | 2022 | 3800 | foederal-erneuerbar | |
2045 | 3800 | foederal-erneuerbar | ||
Bioenergie | 2022 | 6000 | foederal-erneuerbar, ISE | Bioenergie-Stromerzeugung (ohne biogenen Teil des Abfalls) |
Datei: technology_data.json
→ full_load_hours
TBD: Generalisieren - automatische Generierung anhand von Global Wind Atlas / Global Solar Atlas.
Leistungsdichte#
Installierbare Leistung pro Fläche / spezifischer Flächenbedarf:
- Windenergie: 21 MW/km²
- PV-Freiflächenanlagen: 100 MW/km²
- PV-Aufdachanlagen: 140 MW/km²
- Solarthermie: ? MW/km²
Quelle: PV- und Windflächenrechner
Datei: technology_data.json
→ power_density
Nennleistung Windenergieanlage#
Als Zukunftsanlage für 2045 wird eine Enercon E126 6500 (6,5 MW) angenommen. Diese wird für die Berechnung der Anlagenanzahl in den Ergebnissen verwendet.
Datei: technology_data.json
→ nominal_power_per_unit
Batterien#
- Kleinbatterien/Heimspeicher: Nennkapazität je installierter PV-Peakleistung und Speichernennleistung je installierter Speichernennkapazität aus bnetza_mastr und HTW.
- Großbatterien: Speichernennleistung je installierter Speichernennkapazität aus bnetza_mastr.
Datei: technology_data.json
→ batteries
Warmwasserspeicher#
- Kleinwärmespeicher (dezentral): Speichernennleistung je installierter Speichernennkapazität aus DEA
- Großwärmespeicher (Fernwärme): Speichernennleistung je installierter Speichernennkapazität aus DEA
Datei: technology_data.json
→ hot_water_storages
Kosten und Wirkungsgrade#
Datei: raw_costs_efficiencies.csv
Allgemein#
Preise werden aus den Technologie Datenblättern der Danish Energy Agency ([1], [2], [3], [4]) entnommen. Abweichungen werden gesondert genannt.
alle Preise werden auf Euro im Jahr 2020 (dis-)kontiert und damit inflationsbereinigt.
Für Quellen 1, 2, 3, 4 ist das meist die Umrechnung von 2015 zu 2020. Dafür folgende Formel verwendet:
P_(2020) = P_(2015)*f_(infl)
f_(infl) = (1+i_(2015))*(1+i_(2016))...*(1+i_(2019))
f_(infl) = 1,005 * 1,005 * 1.015 * 1,018 * 1,014 = 1,0582
Werte für 2045 werden durch lineare Extrapolation ermittelt.
biogas_upgrading plant#
Quelle: [4] "82 Biogas, upgrading"
Aufbereitung von Biogas zu Bio-SNG
biogas bpchp_central#
Quelle: 1 "06 Gas engines, biogas"
Backpressure Combined heat and power (bpchp) modelliert BHKWs
thermal effiency = electrical_effiency / (c_b+c_v) ( laut 1 S. 390)
biogas bpchp_decentral#
Quelle: 1 "06 Gas engines, biogas"
Identische Werte zu biogas bpchp_central. Split fürs Energiesystem, aber eingesetzte Technologie identisch.
biogas_plant#
Quelle 4: "81 Biogas Plant, Basic conf."
Stellt Biogas bereit, welches in KWK (biogas bpchp_central, biogas bpchp_decentral) genutzt werden kann
boiler_central#
Quelle 1: "44 Natural Gas DH Only"
boiler_decentral#
Quelle 2: "202 Gas boiler, ex single", "202 Gas boiler, ex apart", "202 Gas boiler, new single", "202 Gas boiler, new apart"
Es werden für jedes Szenario jeder Wert aus 4 Komponenten zusammengesetzt.
Diese sind die Kombinationen aus:
- Altbau-Neubau
- Einfamilienhaus-Mehrfamilienhaus
Diese Kompnonten werden durch Faktoren gewichtet zusammengefasst.
Für 2020:
- Verhältnis von Altbau-Neubau aus 7
- Verhätnis von Einfamilienhaus-Mehrfamilienhaus im Neubau aus 6, verbaute Gasheizungen aggregiert
- Verhätnis von Einfamilienhaus-Mehrfamilienhaus im Altbau wird als 0.7 / 0.3 angenommen
Für 2045:
- Verhältnis von Altbau-Neubau aus 7
- Verhätnis von Einfamilienhaus-Mehrfamilienhaus im Neubau aus 6, verbaute Gasheizungen in 2020
- Verhätnis von Einfamilienhaus-Mehrfamilienhaus im Altbau wird als 0.7 / 0.3 angenommen
volle Berechnungen siehe "boiler_small_script.py" im Code Anhang
ch4 bpchp_central#
Quelle: 1 "06 Gas engines, natural gas"
Backpressure Combined heat and power (bpchp) modelliert BHKWs
thermal effiency = electrical_effiency / (c_b+c_v) ( laut 1 S. 390)
ch4 bpchp_decentral#
Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and "06 Gas engines, natural gas"
Identische Werte zu ch4 bpchp_central. Split fürs Energiesystem, aber eingesetzte Technologie identisch.
ch4 extchp_central#
Quellen: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and "05 Gas turb. CC, steam extract., Large", [14] S. 20-21
ch4 extchp_decentral#
Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and "05 Gas turb. CC, steam extract., Large"
[14] S. 20-21
Identisch wie ch4 extchp_central
gt#
Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 04 Gas turb. simple cycle, L"
gas turbine, offener Prozess
heatpump_central#
Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 40 Comp. hp, airsource 10 MW"
Wärmepumpentechnologie (Luft-Wasser-WP) aus Langfristigkeitsszenarien
heatpump_decentral#
Quellen: 2)
Es werden für jedes Szenario jeder Wert aus 8 Komponenten zusammengesetzt. Diese sind die Kombinationen aus:
- Sole-Umwelt
- Einfamilienhaus-Mehrfamilienhaus (fast alle WP in Einfamilienhäsuern!)
- Altbau-Neubau
Es wird das gemittelte Verhätnis Deutschlandweit der letzten 20 Jahre angenommen (BBSR; Bundesamt für Bauwesen und Raumordnung)
Für 2020 wurden Annahmen für das allgemeine Verhältnis zwischen den Möglichkeiten angenommen:
- Sole-Umwelt sind die aggregierten Absatzzahlen aus [5]
- Einfamilienhaus-Mehrfamilienhaus aus 6
- Altbau-Neubau aus 7
Mit diesen wird für 2045 wurden Annahmen für das allgemeine Verhältnis zwischen den Möglichkeiten angenommen:
- Sole-Umwelt = 0.87/0.13 (Das sind die Absatzzahlen aus 2022 aus der Branchenstudie)
- Einfamilienhaus-Mehrfamilienhaus = 0.7 / 0.3 (Das ist eine freie Annahme, die eine fortschreitende Verbreitung in Mehrfamilienhäusern annimmt)
- Altbau-Neubau = 0.699 / 0.301 (das gemittelte Verhätnis Deutschlandweit der letzten 20 Jahre)
Die Faktoren in 2045 sind daher:
- Altbau_Umwelt_EFH = 0.4256
- Altbau_Umwelt_MFH = 0.1824
- Altbau_Sole_EFH = 0.0636
- Altbau_Sole_MFH = 0.0272
- Neubau_Umwelt_EFH = 0.1833
- Neubau_Umwelt_MFH = 0.0785
- Neubau_Sole_EFH = 0.0273
- Neubau_Sole_MFH = 0.0117
Berechnung siehe "heatpump_small_script.py" im Code Anhang
large_scale_battery#
Quellen: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 180 Lithium Ion Battery", Cebulla [9] S. 181
storage_fixom_cost Berechnung aus UMAS/Oemof_B3 übernommen, ohne Quelle dieser Berechnung gefunden zu haben.
storage_fixom_cost = 0,005 * storage_capacity_cost_overnight
Große Differenzen zwischen Windnode und UMAS, UMAS Methodik übernommen
pth_central#
Quellen: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 41 Electric Boilers, small", "41 Electric Boilers, large"
Es wurde ein Mittelwert aus den Electric Biolers small und large gebildet, um relevante Größen in ABW abzubilden.
pth_decentral#
Quellen: 2: " 216 Electric heating,new single", "216 Electric heating,new apart"
Annahmen zu Gebäudebestand siehe heatpump_decentral, nur ohne Kombination mit Altbau, da power to heat in Altbauten vernachlässigbar selten (und wenn in anderen Technologien wie Nachtspeicherheizungen) vorkommt.
Berechnungen siehe "pth_decentral_script" im Code Anhang
small_scale_battery#
Quelle: 15, [17] S. 3
- capacity_cost_overnight: [15] S. 41
- effiency, lost_rate, lifetime: [15] S.v91
storage heat_central#
Quelle 3: " 141 Large hot water tank"
- capacity_cost_overnight und fixom_cost ignoriert, da storage_capacity_cost_overnight, storage_fixom_cost einen Wert hat
- storage heat_decentral
Quelle 3: " 141 Large hot water tank"
capacity_cost_overnight und fixom_cost ignoriert, da storage_capacity_cost_overnight, storage_fixom_cost einen Wert hat
Große Differenzen zwischen UMAS und Windnode, UMAS Methodik übernommen
hydro ror#
Quellen: [16]
- fixom_cost: S. 78
- capacity_cost_overnight: S.75
- lifetime: S. 72
lignite oven#
Quellen: 1 " 206 Wood stove, single, ex tank"
Der Kohleofen ist eine Komponente, die für die Abbildung des Ist-Zusandes relevant ist. Die Kohleheizung wird durch gesetzliche Regulierung nicht mehr neu verbaut werden können, wodurch die Komponente für die Optimierung nicht relevant ist. Auch die Datenlage für die Kohleheizung sehr schlecht ist, die Daten werden daher approximiert.
Keine direkten Werte vorhanden, daher Modellierung anhand der wood stove Werte
efficiency:
Differenz der Energie zwischen Holz und Kohle liegt im Heizwert des Brennstoffs. Daher wird die Effizienz der wood stove mit Faktor des Verhältnisses der Heizwerte multipliziert. Daten für Heizwerte von BMWK 11 und 12 ergibt einen Faktor von 4/3
fixom_cost:
Bestehen großteils aus Brennstoffkosten. Änderung zu wood stove besteht aus Heizwert (gewonnene Energie pro kg) und Preisdiff pro Kilogramm
Preise aus brikett-rekord.com [13]
lifetime:
identisch wie wood stove
marginal-cost: identisch wie wood stove
Aus den Annahmen folgt, dass die Investkosten ignoriert werden können.
pv_ground#
Quelle 1: " 22 Utility-scale PV", Vergleich [10]
marginal_cost = 0, da in Quellen nicht vorhanden
Kosten aus 1 im Bereich von [10]
pv_rooftop#
Quelle 1: " 22 PV commercial&industrial rooftop", "22 PV residential", Vergleich [10]
gewichteter Mittelwert zwischen kommerziellen und Wohnhaus PV.
Gewichtung anhand openMaStR Daten aus Pipeline
import geopandas as gpd
import os.path
data_folder = os.path.join("/ROAD/TO/DATA")
data = "bnetza_mastr_pv_roof_region.gpkg"
df = gpd.read_file(os.path.join(data_folder, data))
sum = df[["usage_sector", "status"]].groupby("usage_sector").count().sum()
industrial = (df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Industrie"][0] + \
df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Sonstige"][0] + \
df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Landwirtschaft"][0] + \
df[["usage_sector", "status"]].groupby("usage_sector").count().loc[
"Gewerbe, Handel und Dienstleistungen"][0]) \
/ sum
residental = (df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Öffentliches Gebäude"][0] +
df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Haushalt"][0]) / sum
return [industrial, residental]
ergibt 25 % industrial und 75% Haushalte.
marginal_cost = 0, da in Quellen nicht vorhanden
Kosten aus 1 im Bereich von [10]
thermalcollector_central#
Quelle: [1](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and " 46 Solar District Heating"
thermalcollector_decentral#
Quelle: [2](https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-individual-heating-plants " 215 Solar heating,ex single", "215 Solar heating,ex apart", "215 Solar heating,new single", "215 Solar heating,new apart"
Annahmen zu Gebäudebestand siehe heatpump_decentral.
Berechnungen siehe "thermalcollector_decentral_script" im Code Anhang
wind onshore#
Quelle 1: " 20 Onshore turbines", Vergleich 10
EE Kosten durchweg kleiner als in Windnode in 2020
Windnode bezieht sich auf Frauenhofer ISE aus 2018, Vorgängerstudie zu 10
Frauenhofer (S.
11) 10 CAPEX-Range höher als DEA 1 in 2020
1400000-2000000 10 zu 1190000 1 €/MW
keine Aussagen in Frauenhofer 10 über 2045
wir wählen DEA als Quelle für die Vergleichbarkeit, da Vergleichbarkeit in der Optimierung der Modellierung Vorrang hat
wood extchp_central#
Quelle: 1 " 09a Wood Chips, Medium"
[14] S. 20-21
wood extchp_decentral#
Quelle: 1 " 09a Wood Chips, Medium"
[14] S. 20-21
identisch zu wood extchp_central
wood oven#
Quelle: 2, " 204 Biomass auto,ex single", "204 Biomass auto,new single", "204 Biomass auto,ex apart", "204 Biomass auto,new apart"
Annahmen zu Gebäudebestand siehe heatpump_decentral.
Berechnungen siehe "wood_oven_script" im Code Anhang
Quellen#
[1] Danish Energy Agency (2016): "Technology Data - Energy Plants for Electricity and District heating generation", Version 13, von https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-generation-electricity-and
[2] Danish Energy Agency (2016): "Technology Data for heating installations", Version 4, von https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-individual-heating-plants
[3] Danish Energy Agency (2018): "Technology Data – Energy storage", Version 7, von https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-energy-storage
[4] Danish Energy Agency (2017): "Technology Data – Renewable fuels", Versoin 9, von https://ens.dk/en/our-services/projections-and-models/technology-data/technology-data-renewable-fuels
[5] Karl-Heinz Backhaus (Vaillant), Dr. Hendrik Ehrhardt (Stiebel Eltron), Sven Kersten (NIBE), Steffen Moser (EnBW), Frank Richert (Wolf), Ingo Rieger (Bosch), Egbert Tippelt ( Viessmann), André Jacob (BWP), Johanna Otting (BWP), Björn Schreinermacher (BWP)(2023): "Branchenstudie 2023: Marktentwicklung – Prognose –Handlungsempfehlungen", Bundesverband Wärmepumpe (BWP) e. V.
[6] Statistisches Landesamt Sachsen-Anhalt: "GENESIS-Tabelle: 31121-0006, Statistik der Baufertigstellungen", von https://genesis.sachsen-anhalt.de/genesis//online?operation=table&code=31121-0006&bypass=true&levelindex=0&levelid=1682324189765#abreadcrumb, Stand: 11.04.2023
[7] Statista Research Department(2021): "Struktur des Wohnungsbaus nach Neubau und Sanierung in Deutschland in den Jahren 2001 bis 2020", von https://de.statista.com/statistik/daten/studie/202207/umfrage/struktur-des-wohnungsbaus-nach-art-der-bauleistung-in-deutschland/, Stand: 03.04.2023 12:26:20
[8] Statista: "Daten und Fakten zur Inflation und den Verbraucherpreisen" , von https://de.statista.com/themen/112/inflation/#topicOverview , Stand: 29.03.2023
[9] Cebulla, Felix (2017): "Storage demand in highly renewable energy scenarios for Europe", OPUS - Online Publikationen der Universität Stuttgart, von https://elib.uni-stuttgart.de/handle/11682/9778
[10] Frauenhofer ISE (2019): "Stromgestehungskosten erneuerbare Energien", von https://www.ise.fraunhofer.de/de/veroeffentlichungen/studien/studie-stromgestehungskosten-erneuerbare-energien.html
[11] BMWK (2021): "Energiedaten" von https://www.bmwk.de/Redaktion/DE/Artikel/Energie/energiedaten-gesamtausgabe.html
[12] Michael Herrmann, Jürgen Weber: Öfen und Kamine: Raumheizungen fachgerecht planen und bauen. Beuth Verlag, 201, von https://books.google.de/books?id=n0fVYjrHAlwC&pg=PA58#v=onepage&q&f=false
[13] www.brikett-rekord.com: "Energiekostenvergleich", von https://www.brikett-rekord.com/de/heizwertvergleich-rekord-briketts.html, letzter Abruf 8.5.2023
[14] WindNode: Modell, Methodik, Daten, ABW; von: RLI letzer Abruf 8.8.2023
[15] Fluri, Verena: "Wirtschaftlichkeit von zukunftsfähigen Geschäftsmodellen dezentraler Stromspeicher" von https://www.zhb-flensburg.de/fileadmin/content/spezial-einrichtungen/zhb/dokumente/dissertationen/fluri/fluri-2019-wirtschaftlichkeit-dez-stromspeicher.pdf, letzter Abruf 8.8.2023
[16] Schröder, Andreas; Kunz, Friedrich; Meiss, Jan; Mendelevitch, Roman; Hirschhausen, Christian von: "Current and Prospective Costs of Electricity Generation until 2050" von https://www.diw.de/documents/publikationen/73/diw_01.c.424566.de/diw_datadoc_2013-068.pdf, letzter Abruf 8.8.2023
[17] Prüggler, Wolfgang (2019): "HEIMSPEICHERSYSTEME UND ZENTRALE BATTERIESPEICHER – KRITISCHE FAKTOREN DER WIRTSCHAFTLICHKEIT" von https://ens.dk/sites/ens.dk/files/Analyser/technology_data_catalogue_for_energy_storage.pdf, letzter Abruf 8.8.2023
Code Anhang#
wood_oven_script.py
import pandas as pd
import os.path
def linear_interpolate_2045(wert_1, wert_2):
zeit_1 = 2040
zeit_2 = 2050
wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))
return wert
def get_agg_price_2045(dic):
# Neubau und Sanierungen allg nach BMI f. Deutschland
neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
altbau = 1 - neubau
# Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis 2020
single_new = 693 / 763
multiple_new = (763 - 693) / 763
# Einfamilinehaus-Mehrfamilienhaus im Altbau Annahme:
single_faktor = 0.7
multiple_faktor = 0.3
single_new_faktor = neubau * single_new
multiple_new_faktor = neubau * multiple_new
single_old_faktor = altbau * single_faktor
multiple_old_faktor = altbau * multiple_faktor
single_old = single_old_faktor * dic["single_old_price"]
multiple_old = multiple_old_faktor * dic["multiple_old_price"]
single_new = single_new_faktor * dic["single_new_price"]
multiple_new = multiple_new_faktor * dic["multiple_new_price"]
preis = single_old + multiple_old + single_new + multiple_new
return preis
## Daten aus DEA:
## einlesen von Daten
data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")
##datensheets
single_old = pd.read_excel(data, "204 Biomass auto,ex single", skiprows=4, nrows=33)
multiple_old = pd.read_excel(data, "204 Biomass auto,ex apart", skiprows=4, nrows=33)
single_new = pd.read_excel(data, "204 Biomass auto,new single", skiprows=4, nrows=33)
multiple_new = pd.read_excel(data, "204 Biomass auto,new apart", skiprows=4, nrows=33)
dic_capacity_cost_overnight_2045 = {
"single_old_price": linear_interpolate_2045((single_old.iat[19,5]*1000)/(single_old.iat[0,5]/1000), (single_old.iat[19,6]*1000)/(single_old.iat[0,6]/1000)),
"multiple_old_price": linear_interpolate_2045((multiple_old.iat[19,5]*1000)/(multiple_old.iat[0,5]/1000), (multiple_old.iat[19,6]*1000)/(multiple_old.iat[0,6]/1000)),
"single_new_price": linear_interpolate_2045((single_new.iat[19,5]*1000)/(single_new.iat[0,5]/1000), (single_new.iat[19,6]*1000)/(single_new.iat[0,6]/1000)),
"multiple_new_price": linear_interpolate_2045((multiple_new.iat[19,5]*1000)/(multiple_new.iat[0,5]/1000), (multiple_new.iat[19,6]*1000)/(multiple_new.iat[0,6]/1000)),
}
dic_effiency_2045 = {
"single_old_price": linear_interpolate_2045(single_old.iat[3,5], single_old.iat[3,6]),
"multiple_old_price": linear_interpolate_2045(multiple_old.iat[3,5], multiple_old.iat[3,6]) ,
"single_new_price": linear_interpolate_2045(single_new.iat[3,5], single_new.iat[3,6]),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[3,5], multiple_new.iat[3,6])
}
dic_fixom_cost_2045 = {
"single_old_price": linear_interpolate_2045((single_old.iat[24,5])/(single_old.iat[0,5]/1000), (single_old.iat[24,6])/(single_old.iat[0,6]/1000)),
"multiple_old_price": linear_interpolate_2045((multiple_old.iat[24,5])/(multiple_old.iat[0,5]/1000), (multiple_old.iat[24,6])/(multiple_old.iat[0,6]/1000)),
"single_new_price": linear_interpolate_2045((single_new.iat[24,5])/(single_new.iat[0,5]/1000), (single_new.iat[24,5])/(single_new.iat[0,5]/1000)),
"multiple_new_price": linear_interpolate_2045((multiple_new.iat[24,5])/(multiple_new.iat[0,5]/1000), (multiple_new.iat[24,6])/(multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
"single_old_price": linear_interpolate_2045(single_old.iat[5,5], single_old.iat[5,6]),
"multiple_old_price": linear_interpolate_2045(multiple_old.iat[5,5], multiple_old.iat[5,6]),
"single_new_price": linear_interpolate_2045(single_new.iat[5,5], single_new.iat[5,6]),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[5,5], multiple_new.iat[5,6]),
}
dic_marginal_cost_2045 = {
"single_old_price": linear_interpolate_2045(single_old.iat[23,2] / 1000, single_old.iat[23,2] / 1000),
"multiple_old_price": linear_interpolate_2045(multiple_old.iat[23,2] / 1000, multiple_old.iat[23,2] / 1000),
"single_new_price": linear_interpolate_2045(single_new.iat[23,2] / 1000,single_new.iat[23,2] ),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[23,2] / 1000, multiple_new.iat[23,2] / 1000),
}
dic_2045 = [dic_capacity_cost_overnight_2045,dic_effiency_2045, dic_fixom_cost_2045, dic_lifetime_2045, dic_marginal_cost_2045]
val_2045 = []
## Berechnungen
for dic in dic_2045:
val_2045.append(get_agg_price_2045(dic))
print(val_2045)
thermal_collector_small_script.py
import pandas as pd
import os.path
def linear_interpolate_2045(wert_1, wert_2):
zeit_1 = 2040
zeit_2 = 2050
wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))
return wert
def get_agg_price_2045(dic):
# Neubau und Sanierungen allg nach BMI f. Deutschland
neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
altbau = 1 - neubau
# Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis 2020
single_new = 693 / 763
multiple_new = (763 - 693) / 763
# Einfamilinehaus-Mehrfamilienhaus im Altbau Annahme:
single_faktor = 0.7
multiple_faktor = 0.3
single_new_faktor = neubau * single_new
multiple_new_faktor = neubau * multiple_new
single_old_faktor = altbau * single_faktor
multiple_old_faktor = altbau * multiple_faktor
single_old = single_old_faktor * dic["single_old_price"]
multiple_old = multiple_old_faktor * dic["multiple_old_price"]
single_new = single_new_faktor * dic["single_new_price"]
multiple_new = multiple_new_faktor * dic["multiple_new_price"]
preis = single_old + multiple_old + single_new + multiple_new
return preis
## Daten aus DEA:
## einlesen von Daten
data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")
##datensheets
single_old = pd.read_excel(data, "215 Solar heating,ex single", skiprows=4, nrows=33)
multiple_old = pd.read_excel(data, "215 Solar heating,ex apart", skiprows=4, nrows=33)
single_new = pd.read_excel(data, "215 Solar heating,new single", skiprows=4, nrows=33)
multiple_new = pd.read_excel(data, "215 Solar heating,new apart", skiprows=4, nrows=33)
dic_capacity_cost_overnight_2045 = {
"single_old_price": linear_interpolate_2045((single_old.iat[19,5]*1000)/(single_old.iat[0,5]/1000), (single_old.iat[19,6]*1000)/(single_old.iat[0,6]/1000)),
"multiple_old_price": linear_interpolate_2045((multiple_old.iat[19,5]*1000)/(multiple_old.iat[0,5]/1000), (multiple_old.iat[19,6]*1000)/(multiple_old.iat[0,6]/1000)),
"single_new_price": linear_interpolate_2045((single_new.iat[19,5]*1000)/(single_new.iat[0,5]/1000), (single_new.iat[19,6]*1000)/(single_new.iat[0,6]/1000)),
"multiple_new_price": linear_interpolate_2045((multiple_new.iat[19,5]*1000)/(multiple_new.iat[0,5]/1000), (multiple_new.iat[19,6]*1000)/(multiple_new.iat[0,6]/1000)),
}
dic_fixom_cost_2045 = {
"single_old_price": linear_interpolate_2045((single_old.iat[24,5])/(single_old.iat[0,5]/1000), (single_old.iat[24,6])/(single_old.iat[0,6]/1000)),
"multiple_old_price": linear_interpolate_2045((multiple_old.iat[24,5])/(multiple_old.iat[0,5]/1000), (multiple_old.iat[24,6])/(multiple_old.iat[0,6]/1000)),
"single_new_price": linear_interpolate_2045((single_new.iat[24,5])/(single_new.iat[0,5]/1000), (single_new.iat[24,5])/(single_new.iat[0,5]/1000)),
"multiple_new_price": linear_interpolate_2045((multiple_new.iat[24,5])/(multiple_new.iat[0,5]/1000), (multiple_new.iat[24,6])/(multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
"single_old_price": linear_interpolate_2045(single_old.iat[5,5], single_old.iat[5,6]),
"multiple_old_price": linear_interpolate_2045(multiple_old.iat[5,5], multiple_old.iat[5,6]),
"single_new_price": linear_interpolate_2045(single_new.iat[5,5], single_new.iat[5,6]),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[5,5], multiple_new.iat[5,6]),
}
dic_2045 = [dic_capacity_cost_overnight_2045, dic_fixom_cost_2045, dic_lifetime_2045]
val_2045 = []
## Berechnungen
for dic in dic_2045:
val_2045.append(get_agg_price_2045(dic))
print(val_2045)
pv_rooftop_script.py:
import pandas as pd
import geopandas as gpd
import os.path
##trennt residential and industrial rooftop PV nach Nennleistung
def get_proprtion_residential_industrtial(df):
sum = df[["usage_sector", "status"]].groupby("usage_sector").count().sum()
industrial = (df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Industrie"][0] + \
df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Sonstige"][0] + \
df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Landwirtschaft"][0] + \
df[["usage_sector", "status"]].groupby("usage_sector").count().loc[
"Gewerbe, Handel und Dienstleistungen"][0]) \
/ sum
residental = (df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Öffentliches Gebäude"][0] +
df[["usage_sector", "status"]].groupby("usage_sector").count().loc["Haushalt"][0]) / sum
return [industrial, residental]
def get_qgis_df(GeoDataFrame):
gdf = gpd.read_file(GeoDataFrame, where="geometry_approximated='0'")
gdf.where(gdf["status"] == "In Betrieb").to_file("bnetza_mastr_pv_roof_region_filtered.gpkg")
def linear_interpolate_2045(wert_1, wert_2):
zeit_1 = 2040
zeit_2 = 2050
wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))
return wert
def get_agg_price_2045(dic, proportion):
# getting faktoren
industrial_factor = proportion[0][0]
residential_factor = proportion[1][0]
residential = residential_factor * dic["residential_price"]
industrial = industrial_factor * dic["industrial_price"]
preis = residential + industrial
return preis
data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data = ["bnetza_mastr_pv_ground_region.gpkg", "bnetza_mastr_pv_roof_region.gpkg"]
df = gpd.read_file(os.path.join(data_folder, data[1]))
## Daten aus DEA:
## einlesen von Daten
data_folder_sheets = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data_sheets = os.path.join(data_folder_sheets, "technology_data_for_el_and_dh.xlsx")
##datensheets
residential = pd.read_excel(data_sheets, "22 Rooftop PV residential", skiprows=4, nrows=42)
industrial = pd.read_excel(data_sheets, "22 Rooftop PV comm.&industrial", skiprows=4, nrows=42)
proportion = get_proprtion_residential_industrtial(df)
dic_capacity_cost_overnight_2045 = {
"residential_price": linear_interpolate_2045(residential.iat[10,5], residential.iat[10,6])*1000000,
"industrial_price": linear_interpolate_2045(industrial.iat[10,5], industrial.iat[10,6])*1000000
}
dic_fixom_cost_2045 = {
"residential_price": linear_interpolate_2045(residential.iat[18,5], residential.iat[18,6]),
"industrial_price": linear_interpolate_2045(industrial.iat[18,5], industrial.iat[18,6]),
}
dic_lifetime_2045 = {
"residential_price": linear_interpolate_2045(residential.iat[3,5], residential.iat[3,6]),
"industrial_price": linear_interpolate_2045(industrial.iat[3,5], industrial.iat[3,6]),
}
dic_2045 = [dic_capacity_cost_overnight_2045, dic_fixom_cost_2045, dic_lifetime_2045]
val_2045 = []
## Berechnungen
for dic in dic_2045:
val_2045.append(get_agg_price_2045(dic, proportion))
print(dic_capacity_cost_overnight_2045, dic_fixom_cost_2045, dic_lifetime_2045)
print(proportion[0][0])
print(val_2045)
Pth_decentral_sc0irpt.py
import pandas as pd
import os.path
def linear_interpolate_2045(wert_1, wert_2):
zeit_1 = 2040
zeit_2 = 2050
wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))
return wert
def get_agg_price_2045(dic):
# Neubau und Sanierungen allg nach BMI f. Deutschland
neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
# Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis 2020
single_new = 693 / 763
multiple_new = (763 - 693) / 763
single_new_faktor = single_new
multiple_new_faktor = multiple_new
single_new = single_new_faktor * dic["single_new_price"]
multiple_new = multiple_new_faktor * dic["multiple_new_price"]
preis = single_new + multiple_new
return preis
## Daten aus DEA:
## einlesen von Daten
data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")
##datensheets
single_new = pd.read_excel(data, "216 Electric heating,new single", skiprows=4, nrows=33)
multiple_new = pd.read_excel(data, "216 Electric heating,new apart", skiprows=4, nrows=33)
dic_capacity_cost_overnight_2045 = {
"single_new_price": linear_interpolate_2045((single_new.iat[19,5]*1000)/(single_new.iat[0,5]/1000), (single_new.iat[19,6]*1000)/(single_new.iat[0,6]/1000)),
"multiple_new_price": linear_interpolate_2045((multiple_new.iat[19,5]*1000)/(multiple_new.iat[0,5]/1000), (multiple_new.iat[19,6]*1000)/(multiple_new.iat[0,6]/1000)),
}
dic_effiency_2045 = {
"single_new_price": linear_interpolate_2045(single_new.iat[3,5], single_new.iat[3,6]),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[3,5], multiple_new.iat[3,6])
}
dic_fixom_cost_2045 = {
"single_new_price": linear_interpolate_2045((single_new.iat[24,5])/(single_new.iat[0,5]/1000), (single_new.iat[24,5])/(single_new.iat[0,5]/1000)),
"multiple_new_price": linear_interpolate_2045((multiple_new.iat[24,5])/(multiple_new.iat[0,5]/1000), (multiple_new.iat[24,6])/(multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
"single_new_price": linear_interpolate_2045(single_new.iat[5,5], single_new.iat[5,6]),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[5,5], multiple_new.iat[5,6]),
}
dic_marginal_cost_2045 = {
"single_new_price": linear_interpolate_2045(single_new.iat[23,2] / 1000,single_new.iat[23,2] ),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[23,2] / 1000, multiple_new.iat[23,2] / 1000),
}
dic_2045 = [dic_capacity_cost_overnight_2045, dic_effiency_2045 , dic_fixom_cost_2045, dic_lifetime_2045, dic_marginal_cost_2045]
val_2045 = []
print(dic_fixom_cost_2045)
## Berechnungen
for dic in dic_2045:
val_2045.append(get_agg_price_2045(dic))
print(val_2045)
heatpump_small_script.py:
import pandas as pd
import os.path
def get_faktoren_new(df):
hp_agg = {"single_erdwaerme": 0, "multiple_erdwaerme": 0, "single_umweltwaerme": 0, "multiple_umweltwaerme": 0,}
for row in df.itertuples():
bereich = row[1].split(",")[2]
energie = row[1].split(",")[3]
try:
count_insg = int(row[1].split(",")[4])
count_single = int(row[1].split(",")[5])
except:
ValueError
if bereich == "Sachsen-Anhalt":
if energie == "Geothermie":
hp_agg["single_erdwaerme"] += count_single
hp_agg["multiple_erdwaerme"] += (count_insg - count_single)
elif energie == "Umweltthermie (Luft / Wasser)":
hp_agg["single_umweltwaerme"] += count_single
hp_agg["multiple_umweltwaerme"] += (count_insg - count_single)
else:
continue
else:
continue
hp_agg_sum = sum(hp_agg.values())
air_single_new = hp_agg["single_umweltwaerme"] / hp_agg_sum
air_multiple_new = hp_agg["multiple_umweltwaerme"] / hp_agg_sum
ground_single_new = hp_agg["single_erdwaerme"] / hp_agg_sum
ground_multiple_new = hp_agg["multiple_erdwaerme"] / hp_agg_sum
return air_single_new, air_multiple_new, ground_single_new, ground_multiple_new
def linear_interpolate_2045(wert_1, wert_2):
zeit_1 = 2040
zeit_2 = 2050
wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))
return wert
def get_agg_price_2020(dic):
# nach BWP: Absatz von 2010-2020 -> bildet Bestand mit Kosten von Neubau ab
wp_neubau_abs = 52500+52500+45000+45000+37500+37500+37500+37500+30000+30000+30000
wp_altbau_abs = 67500+37500+37500+37500+30000+22500+22500+22500+30000+30000+22500
wp_gesamt_abs = wp_altbau_abs + wp_neubau_abs
wp_neubau = wp_neubau_abs / wp_gesamt_abs
wp_geo = 333333 / (333333+750000)
wp_umwelt = 750000 / (333333+750000) #Umwelt = Luft und Wasser
# Verhältnisse WP Alt und Neubau in ST nach destatis
# Daten einlesen
data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
hp = os.path.join(data_folder, "2023_04_11_ST_thermische_Primärenergie_neubau_2010-2020.csv")
df = pd.read_csv(hp, encoding="ISO8859-1", delimiter=";", skiprows=range(0, 10), nrows=2150)
faktoren_new = get_faktoren_new(df)
air_water_single_new_faktor = wp_neubau * faktoren_new[0]
air_water_multiple_new_faktor = wp_neubau * faktoren_new[1]
ground_water_single_new_fakotr = wp_neubau * faktoren_new[2]
ground_water_multiple_new_faktor = wp_neubau * faktoren_new[3]
# wp altbau:
altbau_air = wp_umwelt - (air_water_single_new_faktor + air_water_multiple_new_faktor)
altbau_ground = wp_geo - (ground_water_single_new_fakotr + ground_water_multiple_new_faktor)
# keine Daten, daher wie neubau angenommen (es gibt keinen Grund zu glauben, dass im Mehrfamilien-Altbau mehr WP verbaut werden)
single_faktor = faktoren_new[0] + faktoren_new[2] # ca 0.95
multiple_faktor = faktoren_new[1] + faktoren_new[3] # ca 0.05
air_water_single_old_faktor = altbau_air * single_faktor
air_water_multiple_old_faktor = altbau_air * multiple_faktor
ground_water_single_old_fakotr = altbau_ground * single_faktor
ground_water_multiple_old_faktor = altbau_ground * multiple_faktor
air_water_single_old = air_water_single_old_faktor * dic["air_water_single_old_price"]
air_water_multiple_old = air_water_multiple_old_faktor * dic["air_water_multiple_old_price"]
ground_water_single_old = ground_water_single_old_fakotr * dic["ground_water_single_old_price"]
ground_water_multiple_old = ground_water_multiple_old_faktor * dic["ground_water_multiple_old_price"]
air_water_single_new = air_water_single_new_faktor * dic["air_water_single_new_price"]
air_water_multiple_new = air_water_multiple_new_faktor * dic["air_water_multiple_new_price"]
ground_water_single_new = ground_water_single_new_fakotr * dic["ground_water_single_new_price"]
ground_water_multiple_new = ground_water_multiple_new_faktor * dic["ground_water_multiple_new_price"]
altbau_kosten = air_water_single_old + air_water_multiple_old + ground_water_single_old + ground_water_multiple_old
neubau_kosten = air_water_single_new + air_water_multiple_new + ground_water_single_new + ground_water_multiple_new
preis = altbau_kosten + neubau_kosten
faktoren = [air_water_single_old_faktor,
air_water_multiple_old_faktor,
ground_water_single_old_fakotr,
ground_water_multiple_old_faktor,
air_water_single_new_faktor,
air_water_multiple_new_faktor,
ground_water_single_new_fakotr,
ground_water_multiple_new_faktor,
]
return preis, faktoren
def get_agg_price_2045(dic):
# Neubau und Sanierungen allg nach BMI f. Deutschland
neubau_allg_prozent = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
altbau_allg_prozent = 1 - neubau_allg_prozent
# Sole/Luft nach Absatz 2022 laut BWP
ground = 0.13
air = 0.87
# Einfamilienhaus/Mehrfamilienhaus
single = 0.7
multiple = 0.3
# Faktoren
air_water_single_old_faktor = altbau_allg_prozent * air * single
air_water_multiple_old_faktor = altbau_allg_prozent * air * multiple
ground_water_single_old_fakotr = altbau_allg_prozent * ground * single
ground_water_multiple_old_faktor = altbau_allg_prozent * ground * multiple
air_water_single_new_faktor = neubau_allg_prozent * air * single
air_water_multiple_new_faktor = neubau_allg_prozent * air * multiple
ground_water_single_new_fakotr = neubau_allg_prozent * ground * single
ground_water_multiple_new_faktor = neubau_allg_prozent * ground * multiple
air_water_single_old = air_water_single_old_faktor * dic["air_water_single_old_price"]
air_water_multiple_old = air_water_multiple_old_faktor * dic["air_water_multiple_old_price"]
ground_water_single_old = ground_water_single_old_fakotr * dic["ground_water_single_old_price"]
ground_water_multiple_old = ground_water_multiple_old_faktor * dic["ground_water_multiple_old_price"]
air_water_single_new = air_water_single_new_faktor * dic["air_water_single_new_price"]
air_water_multiple_new = air_water_multiple_new_faktor * dic["air_water_multiple_new_price"]
ground_water_single_new = ground_water_single_new_fakotr * dic["ground_water_single_new_price"]
ground_water_multiple_new = ground_water_multiple_new_faktor * dic["ground_water_multiple_new_price"]
altbau_kosten = air_water_single_old + air_water_multiple_old + ground_water_single_old + ground_water_multiple_old
neubau_kosten = air_water_single_new + air_water_multiple_new + ground_water_single_new + ground_water_multiple_new
preis = altbau_kosten + neubau_kosten
faktoren = [air_water_single_old_faktor,
air_water_multiple_old_faktor,
ground_water_single_old_fakotr,
ground_water_multiple_old_faktor,
air_water_single_new_faktor,
air_water_multiple_new_faktor,
ground_water_single_new_fakotr,
ground_water_multiple_new_faktor,
]
return preis, faktoren
## Daten aus DEA:
## einlesen von Daten
data_folder = os.path.join("/home/local/RL-INSTITUT/aaron.schilling/Dokumente/Projekte/Digipipe")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")
##datensheets
air_water_single_old = pd.read_excel(data, "207 HP air-water,ex single", skiprows=4, nrows=33)
air_water_multiple_old = pd.read_excel(data, "207 HP air-water,ex apart", skiprows=4, nrows=33)
ground_water_single_old = pd.read_excel(data, "207 HP air-water,new single", skiprows=4, nrows=33)
ground_water_multiple_old = pd.read_excel(data, "207 HP air-water,new apart", skiprows=4, nrows=33)
air_water_single_new = pd.read_excel(data, "207 HP ground-water,ex single", skiprows=4, nrows=33)
air_water_multiple_new = pd.read_excel(data, "207 HP ground-water,ex apart", skiprows=4, nrows=33)
ground_water_single_new = pd.read_excel(data, "207 HP ground-water,new single", skiprows=4, nrows=33)
ground_water_multiple_new = pd.read_excel(data, "207 HP ground-water,new apart", skiprows=4, nrows=33)
dic_capacity_cost_overnight_2020 = {
"air_water_single_old_price": air_water_single_old.iat[19,2]*1000/(air_water_single_old.iat[0,2]/1000),
"air_water_multiple_old_price": air_water_multiple_old.iat[19,2]*1000/(air_water_multiple_old.iat[0,2]/1000),
"ground_water_single_old_price": ground_water_single_old.iat[19,2]*1000/(ground_water_single_old.iat[0,2]/1000),
"ground_water_multiple_old_price": ground_water_multiple_old.iat[19,2]*1000/(ground_water_multiple_old.iat[0,2]/1000),
"air_water_single_new_price": air_water_single_new.iat[19,2]*1000/(air_water_single_new.iat[0,2]/1000),
"air_water_multiple_new_price": air_water_multiple_new.iat[19,2]*1000/(air_water_multiple_new.iat[0,2]/1000),
"ground_water_single_new_price": ground_water_single_new.iat[19,2]*1000/(ground_water_single_new.iat[0,2]/1000),
"ground_water_multiple_new_price": ground_water_multiple_new.iat[19,2]*1000/(ground_water_multiple_new.iat[0,2]/1000),
}
dic_fixom_cost_2020 = {
"air_water_single_old_price": air_water_single_old.iat[24,2]/(air_water_single_old.iat[0,2]/1000),
"air_water_multiple_old_price": air_water_multiple_old.iat[24,2]/(air_water_multiple_old.iat[0,2]/1000),
"ground_water_single_old_price": ground_water_single_old.iat[24,2]/(ground_water_single_old.iat[0,2]/1000),
"ground_water_multiple_old_price": ground_water_multiple_old.iat[24,2]/(ground_water_multiple_old.iat[0,2]/1000),
"air_water_single_new_price": air_water_single_new.iat[24,2]/(air_water_single_new.iat[0,2]/1000),
"air_water_multiple_new_price": air_water_multiple_new.iat[24,2]/(air_water_multiple_new.iat[0,2]/1000),
"ground_water_single_new_price": ground_water_single_new.iat[24,2]/(ground_water_single_new.iat[0,2]/1000),
"ground_water_multiple_new_price": ground_water_multiple_new.iat[24,2]/(ground_water_multiple_new.iat[0,2]/1000),
}
dic_lifetime_2020 = {
"air_water_single_old_price": air_water_single_old.iat[5,2],
"air_water_multiple_old_price": air_water_multiple_old.iat[5,2],
"ground_water_single_old_price": ground_water_single_old.iat[5,2],
"ground_water_multiple_old_price": ground_water_multiple_old.iat[5,2],
"air_water_single_new_price": air_water_single_new.iat[5,2],
"air_water_multiple_new_price": air_water_multiple_new.iat[5,2],
"ground_water_single_new_price": ground_water_single_new.iat[5,2],
"ground_water_multiple_new_price": ground_water_multiple_new.iat[5,2],
}
dic_marginal_cost_2020 = {
"air_water_single_old_price": air_water_single_old.iat[23,2] / 1000,
"air_water_multiple_old_price": air_water_multiple_old.iat[23,2] / 1000,
"ground_water_single_old_price": ground_water_single_old.iat[23,2] / 1000,
"ground_water_multiple_old_price": ground_water_multiple_old.iat[23,2] / 1000,
"air_water_single_new_price": air_water_single_new.iat[23,2] / 1000,
"air_water_multiple_new_price": air_water_multiple_new.iat[23,2] / 1000,
"ground_water_single_new_price": ground_water_single_new.iat[23,2] / 1000,
"ground_water_multiple_new_price": ground_water_multiple_new.iat[23,2] / 1000,
}
dic_capacity_cost_overnight_2045 = {
"air_water_single_old_price": linear_interpolate_2045(air_water_single_old.iat[19,5]*1000/(air_water_single_old.iat[0,5]/1000), air_water_single_old.iat[19,6]*1000/(air_water_single_old.iat[0,6]/1000)),
"air_water_multiple_old_price": linear_interpolate_2045(air_water_multiple_old.iat[19,5]*1000/(air_water_multiple_old.iat[0,5]/1000), air_water_multiple_old.iat[19,6]*1000/(air_water_multiple_old.iat[0,6]/1000)),
"ground_water_single_old_price": linear_interpolate_2045(ground_water_single_old.iat[19,5]*1000/(ground_water_single_old.iat[0,5]/1000),ground_water_single_old.iat[19,6]*1000/(ground_water_single_old.iat[0,6]/1000)),
"ground_water_multiple_old_price": linear_interpolate_2045(ground_water_multiple_old.iat[19,5]*1000/(ground_water_multiple_old.iat[0,5]/1000), ground_water_multiple_old.iat[19,6]*1000/(ground_water_multiple_old.iat[0,6]/1000)),
"air_water_single_new_price": linear_interpolate_2045(air_water_single_new.iat[19,5]*1000/(air_water_single_new.iat[0,5]/1000), air_water_single_new.iat[19,6]*1000/(air_water_single_new.iat[0,6]/1000)),
"air_water_multiple_new_price": linear_interpolate_2045(air_water_multiple_new.iat[19,5]*1000/(air_water_multiple_new.iat[0,5]/1000),air_water_multiple_new.iat[19,6]*1000/(air_water_multiple_new.iat[0,6]/1000)),
"ground_water_single_new_price": linear_interpolate_2045(ground_water_single_new.iat[19,5]*1000/(ground_water_single_new.iat[0,5]/1000), ground_water_single_new.iat[19,6]*1000/(ground_water_single_new.iat[0,6]/1000)),
"ground_water_multiple_new_price": linear_interpolate_2045(ground_water_multiple_new.iat[19,5]*1000/(ground_water_multiple_new.iat[0,5]/1000), ground_water_multiple_new.iat[19,6]*1000/(ground_water_multiple_new.iat[0,6]/1000)),
}
dic_fixom_cost_2045 = {
"air_water_single_old_price": linear_interpolate_2045(air_water_single_old.iat[24,5]/(air_water_single_old.iat[0,5]/1000), air_water_single_old.iat[24,6]/(air_water_single_old.iat[0,6]/1000)),
"air_water_multiple_old_price": linear_interpolate_2045(air_water_multiple_old.iat[24,5]/(air_water_multiple_old.iat[0,5]/1000), air_water_multiple_old.iat[24,6]/(air_water_multiple_old.iat[0,6]/1000)),
"ground_water_single_old_price": linear_interpolate_2045(ground_water_single_old.iat[24,5]/(ground_water_single_old.iat[0,5]/1000), ground_water_single_old.iat[24,6]/(ground_water_single_old.iat[0,6]/1000)),
"ground_water_multiple_old_price": linear_interpolate_2045(ground_water_multiple_old.iat[24,5]/(ground_water_multiple_old.iat[0,5]/1000), ground_water_multiple_old.iat[24,6]/(ground_water_multiple_old.iat[0,6]/1000)),
"air_water_single_new_price": linear_interpolate_2045(air_water_single_new.iat[24,5]/(air_water_single_new.iat[0,5]/1000), air_water_single_new.iat[24,6]/(air_water_single_new.iat[0,6]/1000)),
"air_water_multiple_new_price": linear_interpolate_2045(air_water_multiple_new.iat[24,5]/(air_water_multiple_new.iat[0,5]/1000), air_water_multiple_new.iat[24,6]/(air_water_multiple_new.iat[0,6]/1000)),
"ground_water_single_new_price": linear_interpolate_2045(ground_water_single_new.iat[24,5]/(ground_water_single_new.iat[0,5]/1000), ground_water_single_new.iat[24,6]/(ground_water_single_new.iat[0,6]/1000)),
"ground_water_multiple_new_price": linear_interpolate_2045(ground_water_multiple_new.iat[24,5]/(ground_water_multiple_new.iat[0,5]/1000), ground_water_multiple_new.iat[24,6]/(ground_water_multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
"air_water_single_old_price": linear_interpolate_2045(air_water_single_old.iat[5,5], air_water_single_old.iat[5,6]),
"air_water_multiple_old_price": linear_interpolate_2045(air_water_multiple_old.iat[5,5], air_water_multiple_old.iat[5,6]),
"ground_water_single_old_price": linear_interpolate_2045(ground_water_single_old.iat[5,5], ground_water_single_old.iat[5,6]),
"ground_water_multiple_old_price": linear_interpolate_2045(ground_water_multiple_old.iat[5,5], ground_water_multiple_old.iat[5,6]),
"air_water_single_new_price": linear_interpolate_2045(air_water_single_new.iat[5,5], air_water_single_new.iat[5,6]),
"air_water_multiple_new_price": linear_interpolate_2045(air_water_multiple_new.iat[5,5], air_water_multiple_new.iat[5,6]),
"ground_water_single_new_price": linear_interpolate_2045(ground_water_single_new.iat[5,5], ground_water_single_new.iat[5,6]),
"ground_water_multiple_new_price": linear_interpolate_2045(ground_water_multiple_new.iat[5,5], ground_water_multiple_new.iat[5,6]),
}
dic_marginal_cost_2045 = {
"air_water_single_old_price": linear_interpolate_2045(air_water_single_old.iat[23,5] / 1000, air_water_single_old.iat[23,6] / 1000),
"air_water_multiple_old_price": linear_interpolate_2045(air_water_multiple_old.iat[23,5] / 1000, air_water_multiple_old.iat[23,6] / 1000),
"ground_water_single_old_price": linear_interpolate_2045(ground_water_single_old.iat[23,5] / 1000, ground_water_single_old.iat[23,6] / 1000),
"ground_water_multiple_old_price": linear_interpolate_2045(ground_water_multiple_old.iat[23,5] / 1000, ground_water_multiple_old.iat[23,6] / 1000),
"air_water_single_new_price": linear_interpolate_2045(air_water_single_new.iat[23,5] / 1000, air_water_single_new.iat[23,6] / 1000),
"air_water_multiple_new_price": linear_interpolate_2045(air_water_multiple_new.iat[23,5] / 1000, air_water_multiple_new.iat[23,6] / 1000),
"ground_water_single_new_price": linear_interpolate_2045(ground_water_single_new.iat[23,5] / 1000, ground_water_single_new.iat[23,6] / 1000),
"ground_water_multiple_new_price": linear_interpolate_2045(ground_water_multiple_new.iat[23,5] / 1000, ground_water_multiple_new.iat[23,6] / 1000),
}
dic_2020 = [dic_capacity_cost_overnight_2020, dic_fixom_cost_2020, dic_lifetime_2020, dic_marginal_cost_2020]
dic_2045 = [dic_capacity_cost_overnight_2045, dic_fixom_cost_2045, dic_lifetime_2045, dic_marginal_cost_2045]
val_2020 = []
val_2045 = []
faktoren_2020 = get_agg_price_2020(dic_fixom_cost_2045)[1]
faktoren_2045 = get_agg_price_2045(dic_fixom_cost_2045)[1]
## Berechnungen
for dic in dic_2020:
val_2020.append(get_agg_price_2020(dic)[0])
for dic in dic_2045:
val_2045.append(get_agg_price_2045(dic)[0])
print(val_2020, val_2045)
print(faktoren_2020, faktoren_2045)
boiler_small_script.py:
import pandas as pd
import os.path
def get_faktoren_new(df):
gas_agg = {"single": 0, "multiple": 0}
for row in df.itertuples():
bereich = row[1].split(",")[2]
energie = row[1].split(",")[3]
try:
count_insg = int(row[1].split(",")[4])
count_single = int(row[1].split(",")[5])
except:
ValueError
if bereich == "Sachsen-Anhalt":
if energie == "Gas":
gas_agg["single"] += count_single
gas_agg["multiple"] += (count_insg - count_single)
else:
continue
else:
continue
gas_agg_sum = sum(gas_agg.values())
single_new = gas_agg["single"] / gas_agg_sum
multiple_new = gas_agg["multiple"] / gas_agg_sum
return single_new, multiple_new,
def linear_interpolate_2045(wert_1, wert_2):
zeit_1 = 2040
zeit_2 = 2050
wert = wert_1 + (((wert_2 - wert_1) / (zeit_2 - zeit_1)) * (2045 - zeit_1))
return wert
def get_agg_price_2020(dic):
# Neubau und Sanierungen allg nach BMI f. Deutschland
neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
altbau = 1 - neubau
# Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis
# Daten einlesen
data_folder = os.path.join("/YOUR/DATA/ROAD/TAKE/ME/HOME/TO/THE/PLACE")
hp = os.path.join(data_folder, "2023_04_11_ST_thermische_Primärenergie_neubau_2010-2020.csv")
df = pd.read_csv(hp, encoding="ISO8859-1", delimiter=";", skiprows=range(0, 10), nrows=2150)
faktoren_new = get_faktoren_new(df)
# Einfamilinehaus-Mehrfamilienhaus im Altbau Annahme:
single_faktor = 0.7
multiple_faktor = 0.3
single_new_faktor = neubau * faktoren_new[0]
multiple_new_faktor = neubau * faktoren_new[1]
single_old_faktor = altbau * single_faktor
multiple_old_faktor = altbau * multiple_faktor
single_old = single_old_faktor * dic["single_old_price"]
multiple_old = multiple_old_faktor * dic["multiple_old_price"]
single_new = single_new_faktor * dic["single_new_price"]
multiple_new = multiple_new_faktor * dic["multiple_new_price"]
preis = single_old + multiple_old + single_new + multiple_new
return preis
def get_agg_price_2045(dic):
# Neubau und Sanierungen allg nach BMI f. Deutschland
neubau = (0.36 + 0.36 + 0.37 + 0.38 + 0.35 + 0.34 + 0.26 + 0.22 + 0.22 + 0.22 + 0.25 + 0.26 + 0.27 + 0.28 + 0.30 + 0.32 + 0.32 + 0.32 + 0.31 + 0.31) / 20
altbau = 1 - neubau
# Verhältnisse Einfamilienhaus-Mehrfamilienhaus nach destatis 2020
gas_single_new = 693 / 763
gas_multiple_new = (763 - 693) / 763
# Einfamilinehaus-Mehrfamilienhaus im Altbau Annahme:
single_faktor = 0.7
multiple_faktor = 0.3
single_new_faktor = neubau * gas_single_new
multiple_new_faktor = neubau * gas_multiple_new
single_old_faktor = altbau * single_faktor
multiple_old_faktor = altbau * multiple_faktor
single_old = single_old_faktor * dic["single_old_price"]
multiple_old = multiple_old_faktor * dic["multiple_old_price"]
single_new = single_new_faktor * dic["single_new_price"]
multiple_new = multiple_new_faktor * dic["multiple_new_price"]
preis = single_old + multiple_old + single_new + multiple_new
return preis
## Daten aus DEA:
## einlesen von Daten
data_folder = os.path.join("/ROAD/TO/DATA")
data = os.path.join(data_folder, "technology_data_heating_installations_-_0003.xlsx")
##datensheets
single_old = pd.read_excel(data, "202 Gas boiler, ex single", skiprows=4, nrows=33)
multiple_old = pd.read_excel(data, "202 Gas boiler, ex apart", skiprows=4, nrows=33)
single_new = pd.read_excel(data, "202 Gas boiler, new single", skiprows=4, nrows=33)
multiple_new = pd.read_excel(data, "202 Gas boiler, new apart", skiprows=4, nrows=33)
dic_capacity_cost_overnight_2020 = {
"single_old_price": (single_old.iat[19,2]*1000)/(single_old.iat[0,2]/1000),
"multiple_old_price": (multiple_old.iat[19,2]*100)/(multiple_old.iat[0,2]/1000),
"single_new_price": (single_new.iat[19,2]*1000)/(single_new.iat[0,2]/1000),
"multiple_new_price": (multiple_new.iat[19,2]*1000)/(multiple_new.iat[0,2]/1000),
}
dic_effiency_2020 = {
"single_old_price": single_old.iat[3,2],
"multiple_old_price": multiple_old.iat[3,2],
"single_new_price": single_new.iat[3,2],
"multiple_new_price": multiple_new.iat[3,2],
}
dic_fixom_cost_2020 = {
"single_old_price": single_old.iat[24,2]/(single_old.iat[0,2]/1000),
"multiple_old_price": multiple_old.iat[24,2]/(multiple_old.iat[0,2]/1000),
"single_new_price": single_new.iat[24,2]/(single_new.iat[0,2]/1000),
"multiple_new_price": multiple_new.iat[24,2]/(multiple_new.iat[0,2]/1000),
}
dic_lifetime_2020 = {
"single_old_price": single_old.iat[5,2],
"multiple_old_price": multiple_old.iat[5,2],
"single_new_price": single_new.iat[5,2],
"multiple_new_price": multiple_new.iat[5,2],
}
dic_marginal_cost_2020 = {
"single_old_price": single_old.iat[23,2] / 1000,
"multiple_old_price": multiple_old.iat[23,2] / 1000,
"single_new_price": single_new.iat[23,2] / 1000,
"multiple_new_price": multiple_new.iat[23,2] / 1000,
}
dic_capacity_cost_overnight_2045 = {
"single_old_price": linear_interpolate_2045((single_old.iat[19,5]*1000)/(single_old.iat[0,5]/1000), (single_old.iat[19,6]*1000)/(single_old.iat[0,6]/1000)),
"multiple_old_price": linear_interpolate_2045((multiple_old.iat[19,5]*1000)/(multiple_old.iat[0,5]/1000), (multiple_old.iat[19,6]*1000)/(multiple_old.iat[0,6]/1000)),
"single_new_price": linear_interpolate_2045((single_new.iat[19,5]*1000)/(single_new.iat[0,5]/1000), (single_new.iat[19,6]*1000)/(single_new.iat[0,6]/1000)),
"multiple_new_price": linear_interpolate_2045((multiple_new.iat[19,5]*1000)/(multiple_new.iat[0,5]/1000), (multiple_new.iat[19,6]*1000)/(multiple_new.iat[0,6]/1000)),
}
dic_effiency_2045 = {
"single_old_price": linear_interpolate_2045(single_old.iat[3,5], single_old.iat[3,6]),
"multiple_old_price": linear_interpolate_2045(multiple_old.iat[3,5], multiple_old.iat[3,6]) ,
"single_new_price": linear_interpolate_2045(single_new.iat[3,5], single_new.iat[3,6]),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[3,5], multiple_new.iat[3,6])
}
dic_fixom_cost_2045 = {
"single_old_price": linear_interpolate_2045((single_old.iat[24,5])/(single_old.iat[0,5]/1000), (single_old.iat[24,6])/(single_old.iat[0,6]/1000)),
"multiple_old_price": linear_interpolate_2045((multiple_old.iat[24,5])/(multiple_old.iat[0,5]/1000), (multiple_old.iat[24,6])/(multiple_old.iat[0,6]/1000)),
"single_new_price": linear_interpolate_2045((single_new.iat[24,5])/(single_new.iat[0,5]/1000), (single_new.iat[24,5])/(single_new.iat[0,5]/1000)),
"multiple_new_price": linear_interpolate_2045((multiple_new.iat[24,5])/(multiple_new.iat[0,5]/1000), (multiple_new.iat[24,6])/(multiple_new.iat[0,6]/1000)),
}
dic_lifetime_2045 = {
"single_old_price": linear_interpolate_2045(single_old.iat[5,5], single_old.iat[5,6]),
"multiple_old_price": linear_interpolate_2045(multiple_old.iat[5,5], multiple_old.iat[5,6]),
"single_new_price": linear_interpolate_2045(single_new.iat[5,5], single_new.iat[5,6]),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[5,5], multiple_new.iat[5,6]),
}
dic_marginal_cost_2045 = {
"single_old_price": linear_interpolate_2045(single_old.iat[23,2] / 1000, single_old.iat[23,2] / 1000),
"multiple_old_price": linear_interpolate_2045(multiple_old.iat[23,2] / 1000, multiple_old.iat[23,2] / 1000),
"single_new_price": linear_interpolate_2045(single_new.iat[23,2] / 1000,single_new.iat[23,2] ),
"multiple_new_price": linear_interpolate_2045(multiple_new.iat[23,2] / 1000, multiple_new.iat[23,2] / 1000),
}
dic_2020 = [dic_capacity_cost_overnight_2020, dic_effiency_2020, dic_fixom_cost_2020, dic_lifetime_2020, dic_marginal_cost_2020]
dic_2045 = [dic_capacity_cost_overnight_2045,dic_effiency_2045, dic_fixom_cost_2045, dic_lifetime_2045, dic_marginal_cost_2045]
val_2020 = []
val_2045 = []
## Berechnungen
for dic in dic_2020:
val_2020.append(get_agg_price_2020(dic))
for dic in dic_2045:
val_2045.append(get_agg_price_2045(dic))
print(val_2020, val_2045)
Dataset: raw/technology_data
Sozialversicherungspflichtig Beschäftigte und Betriebe#
Gemeindedaten der sozialversicherungspflichtig Beschäftigten am 30.06.2022 nach Wohn- und Arbeitsort - Deutschland, Länder, Kreise und Gemeinden (Jahreszahlen) der Bundesagentur für Arbeit.
Dataset: raw/ba_employment
Regionalstatistik (GENESIS)#
Enthält folgende Datensätze der statistischen Ämter des Bundes und der Länder:
Energieverwendung der Betriebe im Verarbeitenden Gewerbe (43531-01-02-4)#
Jahreserhebung ü. die Energieverwendung der Betriebe im verarbeitendem Gewerbe.
Der Datensatz umfasst:
- Betriebe des Verarbeitenden Gewerbes sowie des Bergbaus und der Gewinnung von Steinen und Erden von Unternehmen des Produzierenden Gewerbes mit im Allgemeinen 20 und mehr Beschäftigten.
-
Betriebe des Verarbeitenden Gewerbes sowie des Bergbaus und der Gewinnung von Steinen und Erden mit im Allgemeinen 20 und mehr Beschäftigten von Unternehmen der übrigen Wirtschaftsbereiche. Die Berichterstattung schließt Verarbeitende Betriebe des Handwerks ein. Bei 7 Wirtschaftszweigen gilt eine Abschneidegrenze von 10 Beschäftigten. Die Merkmalswerte beziehen sich auf den gesamten Betrieb, schließen damit die nicht produzierenden Betriebsteile mit ein. Maßgebend für die Zuordnung ist ab 2008 die „Klassifikation der Wirtschaftszweige, Ausgabe 2008 (WZ 2008)“, und zwar die Abschnitte B und C.
-
Datei:
43531-01-02-4.xlsx
- Stand: 2021
Betriebe, tätige Personen, Bruttoentgelte (42111-01-04-5)#
Jahreserhebung ü. Betriebe, tätige Personen und Bruttoentgelte der Betriebe im verarbeitendem Gewerbe.
Der Datensatz umfasst:
- Sämtliche Betriebe des Wirtschaftsbereiches Verarbeitendes Gewerbe sowie Bergbau und Gewinnung von Steinen und Erden, wenn diese Betriebe zu Unternehmen des Bereiches Verarbeitendes Gewerbe sowie Bergbau und Gewinnung von Steinen und Erden gehören und in diesen Unternehmen mindestens 20 Personen tätig sind;
-
die Betriebe des Wirtschaftsbereiches Verarbeitendes Gewerbe sowie Bergbau und Gewinnung von Steinen und Erden mit mindestens 20 tätigen Personen, sofern diese Betriebe zu Unternehmen gehören, deren wirtschaftlicher Schwerpunkt außerhalb des Bereiches Verarbeitendes Gewerbe sowie Bergbau und Gewinnung von Steinen und Erden liegt. Bei 7 kleinbetrieblich strukturierten Branchen gilt eine untere Erfassungsgrenze von 10 tätigen Personen. Die Auswahl erfolgt jeweils nach dem Beschäftigtenstand Ende September des Vorjahres. Die ausgewiesene Beschäftigtenzahl betrifft dagegen die von Ende September des Berichtsjahres. Die Merkmalswerte beziehen sich auf den gesamten Betrieb, schließen damit die nicht produzierenden Betriebsteile mit ein. Maßgebend für die Zuordnung ist ab 2009 die „Klassifikation der Wirtschaftszweige, Ausgabe 2008 (WZ 2008)“, und zwar die Abschnitte B und C.
-
Datei:
42111-01-04-5.xlsx
- Stand: 30.09.2021
Gebäude mit Wohnraum nach Heizungsart (31211-04-01-5-B)#
Zensus 2011: Gebäude mit Wohnraum nach Heizungsart
- Datei:
31211-04-01-5-B.xlsx
- Stand: 09.05.2011
Gebäude mit Wohnraum nach Heizungsart (31231-02-01-5)#
Bestand an Wohngebäuden und Wohnungen in Wohn- und Nichtwohngebäuden - Fortschreibung auf Basis der endgültigen Ergebnisse der Gebäude- und Wohnungszählung 2011 (Zensus 2011).
- Datei:
31231-02-01-5.xlsx
- Stand: 31.12.2021
Dataset: raw/regiostat
Energiedaten Sachsen-Anhalt#
Datensätze zur Energie- und Wasserversorgung des Statistischen Landesamtes Sachsen-Anhalt.
Daten#
Stromverbrauch der Industriebetriebe nach Kreisen 2003-2021 in MWh
Dataset: raw/stala_st_energy
Lokale Verwaltungseinheiten#
Lokale Verwaltungseinheiten (LAUs) von Eurostat, mit NUTS kompatibel. Diese LAU sind die Bausteine der NUTS und umfassen die Gemeinden und Kommunen der Europäischen Union.
Dataset: raw/eurostat_lau
Regionalplan Anhalt-Bitterfeld-Wittenberg#
Geodatensätze aus Teilplänen Wind 2018 und 2027 der Regionalen Planungsgemeinschaft Anhalt-Bitterfeld-Wittenberg.
Sachlicher Teilplan Wind 2018#
Geodaten aus rechtskräftigem Sachlichen Teilplan Wind 2018.
Im Sachlichen Teilplan "Nutzung der Windenergie in der Planungsregion Anhalt-Bitterfeld-Wittenberg" vom 30.05.2018 werden 22 Vorranggebiete für die Nutzung der Windenergie mit der Wirkung von Eignungsgebieten festgelegt. Sie dienen der raumordnerischen Steuerung der Errichtung von raumbedeutsamen Windenergieanlagen in Konzentrationszonen.
Die oberste Landesentwicklungsbehörde hat am 01.08.2018 die Genehmigung erteilt. Mit Bekanntmachung der Genehmigung tritt der Sachliche Teilplan in Kraft.
Dateien:
- Vorrang-/Eignungsgebiete:
stp_2018_vreg.gpkg
(Quelle)
Sachlicher Teilplan Wind 2027#
Geodaten aus Planentwurf des Sachlichen Teilplan Wind 2027.
Die Regionalversammlung hat am 03.03.2023 beschlossen, den Sachlichen Teilplan "Windenergie 2027 in der Planungsregion Anhalt-Bitterfeld-Wittenberg" aufzustellen und mit der Bekanntgabe der Allgemeinen Planungsabsicht die beabsichtigten Auswahlkriterien und mögliche Gebietskulisse der Vorranggebiete für die Nutzung der Windenergie bzw. für Repowering von Windenergieanlagen vorzustellen.
Dateien:
- Suchräume:
stp_2027_suchraum.gpkg
(Quelle: RPG ABW) - Planabsicht Vorranggebiete:
stp_2027_ideen_vr.gpkg
(Quelle: RPG ABW) - Planabsicht Repoweringgebiete:
stp_2027_ideen_repower.gpkg
(Quelle: RPG ABW)
Dataset: raw/rpg_abw_regional_plan
Emissionen#
Emissionen für die Jahre 1990 und 2019 für Sachsen-Anhalt und disaggregiert für die Region Anhalt-Bitterfeld-Wittenberg (ABW). Die Grundlage hierfür ist der THG-Bericht 2021 Sachsen-Anhalt (ST).
Datei: emissions.csv
, Felder:
sector
: Sektorcat
: Kategorie ("*" = alle)subcat
: Unterkategorie ("*" = alle)name
: Bezeichnerst
: Emissionen Sachsen-Anhalt in kt CO2-Äquivalentabw
: Emissionen Region ABW in kt CO2-Äquivalent
sector
, cat
und subcat
folgen der Nomenklatur des Common Reporting Formats
(CRF) nach KSG Anlage 1.
Grafik hierzu
(Abb. 2 auf S. 30).
Disaggregation#
Anhand unterschiedlicher Kriterien und Datenquellen wurde näherungsweise von den vorliegenden Emissionen für Sachsen-Anhalt für 1990 und 2019 auf die Region ABW disaggregiert. Je Sektor sind hier die gewählten energiebestimmenden Größen (EnbG) angegeben, sowie die Herangehensweise zur jeweiligen Berechnung.
Sektor Energiewirtschaft (CRF 1.A.1 + 1.B)#
Aus der Liste der Emissionshandelspflichtigen Anlagen wurden jene Daten zu Anlagen extrahiert, welche sich in Sachsen-Anhalt befinden und als Bezeichnung "Energieumwandlung >= 50 MW FWL" oder "Energieumwandlung 20–50 MW FWL" (Haupttätigkeit nach TEHG) aufweisen. Die Summe der angegebenen Emissionen (t CO2 Äq) jener Anlagen, welche in der Region ABW liegen, wurde in Relation zu der Summe der Emissionen aus den Anlagen in Gesamt-ST gesetzt. Dieser Anteil wurde auf die im THG-Bericht angegebene Emissionsmenge im Sektor "Energiewirtschaft (1.A.1)" sowie "Prozessemissionen (1.B)" angelegt und so für ABW näherungsweise disaggregiert.
Hinweise:
- Aufgrund mangelnder Daten wurde für das Jahr 1990 auf die neuesten verfügbaren Daten (2005-2007) aus der Anlagenliste zurückgegriffen.
- Energiewirtschaftlich relevante Anlagen unter 20 MW FWL sind in der Anlagenliste nicht erfasst und konnten somit nicht berücksichtigt werden.
Quellen:
- Emissionshandelspflichtige Anlagen in Deutschland 2020 (Stand 03.05.2021)
- Treibhausgasemissionen in Sachsen-Anhalt 2018 (Stand 12.05.2021)
CRF 1.A.1#
Energiewirtschaft (Umwandlungsbereich): umfasst die öffentliche Elektrizitäts- und Wärmeversorgung sowie Raffinerien.
EnbG: Emissionen aus europäischem Emissionshandel
CRF 1.B#
Diffuse Emissionen aus Brennstoffen: Diese Kategorie beinhaltet flüchtige Emissionen aus der Gewinnung, Verarbeitung und Verteilung von Brennstoffen. Die wichtigsten Quellen sind die Verteilung von Erdgas, aber auch Emissionen aus Förderung und Abfackelung, die Extraktion und Umwandlung von Braunkohle, Emissionen aus der Raffination von Erdöl sowie Emissionen aus der Lagerung und Verteilung von Mineralölprodukten.
EnbG: Emissionen aus europäischem Emissionshandel
Sektor Industrie (CRF 1.A.2)#
Dieser Sektor umfasst sämtliche energiebedingten Emissionen durch verarbeitendes Gewerbe.
Zur Disaggregierung wurde der Energieverbrauch der Industriebetriebe in ABW mit dem Gesamtenergieverbrauch aller Industriebetriebe in Sachsen-Anhalt in Relation gesetzt. Dabei wurde eine Differenzierung hinsichtlich der Energieträgerzusammensetzung von ABW im Vergleich zu ST durchgeführt und anhand von Emissionsfaktoren berechnet.
EnbG: Energieverbrauch nach Energieträgern
Quellen:
- Energieverbrauch der Industriebetriebe in Sachsen-Anhalt nach ausgewählten Energieträgern und Kreisen
- Emissionsfaktor für Stromerzeugung (UBA)
- BISKO Bilanzierungs-Systematik Kommunal (Aktualisierung 11/2019)
Sektor Prozessemissionen (CRF 2)#
Dieser Sektor umfasst sämtliche Emissionen, welche durch Industrieprozesse anfallen. Dies sind Emissionen aus: Herstellung mineralischer Produkte, chemischer Industrie, Herstellung von Metallen, übrigen Prozessen und Produktverwendungen (CRF 2.A-H). Zur Disaggregierung wurde erneut die Liste der Emissionshandelspflichtigen Anlagen herangezogen. Anders als im Sektor Energiewirtschaft (s.o.) wurde jedoch der Anteil aller Anlagen, welche nicht der Energiewirtschaft zugerechnet werden, zur Bestimmung des Anteils von ABW an ST gewählt.
EnbG: Emissionen aus europäischem Emissionshandel
Sektor Verkehr (CRF 1.A.3)#
Dieser Sektor umfasst Emissionen aus dem Straßenverkehr, dem zivilen Luftverkehr, aus dem Schiffsverkehr, verbrennungsbedingte Emissionen aus dem Schienenverkehr sowie Emissionen des übrigen Verkehrs und weitere Quellen zur Bereitstellung der im Verkehr verbrauchten Energie. Die Verbrennung von Mineralölprodukten im Straßenverkehr spielt die größte Rolle und macht weit über 90 % der sektoralen Emissionen aus. Daher wird zur Disaggreagation der motorisierte Straßenverkehr über zugelassene Kraftfahrzeuge mit durchschnittlichen Fahrleistungen und spezifischer Emissionen pro Kilometer und Fahrzeugklasse herangezogen.
Hierfür wird zunächst aus Verkehr in Kilometern (VK) ZeitreiheJahre 2014 - 2022 und Umweltfreundlich mobil! Ein ökologischer Verkehrsartenvergleich für den Personen- und Güterverkehr in Deutschland) ein durchschnittlicher Emissionswert pro Jahr und Fahrzeugklasse ermittelt. Dieser wird mit den zugelassenen Fahrzeugen der entsprechenden Fahrzeugklassen aus Kraftfahrzeugbestand nach Kraftfahrzeugarten - Stichtag 01.01. - regionale Tiefe: Kreise und krfr. Städte (bis 01.01.2019) einerseits für ganz Sachsen-Anhalt und andererseits ABW multipliziert. Daraus wird ein Verhältnis der Verkehrsemissionen in ABW zu ST gewonnen.
Hinweise:
- Die Datenlage für die zugelassenen Fahrzeuge, gefahrenen Kilometer und Emissionen pro km sind nicht spezifisch für 1990 sondern nur für einzelne Jahre der frühen 1990er verfügbar. Daher ist der Emissionswert für 1990 mit einer höheren Unsicherheit behaftet.
EnbG:
- Zugelassene Kraftfahrzeuge
- Durchschnittliche Fahrleistung und spez. CO2 Emission pro km und Fahrzeugklasse
Quellen:
- Kraftfahrzeugbestand nach Kraftfahrzeugarten - Stichtag 01.01. - regionale Tiefe: Kreise und krfr. Städte (bis 01.01.2019)
- Umweltfreundlich mobil! Ein ökologischer Verkehrsartenvergleich für den Personen- und Güterverkehr in Deutschland)
- Verkehr in Kilometern (VK) ZeitreiheJahre 2014 - 2022
Sektor Sonstige Energie (insbes. Gebäude) (CRF 1.A.4 + 1.A.5)#
Dieser Sektor umfasst den durch Energieumwandlung nicht bereits abgedeckten Energiebedarf. Das sind vor allem kleine Einzelfeuerungsanlagen bis hin zu immissionsschutzrechtlich genehmigungsbedürftigen Anlagen mit einer Nennwärmeleistung von mehreren Megawatt. Zur Disaggreagtion wurde daher der Wärmebedarf von ABW im Verhältnis zum Wärmebedarf von gesamt Sachsen Anhalt gewählt. Der Wärmevedarf umfasst Raumwärme, Warmwasser sowie Kochen und wird aus Daten aus dem Pipeline-Datensatz demand_heat_region generiert.
Ergebnis: 17,46 % des Bedarfs in Sachsen-Anhalt entfällt auf ABW.
Code
## Sektor HH
heat_hh_dist_states = gpd.read_file("demand_heat_zonal_stats-res-bkg_vg250_federal_states.gpkg")
heat_hh_demand_st = float(heat_hh_dist_states.loc[heat_hh_dist_states.nuts == "DEE"].heat_demand)
heat_hh_demand_abw = gpd.read_file("demand_heat_zonal_stats-res-bkg_vg250_muns_region.gpkg").heat_demand.sum()
## Sektor GHD
heat_cts_dist_states = gpd.read_file("demand_heat_zonal_stats-ser-bkg_vg250_federal_states.gpkg")
heat_cts_demand_st = float(heat_cts_dist_states.loc[heat_cts_dist_states.nuts == "DEE"].heat_demand)
heat_cts_demand_abw = gpd.read_file("demand_heat_zonal_stats-ser-bkg_vg250_muns_region.gpkg").heat_demand.sum()
## Anteil ABW an ST
heat_share = (heat_hh_demand_abw + heat_cts_demand_abw) / (heat_hh_demand_st + heat_cts_demand_st)
EnbG: Wärmebedarf aus Energiesystem
Sektor Landwirtschaft (CRF 3)#
Der Sektor umfasst Emissionen aus der Viehwirtschaft und der Bewirtschaftung von Böden. Daher werden zunächst die Emissionsunterkategorien 3.A-J der Viehwirtschaft oder der Bewirtschaftung von Böden zugeordnet. Anschließend werden diese getrennt nach den Viehbeständen bzw. der landwirtschaftlich genutzen Fläche disaggreiert.
CRF 3.A - Landwirtschaft – Fermentation#
Emissionen durch Fermentation (CRF 3.A) entstehen vorrangig durch Verdauungsprozesse in der Viehwirtschaft. Deswegen wird der Anteil ABWs an diesen Emissionen durch die Viehbestände abgeschätzt.
Hinweis:
- Die Viehbestände für 1990 sind nicht bekannt, es wird stattdessen auf die Viehbestände von 1996 zurückggegriffen.
EnbG: Viehbestände
Quelle:
CRF 3.B-J#
In den Unterkategorien 3.C-J ist eine Proportionalität der Emissionen und der landwirtschafltich genutzen Fläche zu erwarten. Unterkategorie 2.B "Wirtschaftsdüngerausbringung (ohne Gärreste)" ist allerdings ein Grenzfall, da er aus Abfällen der Tierhaltung produziert wird und bereits hierbei Treibhausgase entstehen, diese aber nicht vor Ort eingesetzt werden müssen, sondern auf beliebigen landwirtschafltichen Flächen eingesetzt werden kann. Daher wird hier auch diese Unterkategorie der Landnutzung zugeordnet.
Hinweis:
- die Flächenntuzungsdaten gehen nicht bis 1990 zurück, ändern sich über die Jahre aber nur marginal, sodass hier nur von geringen Abweichungen auszugehen ist.
EnbG: Landwirtschaftlich genutzte Fläche
Quelle:
Sektor Abfall und Abwasser (CRF 5)#
Dieser Sektor besteht vor allem aus Emissionen aus Abfalldeponien, welche der Zersetzung organischer Materialien in Deponien entstehen. Es wird angenommen, dass der Abfall aus Produktionsprozessen gegenüber den Abfällen aus Konsum vernachlässigbar sind, weswegen eine Disaggregation auf Grundlage der Bevölkerung von ABW vorgenommen wird.
EnbG: Bevölkerung
Quelle:
Dataset: raw/emissions
DemandRegio#
Regionalisierte Bevölkerungsprognose, Haushalte sowie Strom- und Gasbedarfe inkl. Zeitreihen auf Landkreisebene.
Die Daten wurden abgerufen mit einer modifizierten Version des DemandRegio disaggregators, in der softwareseitige, jedoch keine methodischen Änderungen vorgenommen wurden.
Der disaggregator basiert auf Daten bis 2017, anschließende Jahre werden fortgeschrieben.
Weitere Informationen zum Projekt DemandRegio:
Die erzeugten Rohdaten wie unten beschrieben wurden mittels API abgerufen. Diese können alternativ direkt vom OpenData-Portal der FfE bezogen werden.
Verwendetes Wetterjahr für Gasbedarfszeitreihen: 2011
Installation (in separater venv):
pip install disaggregator@git+https://github.com/nesnoj/disaggregator.git#egg=disaggregator
Details zum Datenabruf#
Bevölkerung#
Bevölkerung (Summe) und Bevölkerung je Haushaltsgröße (1, 2, 3, 4, 5, >5) je NUTS3.
Jahre:
- Bevölkerung bis 2017 historische Werte
- Bevölkerung ab 2018 prognostizierte Werte basierend auf der 14. koordinierten Bevölkerungsvorausberechnung der Statistischen Ämter von Bund und Ländern.
- Haushalte nur 2011
import pandas as pd
from disaggregator import data
## Population
dr_hh_population = pd.DataFrame()
for year in [2010, 2015, 2017, 2020, 2021, 2022, 2025, 2030, 2035, 2040, 2045]:
dr_hh_population[year] = round(data.population(year=year)).astype(int)
dr_hh_population.to_csv("dr_hh_population.csv")
## Households
data.households_per_size().to_csv("dr_hh_households_2011.csv")
Haushalte: Strom#
Bedarfe und SLP-Zeitreihen je NUTS3 mit Bottom-Up-Methode nach Haushaltsgröße.
Jahre:
- 2017: Letzte verfügbare Daten
- 2022: Status quo, Fortschreibung mit Berücksichtigung Demografie und Wanderung
- 2035: Fortschreibungsjahr mit Berücksichtigung Demografie und Wanderung
- 2045: Fortschreibungsjahr
from disaggregator import spatial, temporal
## Consumption
spatial.disagg_households_power(
by="households",
weight_by_income=True,
year=2022,
scale_by_pop=True,
).to_csv(f"dr_hh_power_demand_2022.csv")
## Timeseries
temporal.disagg_temporal_power_housholds_slp(
use_nuts3code=True,
by="households",
weight_by_income=True,
year=2022,
scale_by_pop=True,
).to_csv(f"dr_hh_power_timeseries_2022.csv")
Haushalte: Gas#
Zeitreihen je NUTS3
from disaggregator import temporal
## Timeseries
temporal.disagg_temporal_gas_households(
use_nuts3code=True,
how='top-down',
year=2011,
).to_csv(f"dr_hh_gas_timeseries_2011.csv")
GHD und Industrie: Strom#
Bedarfe und Zeitreihen je NUTS3:
- Bedarfe: Je Wirtschaftszweig (WZ), abzüglich Eigenerzeugung
- Zeitreihen: Für alle WZ bedarfsgewichtet aggregiert, Einzelprofile basieren je nach WZ auf gemessenen oder SLP inkl. Wanderung
- Letzte verfügbare Daten aus 2017, Fortschreibung für 2022 mit Berücksichtigung Beschäftigte und Effizienzgewinne
from disaggregator import spatial, temporal
########
## CTS #
########
## Consumption
spatial.disagg_CTS_industry(
sector='CTS',
source='power',
use_nuts3code=True,
year=2022,
).to_csv("dr_cts_power_demand_2022.csv")
## Timeseries
temporal.disagg_temporal_power_CTS(
detailed=False,
use_nuts3code=True,
year=2022,
).to_csv("dr_cts_power_timeseries_2022.csv")
#############
## Industry #
#############
## Consumption
spatial.disagg_CTS_industry(
sector='industry',
source='power',
use_nuts3code=True,
year=2022,
).to_csv("dr_ind_power_demand_2022.csv")
## Timeseries
temporal.disagg_temporal_industry(
source="power",
detailed=False,
use_nuts3code=True,
no_self_gen=False,
year=2022,
).to_csv("dr_ind_power_timeseries_2022.csv")
GHD: Gas#
Zeitreihen je NUTS3 für alle WZ bedarfsgewichtet aggregiert, Einzelprofile basieren je nach WZ auf gemessenen oder SLP inkl. Wanderung. Letzte verfügbare Daten aus 2017, Fortschreibung für 2022 mit Berücksichtigung Beschäftigte und Effizienzgewinne.
from disaggregator import spatial, temporal
## Timeseries
x=temporal.disagg_temporal_gas_CTS(
detailed=False,
use_nuts3code=True,
year=2011,
).to_csv("dr_cts_gas_timeseries_2011.csv")
Industrie: Gas#
Bedarfe und Zeitreihen je NUTS3:
- Bedarfe: Je Wirtschaftszweig (WZ), abzüglich Eigenerzeugung
- Zeitreihen: Für alle WZ bedarfsgewichtet aggregiert, Einzelprofile basieren je nach WZ auf gemessenen oder SLP inkl. Wanderung
- Letzte verfügbare Daten aus 2017, Fortschreibung für 2022 mit Berücksichtigung Beschäftigte und Effizienzgewinne
from disaggregator import spatial, temporal
## Consumption
spatial.disagg_CTS_industry(
sector='industry',
source='gas',
use_nuts3code=True,
year=2022,
).to_csv("dr_ind_gas_demand_2022.csv")
## Timeseries
x=temporal.disagg_temporal_industry(
source="gas",
detailed=False,
use_nuts3code=True,
no_self_gen=False,
year=2011,
).to_csv("dr_ind_gas_timeseries_2011.csv")
Dataset: raw/demandregio
BMWK Langfristszenarien#
Langfristszenarien des Bundesministerium für Wirtschaft und Klimaschutz, Daten auf Deutschlandebene.
Die Daten wurden über den Szenario Explorer abgerufen.
Verwendete Szenarien#
- T45-Strom: Stromfokussiertes Szenario aus den T45-Szenarien aus 2023, die Wege zur Treibhausgasneutralität bis 2045 unter Einhaltung aktueller politischer Vorgaben erreichen. Die Daten dieses Szenarios werden als Grundlage für das Zielszenario in der Region verwendet.
- TN-Strom: Stromfokussiertes Szenario aus den TN-Szenarien aus 2021, die unterschiedliche Pfade für Deutschland mit dem Ziel treibhausgasneutral bis 2050 zu werden. Die Daten dieses Szenarios werden als Grundlage für den Status quo verwendet (Ausnahme: Erzeugung Wärmenetze, hier wurden manuell Daten für 2021 ergänzt).
Daten#
T45-Strom#
Datensatz | Quelle | Datei |
---|---|---|
Gebäude: Haushalte und GHD Energiebedarf | Link | T45-Strom_buildings_heating_demand_by_carrier.csv |
Gebäude: Anzahl der Heizungen nach Technologie | Link | T45-Strom_buildings_heating_structure_by_technology.csv |
GHD Energieträger | Link | T45-Strom_cts_demand.csv |
Haushalte Energieträger | Link | T45-Strom_hh_demand.csv |
Industrie Energiebedarf | Link | T45-Strom_ind_demand.csv |
Stromsystem Deutschland Leistung | Link | T45-Strom_electricity_installed_power.csv |
Erzeugung Wärmenetze Deutschland | Link, Link2 (S. 37) | T45-Strom_Generation_Heatgrids_Germany.csv |
TN-Strom#
Datensatz | Quelle | Datei |
---|---|---|
Gebäude: Haushalte und GHD Energiebedarf | Link | TN-Strom_buildings_heating_demand_by_carrier.csv |
Gebäude: Anzahl der Heizungen nach Technologie | Link | TN-Strom_buildings_heating_structure_by_technology.csv |
GHD Energieträger | Link | TN-Strom_cts_demand.csv |
Haushalte Energieträger | Link | TN-Strom_hh_demand.csv |
Industrie Energiebedarf | Link | TN-Strom_ind_demand.csv |
Dataset: raw/bmwk_long_term_scenarios
Temperatur#
Stündliche Mittelwerte der Luft- und Erdbodentemperatur des Deutschen Wetterdienstes (Climate Data Center) für das Jahr 2011 je Gemeinde in der Region ABW, vorverarbeitet im Projekt WindNODE.
Werte:
temp_amb
: Lufttemperatur in 2 m Höhetemp_soil
: Erdbodentemperatur in 1 m Tiefe
Verwendete Stationen:
- Wittenberg
- Köthen
- Jessnitz
- Seehausen
- Holzdorf
Die Zuordnung der Stationsmesswerte zu Gemeinden erfolgte über die jeweils nächstgelegene Wetterstation.
Dataset: raw/dwd_temperature
sEEnergies Pan-European Thermal Atlas 5.2 (Peta5)#
Wärmebedarf für Europa 2015 in GJ (1ha Auflösung) für
- Haushalte: Raumwärme und Warmwasser
- GHD: Raumwärme, Warmwasser und Prozesswärme
Die Daten können auf der Projektseite eingesehen werden.
Haushalte#
Abgerufen mittels
wget -O Peta5_0_1_HD_res.zip https://arcgis.com/sharing/rest/content/items/d7d18b63250240a49eb81db972aa573e/data
GHD und Industrie#
Abgerufen mittels
wget -O Peta5_0_1_HD_ser.zip https://arcgis.com/sharing/rest/content/items/52ff5e02111142459ed5c2fe3d80b3a0/data
Dataset: raw/seenergies_peta5
EE-Einspeisezeitreihen#
Einspeisezeitreihen für Erneuerbare Energien, normiert auf 1 MW bzw. 1 p.u. Als Wetterjahr wird 2011 verwendet, siehe Szenarien.
Windenergie#
Stündlich aufgelöste Zeitreihe der Windenergie Einspeisung über 1 Jahr auf Basis von MaStR und renewables.ninja. Auf einen Auflösung auf Gemeindeebene wird verzichtet, da die Differenz der Produktion der Gemeinden nach renewables.ninja <5 % beträgt.
Windenergieanlage (2022)#
Für renewables.ninja sind Position (lat, lon), Nennleistung (capacity), Nabenhöhe und Turbinentyp erforderlich.
Position#
Hierfür wird aus den Zentroiden der Gemeinden ein räumlicher Mittelwert
anhand des Datensatzes
bkg_vg250_muns_region
(bkg_vg250_muns_region.gpkg
) gebildet:
import geopandas as gpd
import os.path
def get_position(gdf):
df = gpd.read_file(gdf)
points_of_muns = df["geometry"].centroid
points_of_muns_crs = points_of_muns.to_crs(4326)
point_df = [
points_of_muns_crs.y.sum()/len(points_of_muns),
points_of_muns_crs.x.sum()/len(points_of_muns)
]
return point_df
data_folder = os.path.join("your_data_folder")
muns_gpkg = os.path.join(data_folder, "bkg_vg250_muns_region.gpkg")
center_position = get_position(muns_gpkg)
Nennleistung#
Wird auf 1 MW gesetzt/normiert.
Nabenhöhe#
Aus dem Datensatz
bnetza_mastr_wind_region
(bnetza_mastr_wind_agg_abw.gpkg
) wird ein Mittelwer von 100 m abgeleitet.
import geopandas as gpd
df = gpd.read_file("bnetza_mastr_wind_agg_abw.gpkg")
height = df[["hub_height"]].mean()
Turbinentyp#
Annahme: Innerhalb eines Herstellers sind Leistungskurven sehr ähnlich. Daher werden zwei größten Hersteller mit jeweiligen häufigsten Turbinentyp ausgewählt - diese sind Enercon und Vestas mit ca. 70 % und ca. 30%.
import geopandas as gpd
df = gpd.read_file("bnetza_mastr_wind_agg_abw.gpkg")
manufacturers = df[
["manufacturer_name", "status"]
].groupby("manufacturer_name").count().sort_values(
by="status", ascending=False
)
Häufigste Turbinentypen sind Enercon E-70 und Vestas V80. Daher werden Enercon E70 2000 und Vestas V80 2000 in renewables.ninja ausgewählt.
man_1 = manufacturers.index[0]
man_2 = manufacturers.index[1]
type_1 = df[
["manufacturer_name", "type_name", "status"]
].where(df["manufacturer_name"] == man_1).groupby(
"type_name").count().sort_values(by="status", ascending=False)
type_2 = df[
["manufacturer_name", "type_name", "status"]
].where(df["manufacturer_name"] == man_2).groupby(
"type_name").count().sort_values(by="status", ascending=False)
Raw Data von renewables.ninja API#
Es werden zwei Zeitreihen für oben beschriebenen Vergleichsanlagen berechnet:
import json
import requests
import pandas as pd
import geopandas as gpd
def change_wpt(position, capacity, height, turbine):
args = {
'lat': 51.8000, # 51.5000-52.0000
'lon': 12.2000, # 11.8000-13.1500
'date_from': '2011-01-01',
'date_to': '2011-12-31',
'capacity': 1000.0,
'height': 100,
'turbine': 'Vestas V164 7000',
'format': 'json',
'local_time': 'true',
'raw': 'false',
}
args['capacity'] = capacity
args['height'] = height
args['lat'] = position[0]
args['lon'] = position[1]
args['turbine'] = turbine
return args
def get_df(args):
token = 'Please get your own'
api_base = 'https://www.renewables.ninja/api/'
s = requests.session()
# Send token header with each request
s.headers = {'Authorization': 'Token ' + token}
url = api_base + 'data/wind'
r = s.get(url, params=args)
parsed_response = json.loads(r.text)
df = pd.read_json(
json.dumps(parsed_response['data']),orient='index')
metadata = parsed_response['metadata']
return df
enercon_production = get_df(change_wpt(
position,
capacity=1,
height=df[["hub_height"]].mean(),
turbine=enercon)
)
vestas_production = get_df(change_wpt(
position,
capacity=1000,
height=df[["hub_height"]].mean(),
turbine=vestas)
)
Gewichtung und Skalierung der Zeitreihen#
Um die Charakteristika der beiden o.g. Anlagentypen zu berücksichtigen, erfolgt eine gewichtete Summierung der Zeitreihen anhand der berechneten Häufigkeit.
Zukunftsszenarien#
Analog zu dem oben beschriebenen Vorgehen wird eine separate Zeitreihe für zukünftige WEA berechnet. Hierbei wird eine Enercon E126 6500 mit einer Nabenhöhe von 159 m angenommen (PV- und Windflächenrechner).
Da die Zeitreihe sich nur marginal von der obigen Status-quo-Zeitreihe unterscheidet, wird letztere sowohl für den Status quo als auch die Zukunftsszenarien verwendet.
- Einspeisezeitreihe:
wind_feedin_timeseries.csv
Freiflächen-Photovoltaik#
PV-Anlage (2022)#
Stündlich aufgelöste Zeitreihe der Photovoltaikeinspeisung über 1 Jahr auf Basis von MaStR und renewables.ninja. Wie bei der Windeinspeisung wird auf eine Auflsöung auf Gemeindeebene aufgrund geringer regionaler Abweichungen verzichtet.
Für die Generierung der Zeitreihe über renewables.ninja wird eine Position(lat, lon), Nennleistung (capacity), Verluste (system_loss) Nachführung (tracking), Neigung (tilt) und der Azimutwinkel (azim) benötigt.
Als Position wird analog zur Windenergieanlage der räumlicher Mittelwert verwendet. Laut MaStR werden lediglich 13 Anlagen nachgeführt (0,01 % der Kapazität), die Nachführung wird daher vernachlässigt. Die Neigung ist aus MaStR nicht bekannt, es dominieren jedoch Anlagen auf Freiflächen sowie Flachdächern im landwirtschaftlichen Kontext. Nach Ariadne Szenarienreport wird diese mit 30° angenommen. Die Nennleistung Wird auf 1 MW gesetzt/normiert.
Zukunftsszenarien#
Die Status-quo-Zeitreihe wird sowohl für den Status quo als auch die Zukunftsszenarien verwendet.
- Einspeisezeitreihe:
pv_feedin_timeseries.csv
Solarthermie#
- Einspeisezeitreihe:
st_feedin_timeseries.csv
(Kopie von PV-Einspeisezeitreihe)
Laufwasserkraft#
Hier wird eine konstante Einspeisung angenommen.
- Einspeisezeitreihe:
ror_feedin_timeseries.csv
Dataset: raw/renewables.ninja_feedin
Dachflächenpotenzial PV-Aufdachanlagen in ABW#
Abschätzung der installierten Leistung und des Ertrags von PV-Aufdachanlagen in Anhalt-Bitterfeld-Wittenberg der Regionalen Planungsgemeinschaft.
Dafür wurden auf Basis des Digitalen Oberflächenmodells (DOM2) Schattenberechnungen durchgeführt. Anhand des LoD2 3D-Gebäudemodells wurden für verschiedene Dachausrichtungen (nord, ost, süd, west, flach) die installierbare Leistung bestimmt und mittels der Globalstrahlung und typischer technischer Parameter für jedes Gebäude und jede Dachflächenorientierung potenzielle Erträge berechnet.
Quellen:
Dataset: raw/rpg_abw_pv_roof_potential
AGEB – Anwendungsbilanzen für die Endenergiesektoren 2011 bis 2021#
Detaillierte Anwendungsbilanzen der Endenergiesektoren für 2020 und 2021 sowie zusammenfassende Zeitreihen zum Endenergieverbrauch nach Energieträgern und Anwendungszwecken für Jahre von 2011 bis 2021 der AG Energiebilanzen.
Dataset: raw/ageb_energy_balance
Verwaltungsgebiete Deutschlands#
Verwaltungsgebiete Deutschlands (Verwaltungsgebiete 1:250 000).
Dataset: raw/bkg_vg250
Bevölkerungsprognose Sachsen-Anhalt#
Bevölkerungsprognose je Gemeinde bis 2035 des Statistischen Landesamtes Sachsen-Anhalt. Stand: 2021
Dataset: raw/stala_st_pop_prog
Geodaten PV- und Windflächenrechner#
Geodaten aus dem PV- und Windflächenrechner.
Mehr Informationen:
Enthält:
- Geodaten
- Metadaten
- App-Datapackage
Dataset: raw/rli_pv_wfr
Marktstammdatenregister Datenkorrektur PV#
Überprüfung und manuelle Datenkorrektur der Photovoltaikanlagen aus dem prozessierten Marktstammdatenregister (Datensatz: bnetza_mastr).
Plausibiltätsprüfung#
Um grobe Fehler herauszufiltern wird überprüft, ob
- Anlage in Betrieb ist (status = "In Betrieb"),
- Anlage Strom produziert,
- Brutto- und Nettokapazität plausibel sind und
- die Kategorisierung, d.h. Zuordnung eine PV-Anlage zu Freifläche oder Dach, plausibel ist (manuelle, visuelle Prüfung von geolokalisierten PV-Aufdachanlagen anhand von Orthofotos)
Dateien#
- Korrektur Freiflächenanlagen
bnetza_mastr_pv_ground_region_correction.ods
- Korrektur Aufdachanlagen
bnetza_mastr_pv_roof_region_correction.ods
mit Spalten:
- mastr_id: ID aus dem MaStR
- reason: Fehler (wrong_type, wrong_position)
- wrong_attr: Fehlerhaftes Attribut
- correction: Korrigierter Attributwert (None, wenn Korrektur nicht möglich). Korrigierte Geometrien liegen in EPSG:3035 vor.
Dataset: raw/bnetza_mastr_correction_region