{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Conventional Power Plants: Power Plants in Germany\n", " \n", "
This notebook is part of the Data package name here Data Package of Open Power System Data.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Power Plants in Germany" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This file covers german power plants. It downloads the power plant list from the German Federal Network Agency (BNetzA) and augments it with more information." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Table of Contents\n", "* [1. Power Plants in Germany](#1.-Power-Plants-in-Germany)\n", "* [2. Prepare the environment](#2.-Prepare-the-environment)\n", "* [3. Download settings](#3.-Download-settings)\n", "\t* [3.1 Choose download location](#3.1-Choose-download-location)\n", "* [4. Define functions](#4.-Define-functions)\n", "* [5. Downloads](#5.-Downloads)\n", "\t* [5.1 Download the BNetzA power plant list](#5.1-Download-the-BNetzA-power-plant-list)\n", "\t* [5.2 Download the Uba Plant list](#5.2-Download-the-Uba-Plant-list)\n", "* [6. Translate contents](#6.-Translate-contents)\n", "\t* [6.1 Columns](#6.1-Columns)\n", "\t* [6.2 Fuel types](#6.2-Fuel-types)\n", "\t* [6.3 Power plant status](#6.3-Power-plant-status)\n", "\t* [6.4 CHP Capability](#6.4-CHP-Capability)\n", "\t* [6.5 EEG](#6.5-EEG)\n", "\t* [6.6 UBA Columns](#6.6-UBA-Columns)\n", "* [7. Process data](#7.-Process-data)\n", "\t* [7.1 Set index to the BNetzA power plant ID](#7.1-Set-index-to-the-BNetzA-power-plant-ID)\n", "\t* [7.2 Merge data from UBA List](#7.2-Merge-data-from-UBA-List)\n", "\t\t* [7.2.1 case 1-1](#7.2.1-case-1-1)\n", "\t\t* [7.2.2 case n-1](#7.2.2-case-n-1)\n", "\t\t* [7.2.3 case 1-n](#7.2.3-case-1-n)\n", "\t\t* [7.2.4 Merge into plantlist](#7.2.4-Merge-into-plantlist)\n", "\t* [7.3 Delete fuels not in focus](#7.3-Delete-fuels-not-in-focus)\n", "\t* [7.4 Add Columns for shutdown and retrofit](#7.4-Add-Columns-for-shutdown-and-retrofit)\n", "\t* [7.5 Convert input colums to usable data types](#7.5-Convert-input-colums-to-usable-data-types)\n", "\t* [7.6 Identify generation technology](#7.6-Identify-generation-technology)\n", "\t\t* [7.6.1 Process technology information from UBA list](#7.6.1-Process-technology-information-from-UBA-list)\n", "\t\t* [7.6.2 Identify generation technology based on BNetzA information](#7.6.2-Identify-generation-technology-based-on-BNetzA-information)\n", "\t* [7.7 Add country code](#7.7-Add-country-code)\n", "\t* [7.8 Add efficiency data](#7.8-Add-efficiency-data)\n", "\t\t* [7.8.1 Efficiencies from research](#7.8.1-Efficiencies-from-research)\n", "\t\t\t* [7.8.1.1 Import data](#7.8.1.1-Import-data)\n", "\t\t\t* [7.8.1.2 Plot efficiencies by year of commissioning](#7.8.1.2-Plot-efficiencies-by-year-of-commissioning)\n", "\t\t\t* [7.8.1.3 Determine least-squares approximation based on researched data (planned)](#7.8.1.3-Determine-least-squares-approximation-based-on-researched-data-%28planned%29)\n", "\t\t\t* [7.8.1.4 Apply efficiency approximation from least squares approximation (planned)](#7.8.1.4-Apply-efficiency-approximation-from-least-squares-approximation-%28planned%29)\n", "\t\t* [7.8.2 Efficiencies from literature](#7.8.2-Efficiencies-from-literature)\n", "\t\t\t* [7.8.2.1 Import data](#7.8.2.1-Import-data)\n", "\t\t\t* [7.8.2.2 Apply efficiency approximation from literature](#7.8.2.2-Apply-efficiency-approximation-from-literature)\n", "\t* [7.9 Add geodata](#7.9-Add-geodata)\n", "\t* [7.10 Allocate energy source levels](#7.10-Allocate-energy-source-levels)\n", "* [8. Define final output](#8.-Define-final-output)\n", "\t* [8.1 Round values](#8.1-Round-values)\n", "\t* [8.2 Verification](#8.2-Verification)\n", "\t\t* [8.2.1 Capacities by plant status](#8.2.1-Capacities-by-plant-status)\n", "\t\t* [8.2.2 Power plant age](#8.2.2-Power-plant-age)\n", "\t\t* [8.2.3 Block size vs year of commissioning](#8.2.3-Block-size-vs-year-of-commissioning)\n", "\t* [8.3 Logical checks](#8.3-Logical-checks)\n", "\t\t* [8.3.1 Every power plant needs a capacity](#8.3.1-Every-power-plant-needs-a-capacity)\n", "\t\t* [8.3.2 Commissioning Dates](#8.3.2-Commissioning-Dates)\n", "\t\t* [8.3.3 Compare UBA and BNetzA data](#8.3.3-Compare-UBA-and-BNetzA-data)\n", "\t\t\t* [8.3.3.1 Postcodes of BNetzA and UBA lists should match](#8.3.3.1-Postcodes-of-BNetzA-and-UBA-lists-should-match)\n", "\t\t\t* [8.3.3.2 Compare Installed capacities](#8.3.3.2-Compare-Installed-capacities)\n", "* [9. Result export](#10.-Result-export)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Prepare the environment" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Import all functions from external file\n", "from download_and_process_DE_functions import *\n", "\n", "# Jupyter functions\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Download settings" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3.1 Choose download location" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The original data can either be downloaded from the original data sources as specified below or from the opsd-Server. Default option is to download from the original sources as the aim of the project is to stay as close to original sources as possible. However, if problems with downloads e.g. due to changing urls occur, you can still run the script with the original data from the opsd_server." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "scrolled": false }, "outputs": [], "source": [ "download_from = 'original_sources'\n", "#download_from = 'opsd_server' " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [], "source": [ "if download_from == 'original_sources':\n", " # BNetzA Power plant list\n", " url_bnetza = ('http://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/'\n", " 'Sachgebiete/Energie/Unternehmen_Institutionen/Versorgungssicherheit/'\n", " 'Erzeugungskapazitaeten/Kraftwerksliste/Kraftwerksliste_CSV.csv'\n", " '?__blob=publicationFile&v=10')\n", "\n", " # UBA Power plant list\n", " url_uba = ('https://www.umweltbundesamt.de/sites/default/files/medien/'\n", " '372/dokumente/kraftwerke_de_ab_100_mw_0.xls')\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": false }, "outputs": [], "source": [ "if download_from == 'opsd_server':\n", " # Specify direction to original_data folder on the opsd data server\n", " # BNetzA Power plant list\n", " url_bnetza = 'http://data.open-power-system-data.org/conventional_power_plants/'\n", " url_bnetza = url_bnetza + '2020-10-01'\n", " url_bnetza = url_bnetza +'/original_data/Kraftwerksliste_CSV.csv'\n", " \n", " # UBA Power plant list\n", " url_uba = 'http://data.open-power-system-data.org/conventional_power_plants/'\n", " url_uba = url_uba + '2020-10-01'\n", " url_uba = url_uba +'/original_data/kraftwerke-de-ab-100-mw_0.xls'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. Define functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Functions used multiple times within this script are now located in a separate file called download_and_process_DE_functions.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 5. Downloads" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5.1 Download the BNetzA power plant list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This section downloads the BNetzA power plant list and converts it to a pandas data frame" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "01 Oct 2020 12:32:58 - root - INFO - Downloading file Kraftwerksliste_CSV.csv\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Kraftwerksnummer BundesnetzagenturUnternehmenKraftwerksnamePLZ\\n(Standort Kraftwerk)Ort\\n(Standort Kraftwerk)Straße und Hausnummer (Standort Kraftwerk)BundeslandBlocknameDatum der Aufnahme der kommerziellen Stromeinspeisung der Erzeugungseinheit [Datum/jahr]Kraftwerksstatus \\n(in Betrieb/\\nvorläufig stillgelegt/\\nsaisonale Konservierung\\nReservekraftwerk/\\nSonderfall)EnergieträgerSpezifizierung \"Mehrere Energieträger\" und \"Sonstige Energieträger\" - HauptbrennstoffSpezifizierung \"Mehrere Energieträger\" - Zusatz- / ErsatzbrennstoffeAuswertung\\nEnergieträger (Zuordnung zu einem Hauptenergieträger bei Mehreren Energieträgern)Förderberechtigt nach EEG\\n(ja/nein)Wärmeauskopplung (KWK)\\n(ja/nein)Netto-Nennleistung (elektrische Wirkleistung) in MWBezeichnung Verknüpfungspunkt (Schaltanlage) mit dem Stromnetz der Allgemeinen Versorgung gemäß NetzbetreiberNetz- oder Umspannebene des AnschlussesName Stromnetzbetreiber
0BNA0001NaNNaN52074AachenNaNNordrhein-WestfalenNaN1997in BetriebWindenergie (Onshore-Anlage)NaNNaNWindenergie (Onshore-Anlage)JaNaN15.0NaNMittelspannung (MS)INFRAWEST GmbH
1BNA1888STAWAG Energie GmbHWindpark Aachen Nord GmbH & Co. KGNaNAachenNaNNordrhein-WestfalenNaN08.06.2017in BetriebWindenergie (Onshore-Anlage)NaNNaNWindenergie (Onshore-Anlage)JaNaN12.1NaNNaNNaN
2BNA1011Breeze Three Energy GmbH & Co. KGWindpark Waldhausen73433AalenNaNBaden-WürttembergNaN30.12.2006in BetriebWindenergie (Onshore-Anlage)NaNNaNWindenergie (Onshore-Anlage)JaNein14.0DE0010107343300000000000000287689 & DE 0010107...Mittelspannung (MS)Netzgesellschaft Ostwürttemberg DonauRies GmbH
3BNA1938Papierfabrik Palm GmbH & Co. KGKWK-Anlage Neukochen73432AalenNaNBaden-WürttembergNeukochen 1001.01.1960in BetriebErdgasNaNNaNErdgasNeinJa15.0UW ErlauMittelspannung (MS)Stadtwerke Aalen
4BNA0002ecoJoule construct GmbHNaN28832AchimNaNNiedersachsenNaN2002in BetriebWindenergie (Onshore-Anlage)NaNNaNWindenergie (Onshore-Anlage)JaNaN13.3NaNUSp. Hoch- / Mittelspannung (HS/MS)EWE NETZ GmbH
\n", "
" ], "text/plain": [ " Kraftwerksnummer Bundesnetzagentur Unternehmen \\\n", "0 BNA0001 NaN \n", "1 BNA1888 STAWAG Energie GmbH \n", "2 BNA1011 Breeze Three Energy GmbH & Co. KG \n", "3 BNA1938 Papierfabrik Palm GmbH & Co. KG \n", "4 BNA0002 ecoJoule construct GmbH \n", "\n", " Kraftwerksname PLZ\\n(Standort Kraftwerk) \\\n", "0 NaN 52074 \n", "1 Windpark Aachen Nord GmbH & Co. KG NaN \n", "2 Windpark Waldhausen 73433 \n", "3 KWK-Anlage Neukochen 73432 \n", "4 NaN 28832 \n", "\n", " Ort\\n(Standort Kraftwerk) Straße und Hausnummer (Standort Kraftwerk) \\\n", "0 Aachen NaN \n", "1 Aachen NaN \n", "2 Aalen NaN \n", "3 Aalen NaN \n", "4 Achim NaN \n", "\n", " Bundesland Blockname \\\n", "0 Nordrhein-Westfalen NaN \n", "1 Nordrhein-Westfalen NaN \n", "2 Baden-Württemberg NaN \n", "3 Baden-Württemberg Neukochen 10 \n", "4 Niedersachsen NaN \n", "\n", " Datum der Aufnahme der kommerziellen Stromeinspeisung der Erzeugungseinheit [Datum/jahr] \\\n", "0 1997 \n", "1 08.06.2017 \n", "2 30.12.2006 \n", "3 01.01.1960 \n", "4 2002 \n", "\n", " Kraftwerksstatus \\n(in Betrieb/\\nvorläufig stillgelegt/\\nsaisonale Konservierung\\nReservekraftwerk/\\nSonderfall) \\\n", "0 in Betrieb \n", "1 in Betrieb \n", "2 in Betrieb \n", "3 in Betrieb \n", "4 in Betrieb \n", "\n", " Energieträger \\\n", "0 Windenergie (Onshore-Anlage) \n", "1 Windenergie (Onshore-Anlage) \n", "2 Windenergie (Onshore-Anlage) \n", "3 Erdgas \n", "4 Windenergie (Onshore-Anlage) \n", "\n", " Spezifizierung \"Mehrere Energieträger\" und \"Sonstige Energieträger\" - Hauptbrennstoff \\\n", "0 NaN \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "\n", " Spezifizierung \"Mehrere Energieträger\" - Zusatz- / Ersatzbrennstoffe \\\n", "0 NaN \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "\n", " Auswertung\\nEnergieträger (Zuordnung zu einem Hauptenergieträger bei Mehreren Energieträgern) \\\n", "0 Windenergie (Onshore-Anlage) \n", "1 Windenergie (Onshore-Anlage) \n", "2 Windenergie (Onshore-Anlage) \n", "3 Erdgas \n", "4 Windenergie (Onshore-Anlage) \n", "\n", " Förderberechtigt nach EEG\\n(ja/nein) Wärmeauskopplung (KWK)\\n(ja/nein) \\\n", "0 Ja NaN \n", "1 Ja NaN \n", "2 Ja Nein \n", "3 Nein Ja \n", "4 Ja NaN \n", "\n", " Netto-Nennleistung (elektrische Wirkleistung) in MW \\\n", "0 15.0 \n", "1 12.1 \n", "2 14.0 \n", "3 15.0 \n", "4 13.3 \n", "\n", " Bezeichnung Verknüpfungspunkt (Schaltanlage) mit dem Stromnetz der Allgemeinen Versorgung gemäß Netzbetreiber \\\n", "0 NaN \n", "1 NaN \n", "2 DE0010107343300000000000000287689 & DE 0010107... \n", "3 UW Erlau \n", "4 NaN \n", "\n", " Netz- oder Umspannebene des Anschlusses \\\n", "0 Mittelspannung (MS) \n", "1 NaN \n", "2 Mittelspannung (MS) \n", "3 Mittelspannung (MS) \n", "4 USp. Hoch- / Mittelspannung (HS/MS) \n", "\n", " Name Stromnetzbetreiber \n", "0 INFRAWEST GmbH \n", "1 NaN \n", "2 Netzgesellschaft Ostwürttemberg DonauRies GmbH \n", "3 Stadtwerke Aalen \n", "4 EWE NETZ GmbH " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plantlist = getbnetzalist(url_bnetza)\n", "\n", "# clean unnamed columns\n", "plantlist.drop([c for c in plantlist.columns if 'Unnamed:' in c], axis=1, inplace=True)\n", "\n", "plantlist.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5.2 Download the UBA Plant list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This section downloads the power plant list from the German Federal Environment Agency (UBA) and converts it to a pandas data frame." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "01 Oct 2020 12:32:59 - root - INFO - Downloading file kraftwerke_de_ab_100_mw_0.xls\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Kraftwerksname / StandortBetreiberBundeslandStandort-PLZKraftwerksstandortElektrische Bruttoleistung (MW)Fernwärme-leistung (MW)Inbetriebnahme (ggf. Ertüchtigung)AnlagenartPrimärenergieträger
0AlbatrosEnBW Albatros GmbH & Co. KG / Enbridge Inc.OffshoreNaNNordsee112.0NaN2019WEAWind (O)
1Albbruck-DogernRheinkraftwerk Albbruck-Dogern AG / RWE Vertri...BW79774.0Albbruck108.9NaN1933 / 2009 (2020)LWKWasser
2Altbach/Deizisau GT A-C, EEnBW Kraftwerke AGBW73776.0Altbach305.0NaN1971-1997GTErdgas
3Altbach/Deizisau HKW 1EnBW Kraftwerke AGBW73776.0Altbach476.02801985 (2006)HKWSteinkohle
4Altbach/Deizisau HKW 2EnBW Kraftwerke AGBW73776.0Altbach379.02801997 (2012)HKW (DT)Steinkohle
\n", "
" ], "text/plain": [ " Kraftwerksname / Standort \\\n", "0 Albatros \n", "1 Albbruck-Dogern \n", "2 Altbach/Deizisau GT A-C, E \n", "3 Altbach/Deizisau HKW 1 \n", "4 Altbach/Deizisau HKW 2 \n", "\n", " Betreiber Bundesland Standort-PLZ \\\n", "0 EnBW Albatros GmbH & Co. KG / Enbridge Inc. Offshore NaN \n", "1 Rheinkraftwerk Albbruck-Dogern AG / RWE Vertri... BW 79774.0 \n", "2 EnBW Kraftwerke AG BW 73776.0 \n", "3 EnBW Kraftwerke AG BW 73776.0 \n", "4 EnBW Kraftwerke AG BW 73776.0 \n", "\n", " Kraftwerksstandort Elektrische Bruttoleistung (MW) Fernwärme-leistung (MW) \\\n", "0 Nordsee 112.0 NaN \n", "1 Albbruck 108.9 NaN \n", "2 Altbach 305.0 NaN \n", "3 Altbach 476.0 280 \n", "4 Altbach 379.0 280 \n", "\n", " Inbetriebnahme (ggf. Ertüchtigung) Anlagenart Primärenergieträger \n", "0 2019 WEA Wind (O) \n", "1 1933 / 2009 (2020) LWK Wasser \n", "2 1971-1997 GT Erdgas \n", "3 1985 (2006) HKW Steinkohle \n", "4 1997 (2012) HKW (DT) Steinkohle " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plantlist_uba = getubalist(url_uba)\n", "plantlist_uba.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 6. Translate contents" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.1 BNetzA Columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A dictionary with the original column names to the new column names is created. This dictionary is used to translate the column names." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [], "source": [ "dict_columns = {\n", " 'Kraftwerksnummer Bundesnetzagentur':\n", " 'id',\n", " 'Unternehmen':\n", " 'company',\n", " 'Kraftwerksname':\n", " 'name',\n", " 'PLZ\\n(Standort Kraftwerk)':\n", " 'postcode',\n", " 'Ort\\n(Standort Kraftwerk)':\n", " 'city',\n", " 'Straße und Hausnummer (Standort Kraftwerk)':\n", " 'street',\n", " 'Bundesland':\n", " 'state',\n", " 'Blockname':\n", " 'block',\n", " ('Datum der Aufnahme der kommerziellen Stromeinspeisung der Erzeugungseinheit [Datum/jahr]'):\n", " 'commissioned',\n", " ('Kraftwerksstatus \\n(in Betrieb/\\nvorläufig stillgelegt/\\nsaisonale '\n", " 'Konservierung\\nReservekraftwerk/\\nSonderfall)'):\n", " 'status',\n", " ('Kraftwerksstatus \\n(in Betrieb/\\nvorläufig stillgelegt/\\nsaisonale '\n", " 'Konservierung\\nGesetzlich an Stilllegung gehindert/\\nSonderfall)'):\n", " 'status',\n", " ('Kraftwerksstatus \\n(in Betrieb/\\nvorläufig stillgelegt/\\nsaisonale '\n", " 'Konservierung\\nNetzreserve/ Sicherheitsbereitschaft/\\nSonderfall)'):\n", " 'status',\n", " 'Energieträger':\n", " 'fuel_basis',\n", " ('Spezifizierung \"Mehrere Energieträger\" und \"Sonstige Energieträger\" - '\n", " 'Hauptbrennstoff'): 'fuel_multiple1',\n", " 'Spezifizierung \"Mehrere Energieträger\" - Zusatz- / Ersatzbrennstoffe':\n", " 'fuel_multiple2',\n", " ('Auswertung\\nEnergieträger (Zuordnung zu einem Hauptenergieträger bei '\n", " 'Mehreren Energieträgern)'):\n", " 'fuel',\n", " 'Förderberechtigt nach EEG\\n(ja/nein)':\n", " 'eeg',\n", " 'Wärmeauskopplung (KWK)\\n(ja/nein)':\n", " 'chp',\n", " 'Netto-Nennleistung (elektrische Wirkleistung) in MW':\n", " 'capacity',\n", " ('Bezeichnung Verknüpfungspunkt (Schaltanlage) mit dem Stromnetz der '\n", " 'Allgemeinen Versorgung gemäß Netzbetreiber'):\n", " 'network_node',\n", " 'Netz- oder Umspannebene des Anschlusses':\n", " 'voltage',\n", " 'Name Stromnetzbetreiber':\n", " 'network_operator',\n", " 'Kraftwerksname / Standort':\n", " 'uba_name',\n", " 'Betreiber ':\n", " 'uba_company',\n", " 'Standort-PLZ':\n", " 'uba_postcode',\n", " 'Kraftwerksstandort':\n", " 'uba_city',\n", " 'Elektrische Bruttoleistung (MW)':\n", " 'uba_capacity',\n", " 'Fernwärme-leistung (MW)':\n", " 'uba_chp_capacity',\n", " 'Inbetriebnahme (ggf. Ertüchtigung)':\n", " 'uba_commissioned',\n", " 'Anlagenart':\n", " 'uba_technology',\n", " 'Primärenergieträger':\n", " 'uba_fuel',\n", "}\n", "plantlist.rename(columns=dict_columns, inplace=True)\n", "\n", "# Check if all columns have been translated\n", "for columnnames in plantlist.columns:\n", " # if columnnames not in dict_columns.values():\n", " if columnnames not in dict_columns.values():\n", " logger.error(\"Untranslated column: \"+ columnnames)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.2 Fuel types" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [], "source": [ "# first remove line breaks\n", "plantlist['fuel'] = plantlist['fuel'].str.replace('\\n', ' ')\n", "\n", "# Delete entries without fuel and name\n", "plantlist = plantlist.dropna(subset = ['fuel','name'])\n", "\n", "dict_fuels = {\n", " 'Steinkohle': 'Hard coal',\n", " 'Erdgas': 'Natural gas',\n", " 'Braunkohle': 'Lignite',\n", " 'Kernenergie': 'Nuclear',\n", " 'Pumpspeicher': 'Hydro PSP',\n", " 'Biomasse': 'Biomass and biogas',\n", " 'Mineralölprodukte': 'Oil',\n", " 'Laufwasser': 'Hydro',\n", " 'Sonstige Energieträger (nicht erneuerbar) ': 'Other fuels',\n", " 'Abfall': 'Waste',\n", " 'Speicherwasser (ohne Pumpspeicher)': 'Hydro Reservoir',\n", " 'Unbekannter Energieträger (nicht erneuerbar)': 'Other fuels',\n", " 'Sonstige Energieträger (nicht erneuerbar)': 'Other fuels',\n", " 'Mehrere Energieträger (nicht erneuerbar)': 'Mixed fossil fuels',\n", " 'Deponiegas': 'Sewage and landfill gas',\n", " 'Windenergie (Onshore-Anlage)': 'Onshore',\n", " 'Windenergie (Onshore-Anlage)neu': 'Onshore',\n", " 'Windenergie (Offshore-Anlage)': 'Offshore',\n", " 'Solare Strahlungsenergie': 'Solar',\n", " 'Klärgas': 'Sewage and landfill gas',\n", " 'Geothermie': 'Geothermal',\n", " 'Grubengas': 'Other fossil fuels',\n", " 'Sonstige Speichertechnologien': 'Storage Technologies'\n", "}\n", "plantlist[\"fuel\"].replace(dict_fuels, inplace=True)\n", "\n", "# Check if all fuels have been translated\n", "for fuelnames in plantlist[\"fuel\"].unique():\n", " if fuelnames not in dict_fuels.values():\n", " print(dict_fuels.values(), fuelnames)\n", " logger.error(\"Untranslated fuel: \" + fuelnames)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.3 Power plant status" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [], "source": [ "dict_plantstatus = {\n", " 'in Betrieb': 'operating',\n", " 'In Betrieb': 'operating',\n", " 'vorläufig stillgelegt': 'shutdown_temporary',\n", " 'Vorläufig stillgelegt': 'shutdown_temporary',\n", " 'Vorläufig Stillgelegt': 'shutdown_temporary', \n", " 'Sonderfall': 'special_case',\n", " 'saisonale Konservierung': 'seasonal_conservation',\n", " 'Saisonale Konservierung': 'seasonal_conservation', \n", " 'Reservekraftwerk':'reserve',\n", " 'Endgültig Stillgelegt 2011': 'shutdown_2011',\n", " 'Endgültig Stillgelegt 2012': 'shutdown_2012',\n", " 'Endgültig Stillgelegt 2013': 'shutdown_2013',\n", " 'Endgültig Stillgelegt 2014': 'shutdown_2014',\n", " 'Endgültig Stillgelegt 2015': 'shutdown_2015',\n", " 'Endgültig stillgelegt 2015': 'shutdown_2015',\n", " 'Endgültig Stillgelegt 2016': 'shutdown_2016',\n", " 'Gesetzlich an Stilllegung gehindert': 'operating', \n", " 'Endgültig Stillgelegt 2011 (ohne StA)': 'shutdown_2011',\n", " 'Endgültig Stillgelegt 2012 (ohne StA)': 'shutdown_2012',\n", " 'Endgültig Stillgelegt 2013 (mit StA)': 'shutdown_2013',\n", " 'Endgültig Stillgelegt 2013 (ohne StA)': 'shutdown_2013',\n", " 'Endgültig Stillgelegt 2014 (mit StA)': 'shutdown_2014',\n", " 'Endgültig Stillgelegt 2014 (ohne StA)': 'shutdown_2014',\n", " 'Endgültig Stillgelegt 2015 (mit StA)': 'shutdown_2015',\n", " 'Endgültig Stillgelegt 2015 (ohne StA)': 'shutdown_2015',\n", " 'Endgültig Stillgelegt 2016 (mit StA)': 'shutdown_2016',\n", " 'Sicherheitsbereitschaft': 'reserve',\n", " 'Vorläufig Stillgelegt (mit StA)': 'shutdown_temporary',\n", " 'Vorläufig Stillgelegt (ohne StA)': 'shutdown_temporary',\n", " 'Endgültig Stillgelegt 2016 (ohne StA)': 'shutdown_2016',\n", " 'Endgültig Stillgelegt 2017 (mit StA)' : 'shutdown_2017',\n", " 'Endgültig Stillgelegt 2017 (ohne StA)': 'shutdown_2017',\n", " 'Endgültig Stillgelegt 2018 (mit StA)' : 'shutdown_2018',\n", " 'Endgültig Stillgelegt 2018 (ohne StA)': 'shutdown_2018',\n", " 'Endgültig Stillgelegt 2019 (mit StA)': 'shutdown_2019',\n", " 'Endgültig Stillgelegt 2019 (ohne StA)': 'shutdown_2019',\n", " 'gesetzlich an Stilllegung gehindert' : 'operating',\n", " 'Netzreserve' : 'reserve',\n", " 'Wegfall IWA nach DE' : 'special_case',\n", "} \n", "plantlist['status'].replace(dict_plantstatus, inplace=True) \n", "\n", "# Check if all fuels have been translated\n", "for statusnames in plantlist['status'].unique():\n", " if statusnames not in dict_plantstatus.values():\n", " logger.error('Untranslated plant status: '+ statusnames)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.4 CHP Capability" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": false }, "outputs": [], "source": [ "dict_yesno ={\n", " 'Nein': 'no',\n", " 'nein': 'no',\n", " 'Ja': 'yes',\n", " 'ja': 'yes', \n", "}\n", "plantlist['chp'].replace(dict_yesno, inplace=True)\n", "\n", "# Check if all fuels have been translated\n", "for chpnames in plantlist['chp'].unique():\n", " if (chpnames not in dict_yesno.values()) & (str(chpnames) != 'nan'):\n", " logger.error('Untranslated chp capability: ' + str(chpnames))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.5 EEG" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [], "source": [ "plantlist['eeg'].replace(dict_yesno, inplace=True)\n", "\n", "# Check if all fuels have been translated\n", "for eegnames in plantlist['eeg'].unique():\n", " if (eegnames not in dict_yesno.values()) & (str(eegnames) != 'nan'):\n", " logger.error('Untranslated EEG type: ' + str(eegnames))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6.6 UBA Columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Translate the UBA Column names" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "01 Oct 2020 12:33:00 - numexpr.utils - INFO - NumExpr defaulting to 4 threads.\n" ] } ], "source": [ "dict_uba_columns = {\n", " 'Kraftwerksname / Standort': 'uba_name',\n", " 'Betreiber ': 'uba_company',\n", " 'Standort-PLZ': 'uba_postcode',\n", " 'Kraftwerksstandort': 'uba_city',\n", " 'Elektrische Bruttoleistung (MW)': 'uba_capacity',\n", " 'Fernwärme-leistung (MW)': 'uba_chp_capacity',\n", " 'Inbetriebnahme (ggf. Ertüchtigung)': 'uba_commissioned',\n", " 'Anlagenart': 'uba_technology',\n", " 'Primärenergieträger': 'uba_fuel',\n", " 'Bundesland':'uba_state',\n", "}\n", "plantlist_uba.rename(columns=dict_uba_columns, inplace=True)\n", "\n", "# Check if all columns have been translated\n", "for columnnames in plantlist_uba.columns:\n", " if columnnames not in dict_uba_columns.values():\n", " logger.error('Untranslated column: ' + columnnames)\n", " \n", "# Prepare for matching\n", "plantlist_uba['uba_id_string'] = (plantlist_uba['uba_name'] \n", " + '_' \n", " + plantlist_uba['uba_fuel'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 7. Process data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.1 Set index to the BNetzA power plant ID" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
companynamepostcodecitystreetstateblockcommissionedstatusfuel_basisfuel_multiple1fuel_multiple2fueleegchpcapacitynetwork_nodevoltagenetwork_operatorbnetza_id
id
BNA1888STAWAG Energie GmbHWindpark Aachen Nord GmbH & Co. KGNaNAachenNaNNordrhein-WestfalenNaN08.06.2017operatingWindenergie (Onshore-Anlage)NaNNaNOnshoreyesNaN12.1NaNNaNNaNBNA1888
BNA1011Breeze Three Energy GmbH & Co. KGWindpark Waldhausen73433AalenNaNBaden-WürttembergNaN30.12.2006operatingWindenergie (Onshore-Anlage)NaNNaNOnshoreyesno14.0DE0010107343300000000000000287689 & DE 0010107...Mittelspannung (MS)Netzgesellschaft Ostwürttemberg DonauRies GmbHBNA1011
BNA1938Papierfabrik Palm GmbH & Co. KGKWK-Anlage Neukochen73432AalenNaNBaden-WürttembergNeukochen 1001.01.1960operatingErdgasNaNNaNNatural gasnoyes15.0UW ErlauMittelspannung (MS)Stadtwerke AalenBNA1938
BNA1099Breloh Windenergie GmbH und Co. KG11 Windkraftanlagen59227AhlenHalene - KampenNordrhein-Westfalen11 Windkraftanlagen 2,3 MW06.12.2011operatingWindenergie (Onshore-Anlage)NaNNaNOnshoreyesNaN25.3Umspannwerk Rosendahl, AhlenHochspannung (HS)Westnetz GmbHBNA1099
BNA1892HSW Windpark Ahorn-Buch GmbH & Co. KGHSW Windpark Ahorn-Buch74744AhornNaNBaden-WürttembergNaN30.05.2017operatingWindenergie (Onshore-Anlage)NaNNaNOnshoreyesNaN11.1NaNNaNNaNBNA1892
\n", "
" ], "text/plain": [ " company \\\n", "id \n", "BNA1888 STAWAG Energie GmbH \n", "BNA1011 Breeze Three Energy GmbH & Co. KG \n", "BNA1938 Papierfabrik Palm GmbH & Co. KG \n", "BNA1099 Breloh Windenergie GmbH und Co. KG \n", "BNA1892 HSW Windpark Ahorn-Buch GmbH & Co. KG \n", "\n", " name postcode city \\\n", "id \n", "BNA1888 Windpark Aachen Nord GmbH & Co. KG NaN Aachen \n", "BNA1011 Windpark Waldhausen 73433 Aalen \n", "BNA1938 KWK-Anlage Neukochen 73432 Aalen \n", "BNA1099 11 Windkraftanlagen 59227 Ahlen \n", "BNA1892 HSW Windpark Ahorn-Buch 74744 Ahorn \n", "\n", " street state block \\\n", "id \n", "BNA1888 NaN Nordrhein-Westfalen NaN \n", "BNA1011 NaN Baden-Württemberg NaN \n", "BNA1938 NaN Baden-Württemberg Neukochen 10 \n", "BNA1099 Halene - Kampen Nordrhein-Westfalen 11 Windkraftanlagen 2,3 MW \n", "BNA1892 NaN Baden-Württemberg NaN \n", "\n", " commissioned status fuel_basis fuel_multiple1 \\\n", "id \n", "BNA1888 08.06.2017 operating Windenergie (Onshore-Anlage) NaN \n", "BNA1011 30.12.2006 operating Windenergie (Onshore-Anlage) NaN \n", "BNA1938 01.01.1960 operating Erdgas NaN \n", "BNA1099 06.12.2011 operating Windenergie (Onshore-Anlage) NaN \n", "BNA1892 30.05.2017 operating Windenergie (Onshore-Anlage) NaN \n", "\n", " fuel_multiple2 fuel eeg chp capacity \\\n", "id \n", "BNA1888 NaN Onshore yes NaN 12.1 \n", "BNA1011 NaN Onshore yes no 14.0 \n", "BNA1938 NaN Natural gas no yes 15.0 \n", "BNA1099 NaN Onshore yes NaN 25.3 \n", "BNA1892 NaN Onshore yes NaN 11.1 \n", "\n", " network_node \\\n", "id \n", "BNA1888 NaN \n", "BNA1011 DE0010107343300000000000000287689 & DE 0010107... \n", "BNA1938 UW Erlau \n", "BNA1099 Umspannwerk Rosendahl, Ahlen \n", "BNA1892 NaN \n", "\n", " voltage network_operator \\\n", "id \n", "BNA1888 NaN NaN \n", "BNA1011 Mittelspannung (MS) Netzgesellschaft Ostwürttemberg DonauRies GmbH \n", "BNA1938 Mittelspannung (MS) Stadtwerke Aalen \n", "BNA1099 Hochspannung (HS) Westnetz GmbH \n", "BNA1892 NaN NaN \n", "\n", " bnetza_id \n", "id \n", "BNA1888 BNA1888 \n", "BNA1011 BNA1011 \n", "BNA1938 BNA1938 \n", "BNA1099 BNA1099 \n", "BNA1892 BNA1892 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Set Index of BNetzA power plant list to Kraftwerksnummer_Bundesnetzagentur\n", "plantlist['bnetza_id'] = plantlist['id']\n", "plantlist = plantlist.set_index('id')\n", "\n", "# remove line breaks in some columns\n", "plantlist['network_node'] = plantlist['network_node'].str.replace('\\n', ' ')\n", "plantlist['company'] = plantlist['company'].str.replace('\\n', ' ')\n", "plantlist['name'] = plantlist['name'].str.replace('\\n', ' ')\n", "plantlist['fuel'] = plantlist['fuel'].str.replace('\\n', ' ')\n", "plantlist['block'] = plantlist['block'].str.replace('\\n', ' ')\n", "plantlist['network_operator'] = plantlist['network_operator'].str.replace('\\n', ' ')\n", "plantlist['street'] = plantlist['street'].str.replace('\\n', ' ')\n", "plantlist['commissioned'] = plantlist['commissioned'].str.replace('\\n', ' ')\n", " \n", "plantlist.head() " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Manual adjustments:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": false }, "outputs": [], "source": [ "plantlist.loc[plantlist['bnetza_id'] == 'BNA0834', 'fuel'] = 'Natural gas'\n", "plantlist.loc[plantlist['bnetza_id'] == 'BNA0662a', 'fuel'] = 'Hard coal'\n", "plantlist.loc[plantlist['bnetza_id'] == 'BNA0662b', 'fuel'] = 'Hard coal'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.2 Merge data from UBA List" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section a hand-researched list is used to match the power plants from the UBA list to the BNetzA list." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ID BNetzAuba_match_nameuba_match_fueluba_id_string
0BNA0005Ahrensfelde A bis DErdgasAhrensfelde A bis D_Erdgas
1BNA0006Ahrensfelde A bis DErdgasAhrensfelde A bis D_Erdgas
2BNA0007Ahrensfelde A bis DErdgasAhrensfelde A bis D_Erdgas
3BNA0008Ahrensfelde A bis DErdgasAhrensfelde A bis D_Erdgas
4BNA0010aAlbbruck-DogernWasserAlbbruck-Dogern_Wasser
\n", "
" ], "text/plain": [ " ID BNetzA uba_match_name uba_match_fuel uba_id_string\n", "0 BNA0005 Ahrensfelde A bis D Erdgas Ahrensfelde A bis D_Erdgas\n", "1 BNA0006 Ahrensfelde A bis D Erdgas Ahrensfelde A bis D_Erdgas\n", "2 BNA0007 Ahrensfelde A bis D Erdgas Ahrensfelde A bis D_Erdgas\n", "3 BNA0008 Ahrensfelde A bis D Erdgas Ahrensfelde A bis D_Erdgas\n", "4 BNA0010a Albbruck-Dogern Wasser Albbruck-Dogern_Wasser" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# read matching list\n", "matchinglist = getmatchinglist()\n", "matchinglist.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.2.1 case 1-1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Matching: 1-1 One BNetzA ID to one UBA-ID" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
uba_match_nameuba_match_fueluba_id_stringuba_nameuba_companyuba_stateuba_postcodeuba_cityuba_capacityuba_chp_capacityuba_commissioneduba_technologyuba_fuelmerge_comment
ID BNetzA
BNA0019Altbach/Deizisau HKW 1SteinkohleAltbach/Deizisau HKW 1_SteinkohleAltbach/Deizisau HKW 1EnBW Kraftwerke AGBW73776.0Altbach476.02801985 (2006)HKWSteinkohleList matching type: Single UBA power plant ass...
BNA0020Altbach/Deizisau HKW 2SteinkohleAltbach/Deizisau HKW 2_SteinkohleAltbach/Deizisau HKW 2EnBW Kraftwerke AGBW73776.0Altbach379.02801997 (2012)HKW (DT)SteinkohleList matching type: Single UBA power plant ass...
BNA0027ArneburgBiomasseArneburg_BiomasseArneburgZellstoff Stendal GmbHST39596.0Arneburg147.06002004 / 2013HKWBiomasseList matching type: Single UBA power plant ass...
BNA0067Bergkamen ASteinkohleBergkamen A_SteinkohleBergkamen ASteag GmbHNW59192.0Bergkamen780.0201981DKWSteinkohleList matching type: Single UBA power plant ass...
BNA0074Berlin-Charlottenburg 4 bis 6ErdgasBerlin-Charlottenburg 4 bis 6_ErdgasNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNList matching type: Single UBA power plant ass...
\n", "
" ], "text/plain": [ " uba_match_name uba_match_fuel \\\n", "ID BNetzA \n", "BNA0019 Altbach/Deizisau HKW 1 Steinkohle \n", "BNA0020 Altbach/Deizisau HKW 2 Steinkohle \n", "BNA0027 Arneburg Biomasse \n", "BNA0067 Bergkamen A Steinkohle \n", "BNA0074 Berlin-Charlottenburg 4 bis 6 Erdgas \n", "\n", " uba_id_string uba_name \\\n", "ID BNetzA \n", "BNA0019 Altbach/Deizisau HKW 1_Steinkohle Altbach/Deizisau HKW 1 \n", "BNA0020 Altbach/Deizisau HKW 2_Steinkohle Altbach/Deizisau HKW 2 \n", "BNA0027 Arneburg_Biomasse Arneburg \n", "BNA0067 Bergkamen A_Steinkohle Bergkamen A \n", "BNA0074 Berlin-Charlottenburg 4 bis 6_Erdgas NaN \n", "\n", " uba_company uba_state uba_postcode uba_city \\\n", "ID BNetzA \n", "BNA0019 EnBW Kraftwerke AG BW 73776.0 Altbach \n", "BNA0020 EnBW Kraftwerke AG BW 73776.0 Altbach \n", "BNA0027 Zellstoff Stendal GmbH ST 39596.0 Arneburg \n", "BNA0067 Steag GmbH NW 59192.0 Bergkamen \n", "BNA0074 NaN NaN NaN NaN \n", "\n", " uba_capacity uba_chp_capacity uba_commissioned uba_technology \\\n", "ID BNetzA \n", "BNA0019 476.0 280 1985 (2006) HKW \n", "BNA0020 379.0 280 1997 (2012) HKW (DT) \n", "BNA0027 147.0 600 2004 / 2013 HKW \n", "BNA0067 780.0 20 1981 DKW \n", "BNA0074 NaN NaN NaN NaN \n", "\n", " uba_fuel merge_comment \n", "ID BNetzA \n", "BNA0019 Steinkohle List matching type: Single UBA power plant ass... \n", "BNA0020 Steinkohle List matching type: Single UBA power plant ass... \n", "BNA0027 Biomasse List matching type: Single UBA power plant ass... \n", "BNA0067 Steinkohle List matching type: Single UBA power plant ass... \n", "BNA0074 NaN List matching type: Single UBA power plant ass... " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "match1t1 = matchinglist[\n", " (matchinglist.duplicated(subset=['uba_id_string'], keep=False) == False) \n", " & (matchinglist.duplicated(subset=['ID BNetzA'], keep=False) == False)]\n", "match1t1 = pd.merge(match1t1, plantlist_uba,\n", " left_on='uba_id_string', \n", " right_on='uba_id_string',\n", " how='left')\n", "match1t1 = match1t1.set_index('ID BNetzA')\n", "\n", "#Add comment\n", "match1t1['merge_comment'] = ('List matching type: Single UBA power plant '\n", " 'assigned to single BNetzA power plant')\n", "\n", "match1t1.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.2.2 case n-1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Match multiple BNetza IDs to one UBA ID" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
uba_match_nameuba_match_fueluba_id_stringuba_nameuba_companyuba_stateuba_postcodeuba_cityuba_capacityuba_chp_capacity...uba_fuelcapacity_bnetzachp_bnetzacapacity_bnetza_aggregateuba_capacity_scaledcapacity_bnetza_with_chpuba_chp_capacity_scaleduba_chp_capacity_originaluba_capacity_originalmerge_comment
BNA0005Ahrensfelde A bis DErdgasAhrensfelde A bis D_ErdgasNaNNaNNaNNaNNaNNaNNaN...NaN37.5no150.0NaNNaNNaNNaNNaNList matching type: UBA capacity distributed p...
BNA0006Ahrensfelde A bis DErdgasAhrensfelde A bis D_ErdgasNaNNaNNaNNaNNaNNaNNaN...NaN37.5no150.0NaNNaNNaNNaNNaNList matching type: UBA capacity distributed p...
BNA0007Ahrensfelde A bis DErdgasAhrensfelde A bis D_ErdgasNaNNaNNaNNaNNaNNaNNaN...NaN37.5no150.0NaNNaNNaNNaNNaNList matching type: UBA capacity distributed p...
BNA0008Ahrensfelde A bis DErdgasAhrensfelde A bis D_ErdgasNaNNaNNaNNaNNaNNaNNaN...NaN37.5no150.0NaNNaNNaNNaNNaNList matching type: UBA capacity distributed p...
BNA0010aAlbbruck-DogernWasserAlbbruck-Dogern_WasserAlbbruck-DogernRheinkraftwerk Albbruck-Dogern AG / RWE Vertri...BW79774.0Albbruck83.647826NaN...Wasser79.5no103.583.647826NaNNaNNaN108.9List matching type: UBA capacity distributed p...
\n", "

5 rows × 22 columns

\n", "
" ], "text/plain": [ " uba_match_name uba_match_fuel uba_id_string \\\n", "BNA0005 Ahrensfelde A bis D Erdgas Ahrensfelde A bis D_Erdgas \n", "BNA0006 Ahrensfelde A bis D Erdgas Ahrensfelde A bis D_Erdgas \n", "BNA0007 Ahrensfelde A bis D Erdgas Ahrensfelde A bis D_Erdgas \n", "BNA0008 Ahrensfelde A bis D Erdgas Ahrensfelde A bis D_Erdgas \n", "BNA0010a Albbruck-Dogern Wasser Albbruck-Dogern_Wasser \n", "\n", " uba_name uba_company \\\n", "BNA0005 NaN NaN \n", "BNA0006 NaN NaN \n", "BNA0007 NaN NaN \n", "BNA0008 NaN NaN \n", "BNA0010a Albbruck-Dogern Rheinkraftwerk Albbruck-Dogern AG / RWE Vertri... \n", "\n", " uba_state uba_postcode uba_city uba_capacity uba_chp_capacity \\\n", "BNA0005 NaN NaN NaN NaN NaN \n", "BNA0006 NaN NaN NaN NaN NaN \n", "BNA0007 NaN NaN NaN NaN NaN \n", "BNA0008 NaN NaN NaN NaN NaN \n", "BNA0010a BW 79774.0 Albbruck 83.647826 NaN \n", "\n", " ... uba_fuel capacity_bnetza chp_bnetza capacity_bnetza_aggregate \\\n", "BNA0005 ... NaN 37.5 no 150.0 \n", "BNA0006 ... NaN 37.5 no 150.0 \n", "BNA0007 ... NaN 37.5 no 150.0 \n", "BNA0008 ... NaN 37.5 no 150.0 \n", "BNA0010a ... Wasser 79.5 no 103.5 \n", "\n", " uba_capacity_scaled capacity_bnetza_with_chp \\\n", "BNA0005 NaN NaN \n", "BNA0006 NaN NaN \n", "BNA0007 NaN NaN \n", "BNA0008 NaN NaN \n", "BNA0010a 83.647826 NaN \n", "\n", " uba_chp_capacity_scaled uba_chp_capacity_original \\\n", "BNA0005 NaN NaN \n", "BNA0006 NaN NaN \n", "BNA0007 NaN NaN \n", "BNA0008 NaN NaN \n", "BNA0010a NaN NaN \n", "\n", " uba_capacity_original \\\n", "BNA0005 NaN \n", "BNA0006 NaN \n", "BNA0007 NaN \n", "BNA0008 NaN \n", "BNA0010a 108.9 \n", "\n", " merge_comment \n", "BNA0005 List matching type: UBA capacity distributed p... \n", "BNA0006 List matching type: UBA capacity distributed p... \n", "BNA0007 List matching type: UBA capacity distributed p... \n", "BNA0008 List matching type: UBA capacity distributed p... \n", "BNA0010a List matching type: UBA capacity distributed p... \n", "\n", "[5 rows x 22 columns]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Matching structure (example): \n", "# bnetza_id uba_id\n", "# 1 1\n", "# 2 1\n", "# 3 1\n", "# 4 2\n", "# 5 2\n", "\n", "# Get relevant entries from the matchinglist and merge the corresponding \n", "# UBA Data to the list.\n", "matchnt1= matchinglist[\n", " (matchinglist.duplicated(subset=['uba_id_string'], keep=False) == True)\n", " & (matchinglist.duplicated(subset=['ID BNetzA'], keep=False)== False)]\n", "matchnt1 = pd.merge(matchnt1, plantlist_uba,\n", " left_on='uba_id_string', right_on='uba_id_string', how='left')\n", "matchnt1 = matchnt1.set_index('ID BNetzA')\n", "\n", "# Import BNetzA Capacities and CHP criterion into matchnt1 dataframe\n", "plantlist_capacities = pd.DataFrame(plantlist[['capacity', 'chp']]).rename(\n", " columns={'capacity': 'capacity_bnetza', 'chp': 'chp_bnetza'})\n", "matchnt1 = pd.merge(matchnt1, plantlist_capacities,\n", " left_index=True, right_index=True, how='left')\n", "\n", "# Get sum of BNetzA Capacitites for each UBA Index and merge into matchnt1 dataframe\n", "plantlist_uba_capacitysum = pd.DataFrame(\n", " matchnt1.groupby('uba_id_string').sum()['capacity_bnetza']).rename(\n", " columns={'capacity_bnetza': 'capacity_bnetza_aggregate'})\n", "matchnt1 = pd.merge(matchnt1, plantlist_uba_capacitysum,\n", " left_on='uba_id_string', right_index=True, how='left')\n", "\n", "# Scale UBA Capacities based BNetzA Data\n", "matchnt1['uba_capacity_scaled'] = (matchnt1['uba_capacity']\n", " * matchnt1['capacity_bnetza']\n", " / matchnt1['capacity_bnetza_aggregate'])\n", "\n", "# determine sum of capacities with chp capability and add to matchnt1\n", "plantlist_uba_chp_capacities = matchnt1[(matchnt1['chp_bnetza'] == 'yes')]\n", "plantlist_uba_chp_capacitysum = pd.DataFrame(\n", " plantlist_uba_chp_capacities.groupby('uba_id_string')\n", " .sum()['capacity_bnetza']) \n", "plantlist_uba_chp_capacitysum = plantlist_uba_chp_capacitysum.rename(\n", " columns={'capacity_bnetza': 'capacity_bnetza_with_chp'})\n", "\n", "matchnt1 = pd.merge(matchnt1, plantlist_uba_chp_capacitysum,\n", " left_on='uba_id_string', right_index=True, how='left',)\n", "\n", "matchnt1['uba_chp_capacity'] = pd.to_numeric(matchnt1['uba_chp_capacity'], errors='coerce')\n", "\n", "\n", "matchnt1['uba_chp_capacity_scaled'] = (matchnt1['uba_chp_capacity']\n", " * matchnt1['capacity_bnetza']\n", " / matchnt1['capacity_bnetza_with_chp'])\n", "\n", "# Change column names for merge later on\n", "matchnt1['uba_chp_capacity_original'] = matchnt1['uba_chp_capacity']\n", "matchnt1['uba_chp_capacity'] = matchnt1['uba_chp_capacity_scaled']\n", "matchnt1['uba_capacity_original'] = matchnt1['uba_capacity']\n", "matchnt1['uba_capacity'] = matchnt1['uba_capacity_scaled']\n", "\n", "#Add comment\n", "matchnt1['merge_comment'] = ('List matching type: UBA capacity distributed '\n", " 'proportionally to multiple BNetzA power plants')\n", "\n", "matchnt1.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.2.3 case 1-n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1-n Case here" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
uba_match_nameuba_match_fueluba_id_stringuba_nameuba_companyuba_stateuba_postcodeuba_cityuba_capacity_originaluba_chp_capacity_original...uba_technologyuba_fuelcapacity_bnetzachp_bnetzauba_capacityuba_chp_capacityuba_technology_aggregateuba_name_aggregateuba_company_aggregatemerge_comment
ID BNetzA
BNA0073Berlin-Mitte HKW GT 1ErdgasBerlin-Mitte HKW GT 1_ErdgasBerlin-Mitte HKW GT 1Vattenfall Europe GmbHBE10179.0Berlin178.01210.0...GuDErdgas444.0yes468.01210.0GuDBerlin-Mitte HKW GT 1, Berlin-Mitte HKW GT 2, ...Vattenfall Europe GmbHList matching type: Multiple UBA capacities ag...
BNA0606Emsland D (Lingen) DTErdgasEmsland D (Lingen) DT_ErdgasEmsland D (Lingen) DTRWE Power AGNI49808.0Lingen326.050.0...GuDErdgas887.0yes888.050.0GuDEmsland D (Lingen) DT, Emsland D (Lingen) GT 1...RWE Power AGList matching type: Multiple UBA capacities ag...
BNA1019Wehr 1WasserWehr 1_WasserWehr 1Schluchseewerk AGBW79664.0Wehr248.0NaN...PSWWasser910.0no992.00.0PSWWehr 1, Wehr 2, Wehr 3, Wehr 4Schluchseewerk AGList matching type: Multiple UBA capacities ag...
\n", "

3 rows × 21 columns

\n", "
" ], "text/plain": [ " uba_match_name uba_match_fuel uba_id_string \\\n", "ID BNetzA \n", "BNA0073 Berlin-Mitte HKW GT 1 Erdgas Berlin-Mitte HKW GT 1_Erdgas \n", "BNA0606 Emsland D (Lingen) DT Erdgas Emsland D (Lingen) DT_Erdgas \n", "BNA1019 Wehr 1 Wasser Wehr 1_Wasser \n", "\n", " uba_name uba_company uba_state \\\n", "ID BNetzA \n", "BNA0073 Berlin-Mitte HKW GT 1 Vattenfall Europe GmbH BE \n", "BNA0606 Emsland D (Lingen) DT RWE Power AG NI \n", "BNA1019 Wehr 1 Schluchseewerk AG BW \n", "\n", " uba_postcode uba_city uba_capacity_original \\\n", "ID BNetzA \n", "BNA0073 10179.0 Berlin 178.0 \n", "BNA0606 49808.0 Lingen 326.0 \n", "BNA1019 79664.0 Wehr 248.0 \n", "\n", " uba_chp_capacity_original ... uba_technology uba_fuel \\\n", "ID BNetzA ... \n", "BNA0073 1210.0 ... GuD Erdgas \n", "BNA0606 50.0 ... GuD Erdgas \n", "BNA1019 NaN ... PSW Wasser \n", "\n", " capacity_bnetza chp_bnetza uba_capacity uba_chp_capacity \\\n", "ID BNetzA \n", "BNA0073 444.0 yes 468.0 1210.0 \n", "BNA0606 887.0 yes 888.0 50.0 \n", "BNA1019 910.0 no 992.0 0.0 \n", "\n", " uba_technology_aggregate \\\n", "ID BNetzA \n", "BNA0073 GuD \n", "BNA0606 GuD \n", "BNA1019 PSW \n", "\n", " uba_name_aggregate \\\n", "ID BNetzA \n", "BNA0073 Berlin-Mitte HKW GT 1, Berlin-Mitte HKW GT 2, ... \n", "BNA0606 Emsland D (Lingen) DT, Emsland D (Lingen) GT 1... \n", "BNA1019 Wehr 1, Wehr 2, Wehr 3, Wehr 4 \n", "\n", " uba_company_aggregate \\\n", "ID BNetzA \n", "BNA0073 Vattenfall Europe GmbH \n", "BNA0606 RWE Power AG \n", "BNA1019 Schluchseewerk AG \n", "\n", " merge_comment \n", "ID BNetzA \n", "BNA0073 List matching type: Multiple UBA capacities ag... \n", "BNA0606 List matching type: Multiple UBA capacities ag... \n", "BNA1019 List matching type: Multiple UBA capacities ag... \n", "\n", "[3 rows x 21 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The resulting DataFrame should be called \"match1tn\"\n", "# Matching structure: \n", "# bnetza_id uba_id\n", "# 1 1\n", "# 1 2\n", "# 1 3\n", "# 2 4\n", "# 2 5\n", "\n", "# Get relevant entries from the matchinglist and merge the corresponding UBA Data to the list.\n", "match1tn= matchinglist[\n", " (matchinglist.duplicated(subset=['ID BNetzA'], keep=False) == True) & \n", " (matchinglist.duplicated(subset=['uba_id_string'], keep=False)== False)]\n", "match1tn = pd.merge(match1tn, plantlist_uba,\n", " left_on='uba_id_string', right_on='uba_id_string', how='left')\n", "match1tn = match1tn.set_index('ID BNetzA')\n", "match1tn.head()\n", "\n", "# Import BNetzA Capacities and CHP criterion into match1tn dataframe\n", "plantlist_capacities = pd.DataFrame(plantlist[['capacity','chp']]).rename(\n", " columns = {'capacity': 'capacity_bnetza', 'chp': 'chp_bnetza'})\n", "match1tn = pd.merge(match1tn, plantlist_capacities,\n", " left_index=True, right_index=True, how='left')\n", "match1tn.index.names=['ID BNetzA']\n", "match1tn.head()\n", "\n", "# Get sum of UBA Capacitites per BNetzA Index and merge to match1tn dataframe\n", "plantlist_bnetza_capacitysum = pd.DataFrame(\n", " match1tn.groupby(match1tn.index).sum()['uba_capacity'])\n", "plantlist_bnetza_capacitysum = plantlist_bnetza_capacitysum.rename(\n", " columns={'uba_capacity':'uba_capacity_aggregate'})\n", "match1tn = pd.merge(match1tn, plantlist_bnetza_capacitysum,\n", " left_index=True, right_index=True, how='left')\n", "\n", "match1tn['uba_chp_capacity'] = pd.to_numeric(match1tn['uba_chp_capacity'], errors='coerce')\n", "match1tn\n", "\n", "\n", "# Get sum of UBA CHP Capacities per BNetzA Index and merge to match1tn dataframe\n", "plantlist_bnetza_chp_capacitysum = pd.DataFrame(\n", " match1tn.groupby(match1tn.index).sum()['uba_chp_capacity'])\n", "plantlist_bnetza_chp_capacitysum = plantlist_bnetza_chp_capacitysum.rename(\n", " columns={'uba_chp_capacity': 'uba_chp_capacity_aggregate'})\n", "match1tn = pd.merge(match1tn, plantlist_bnetza_chp_capacitysum,\n", " left_index=True, right_index=True, how='left')\n", "\n", "# Get UBA Technology for each BNetzA Index and merge into match1tn dataframe \n", "## Option 1: Take all technologies and merge them\n", "#match1tn['uba_technology_aggregate'] = pd.DataFrame(\n", "# match1tn.groupby(match1tn.index)\n", "# .transform(lambda x: ', '.join(x))['uba_technology'])\n", "## Option 2 (currently preferred): Take technology with highest occurence\n", "match1tn['uba_technology_aggregate'] = pd.DataFrame(\n", " match1tn.groupby(match1tn.index)['uba_technology']\n", " .agg(lambda x: x.value_counts().index[0]))\n", "\n", "# Get UBA Plant name\n", "match1tn['uba_name_aggregate'] = pd.DataFrame(\n", " match1tn.groupby(match1tn.index).transform(lambda x: ', '.join(x))['uba_name'])\n", "\n", "# Get UBA company name\n", "match1tn['uba_company_aggregate'] = pd.DataFrame(\n", " match1tn.groupby(match1tn.index)['uba_company']\n", " .agg(lambda x:x.value_counts().index[0]))\n", "\n", "# Change column names for merge later on\n", "match1tn = match1tn.rename(\n", " columns={'uba_chp_capacity': 'uba_chp_capacity_original',\n", " 'uba_capacity': 'uba_capacity_original',\n", " 'uba_chp_capacity_aggregate': 'uba_chp_capacity',\n", " 'uba_capacity_aggregate': 'uba_capacity'})\n", "\n", "#Add comment\n", "match1tn['merge_comment'] = ('List matching type: Multiple UBA capacities '\n", " 'aggregated to single BNetzA power plant')\n", "\n", "# Drop duplicate rows and keep first entry\n", "match1tn = match1tn.reset_index().drop_duplicates(subset='ID BNetzA',keep='first').set_index('ID BNetzA')\n", "\n", "match1tn.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.2.4 Merge into plantlist" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
companynamepostcodecitystreetstateblockcommissionedstatusfuel_basis...uba_fueluba_id_stringuba_match_fueluba_match_nameuba_nameuba_name_aggregateuba_postcodeuba_stateuba_technologyuba_technology_aggregate
BNA0005Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT A1990shutdown_temporaryErdgas...NaNAhrensfelde A bis D_ErdgasErdgasAhrensfelde A bis DNaNNaNNaNNaNNaNNaN
BNA0006Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT B1990shutdown_temporaryErdgas...NaNAhrensfelde A bis D_ErdgasErdgasAhrensfelde A bis DNaNNaNNaNNaNNaNNaN
BNA0007Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT C1990shutdown_temporaryErdgas...NaNAhrensfelde A bis D_ErdgasErdgasAhrensfelde A bis DNaNNaNNaNNaNNaNNaN
BNA0008Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT D1990shutdown_temporaryErdgas...NaNAhrensfelde A bis D_ErdgasErdgasAhrensfelde A bis DNaNNaNNaNNaNNaNNaN
BNA0010aRheinkraftwerk Albbruck-Dogern AGRADAG79774AlbbruckKraftwerkstrasse 34Baden-WürttembergNaN01.01.1934operatingLaufwasser...WasserAlbbruck-Dogern_WasserWasserAlbbruck-DogernAlbbruck-DogernNaN79774.0BWLWKNaN
\n", "

5 rows × 45 columns

\n", "
" ], "text/plain": [ " company name postcode \\\n", "BNA0005 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0006 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0007 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0008 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0010a Rheinkraftwerk Albbruck-Dogern AG RADAG 79774 \n", "\n", " city street state block \\\n", "BNA0005 Ahrensfelde Lindenberger Weg Brandenburg GT A \n", "BNA0006 Ahrensfelde Lindenberger Weg Brandenburg GT B \n", "BNA0007 Ahrensfelde Lindenberger Weg Brandenburg GT C \n", "BNA0008 Ahrensfelde Lindenberger Weg Brandenburg GT D \n", "BNA0010a Albbruck Kraftwerkstrasse 34 Baden-Württemberg NaN \n", "\n", " commissioned status fuel_basis ... uba_fuel \\\n", "BNA0005 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0006 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0007 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0008 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0010a 01.01.1934 operating Laufwasser ... Wasser \n", "\n", " uba_id_string uba_match_fuel uba_match_name \\\n", "BNA0005 Ahrensfelde A bis D_Erdgas Erdgas Ahrensfelde A bis D \n", "BNA0006 Ahrensfelde A bis D_Erdgas Erdgas Ahrensfelde A bis D \n", "BNA0007 Ahrensfelde A bis D_Erdgas Erdgas Ahrensfelde A bis D \n", "BNA0008 Ahrensfelde A bis D_Erdgas Erdgas Ahrensfelde A bis D \n", "BNA0010a Albbruck-Dogern_Wasser Wasser Albbruck-Dogern \n", "\n", " uba_name uba_name_aggregate uba_postcode uba_state \\\n", "BNA0005 NaN NaN NaN NaN \n", "BNA0006 NaN NaN NaN NaN \n", "BNA0007 NaN NaN NaN NaN \n", "BNA0008 NaN NaN NaN NaN \n", "BNA0010a Albbruck-Dogern NaN 79774.0 BW \n", "\n", " uba_technology uba_technology_aggregate \n", "BNA0005 NaN NaN \n", "BNA0006 NaN NaN \n", "BNA0007 NaN NaN \n", "BNA0008 NaN NaN \n", "BNA0010a LWK NaN \n", "\n", "[5 rows x 45 columns]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Merge the UBA DataFrames\n", "# Merge first two dataframes\n", "plantlist_uba_for_merge = match1t1.append(matchnt1, sort=True)\n", "\n", "# Add third dataframe\n", "plantlist_uba_for_merge = plantlist_uba_for_merge.append(match1tn,sort=True)\n", "\n", "# Merge plantlist_uba_for_merge into the plantlist\n", "plantlist = pd.merge(plantlist, plantlist_uba_for_merge,\n", " left_index=True, right_index=True, how='left',sort=True)\n", "\n", "plantlist.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.3 Delete fuels not in focus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, solar, wind onshore. and wind offshore technologies are deleted from the list, as they are handled by another datapackage. Furthermore, aggregate values are excluded as well." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": false }, "outputs": [], "source": [ "# Delete solar, wind onshore, and wind offshore\n", "plantlist = plantlist[(plantlist['fuel'] != 'Solar') \n", " & (plantlist['fuel'] != 'Onshore') \n", " & (plantlist['fuel'] != 'Offshore')]\n", "\n", "# Delete aggregate values\n", "plantlist = plantlist[(plantlist['company'] != 'EEG-Anlagen < 10 MW') \n", " & (plantlist['company'] != 'Nicht-EEG-Anlagen < 10 MW')]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.4 Add Columns for shutdown and retrofit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extract the year when plants were shutdown or retrofit, using regular expressions" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
companynamepostcodecitystreetstateblockcommissionedstatusfuel_basis...uba_technologyuba_technology_aggregateshutdownretrofituba_commissioned_1uba_commissioned_2uba_commissioned_3commissioned_1commissioned_2commissioned_3
BNA0011Papierfabrik Albbruck GmbHPapierfabrik Albbruck79774AlbbruckNaNBaden-WürttembergNaN2009shutdownMehrere Energieträger...NaNNaN2012.0NaNNaNNaNNaN2009.0NaNNaN
BNA0012dSappi Alfeld GmbHWerkskraftwerk Sappi Alfeld31061AlfeldMühlenmarsch 1NiedersachsenDieselgenerator1994shutdownMineralölprodukte...NaNNaN2018.0NaNNaNNaNNaN1994.0NaNNaN
BNA0059aVolkswagen AGHKW Kassel34225BaunatalNaNHessenTurbine 1NaNshutdownErdgas...NaNNaN2013.0NaNNaNNaNNaNNaNNaNNaN
BNA0075Vattenfall Wärme Berlin AGLichterfelde12207BerlinOstpreußendamm 61BerlinLichterfelde 104.09.1972shutdownErdgas...NaNNaN2019.0NaNNaNNaNNaN1972.0NaN1972.0
BNA0076Vattenfall Wärme Berlin AGLichterfelde12207BerlinOstpreußendamm 61BerlinLichterfelde 302.08.1974shutdownErdgas...NaNNaN2018.0NaNNaNNaNNaN1974.0NaN1974.0
..................................................................
BNA1225Peißenberger Wärmegesellschaft mbHPWG82380PeißenbergNaNBayernMHKW 21989shutdownMehrere Energieträger...NaNNaN2016.0NaNNaNNaNNaN1989.0NaNNaN
BNA1226Peißenberger Wärmegesellschaft mbHPWG82380PeißenbergNaNBayernMHKW 11987shutdownMehrere Energieträger...NaNNaN2016.0NaNNaNNaNNaN1987.0NaNNaN
BNA1294Nynas GmbH & Co KGEEV21107HamburgHohe-Schaar-Straße 34HamburgEEV26.06.1994shutdownMehrere Energieträger...NaNNaN2018.0NaNNaNNaNNaN1994.0NaN1994.0
BNA1337aDS Smith Paper Deutschland GmbHHeizkraftwerk63741AschaffenburgWeichertstr. 7BayernHeizkraftwerkNaNshutdownErdgas...NaNNaN2012.0NaNNaNNaNNaNNaNNaNNaN
BNA1338Eurowatt Spitzenkraft GmbHSpitzenkraftwerk94469DeggendorfRuselbergstr. 87BayernMLDNaNshutdownMineralölprodukte...NaNNaN2014.0NaNNaNNaNNaNNaNNaNNaN
\n", "

110 rows × 53 columns

\n", "
" ], "text/plain": [ " company name \\\n", "BNA0011 Papierfabrik Albbruck GmbH Papierfabrik Albbruck \n", "BNA0012d Sappi Alfeld GmbH Werkskraftwerk Sappi Alfeld \n", "BNA0059a Volkswagen AG HKW Kassel \n", "BNA0075 Vattenfall Wärme Berlin AG Lichterfelde \n", "BNA0076 Vattenfall Wärme Berlin AG Lichterfelde \n", "... ... ... \n", "BNA1225 Peißenberger Wärmegesellschaft mbH PWG \n", "BNA1226 Peißenberger Wärmegesellschaft mbH PWG \n", "BNA1294 Nynas GmbH & Co KG EEV \n", "BNA1337a DS Smith Paper Deutschland GmbH Heizkraftwerk \n", "BNA1338 Eurowatt Spitzenkraft GmbH Spitzenkraftwerk \n", "\n", " postcode city street state \\\n", "BNA0011 79774 Albbruck NaN Baden-Württemberg \n", "BNA0012d 31061 Alfeld Mühlenmarsch 1 Niedersachsen \n", "BNA0059a 34225 Baunatal NaN Hessen \n", "BNA0075 12207 Berlin Ostpreußendamm 61 Berlin \n", "BNA0076 12207 Berlin Ostpreußendamm 61 Berlin \n", "... ... ... ... ... \n", "BNA1225 82380 Peißenberg NaN Bayern \n", "BNA1226 82380 Peißenberg NaN Bayern \n", "BNA1294 21107 Hamburg Hohe-Schaar-Straße 34 Hamburg \n", "BNA1337a 63741 Aschaffenburg Weichertstr. 7 Bayern \n", "BNA1338 94469 Deggendorf Ruselbergstr. 87 Bayern \n", "\n", " block commissioned status fuel_basis ... \\\n", "BNA0011 NaN 2009 shutdown Mehrere Energieträger ... \n", "BNA0012d Dieselgenerator 1994 shutdown Mineralölprodukte ... \n", "BNA0059a Turbine 1 NaN shutdown Erdgas ... \n", "BNA0075 Lichterfelde 1 04.09.1972 shutdown Erdgas ... \n", "BNA0076 Lichterfelde 3 02.08.1974 shutdown Erdgas ... \n", "... ... ... ... ... ... \n", "BNA1225 MHKW 2 1989 shutdown Mehrere Energieträger ... \n", "BNA1226 MHKW 1 1987 shutdown Mehrere Energieträger ... \n", "BNA1294 EEV 26.06.1994 shutdown Mehrere Energieträger ... \n", "BNA1337a Heizkraftwerk NaN shutdown Erdgas ... \n", "BNA1338 MLD NaN shutdown Mineralölprodukte ... \n", "\n", " uba_technology uba_technology_aggregate shutdown retrofit \\\n", "BNA0011 NaN NaN 2012.0 NaN \n", "BNA0012d NaN NaN 2018.0 NaN \n", "BNA0059a NaN NaN 2013.0 NaN \n", "BNA0075 NaN NaN 2019.0 NaN \n", "BNA0076 NaN NaN 2018.0 NaN \n", "... ... ... ... ... \n", "BNA1225 NaN NaN 2016.0 NaN \n", "BNA1226 NaN NaN 2016.0 NaN \n", "BNA1294 NaN NaN 2018.0 NaN \n", "BNA1337a NaN NaN 2012.0 NaN \n", "BNA1338 NaN NaN 2014.0 NaN \n", "\n", " uba_commissioned_1 uba_commissioned_2 uba_commissioned_3 \\\n", "BNA0011 NaN NaN NaN \n", "BNA0012d NaN NaN NaN \n", "BNA0059a NaN NaN NaN \n", "BNA0075 NaN NaN NaN \n", "BNA0076 NaN NaN NaN \n", "... ... ... ... \n", "BNA1225 NaN NaN NaN \n", "BNA1226 NaN NaN NaN \n", "BNA1294 NaN NaN NaN \n", "BNA1337a NaN NaN NaN \n", "BNA1338 NaN NaN NaN \n", "\n", " commissioned_1 commissioned_2 commissioned_3 \n", "BNA0011 2009.0 NaN NaN \n", "BNA0012d 1994.0 NaN NaN \n", "BNA0059a NaN NaN NaN \n", "BNA0075 1972.0 NaN 1972.0 \n", "BNA0076 1974.0 NaN 1974.0 \n", "... ... ... ... \n", "BNA1225 1989.0 NaN NaN \n", "BNA1226 1987.0 NaN NaN \n", "BNA1294 1994.0 NaN 1994.0 \n", "BNA1337a NaN NaN NaN \n", "BNA1338 NaN NaN NaN \n", "\n", "[110 rows x 53 columns]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Add columns with empty data\n", "plantlist['shutdown'] = 'NaN'\n", "\n", "plantlist['shutdown'] = pd.to_numeric(\n", " plantlist['status'].str.extract('[\\w].+(\\d\\d\\d\\d)', expand=False),\n", " errors='coerce')\n", "plantlist.loc[plantlist['shutdown'] > 0, 'status'] = 'shutdown'\n", "\n", "# Fill retrofit data column\n", "# Identify restrofit dates in UBA list\n", "plantlist['retrofit'] = pd.to_numeric(\n", " plantlist['uba_commissioned'].str.extract('[(.+](\\d\\d\\d\\d)', expand=False),\n", " errors='coerce')\n", "\n", "# Split multiple commissioning dates as listed in UBA\n", "plantlist['uba_commissioned_1'] = pd.to_numeric(\n", " plantlist['uba_commissioned'].str.extract('(\\d\\d\\d\\d)', expand=False),\n", " errors='coerce')\n", "\n", "plantlist.loc[plantlist['uba_commissioned_1'].isnull(), 'uba_commissioned_1'] = pd.to_numeric(\n", " plantlist['uba_commissioned'].str.extract('(\\d\\d\\d\\d).+[\\w]', expand=False),\n", " errors='coerce').loc[plantlist['uba_commissioned_1'].isnull()]\n", "\n", "plantlist['uba_commissioned_2'] = pd.to_numeric(\n", " plantlist['uba_commissioned'].str.extract('[\\w].+(\\d\\d\\d\\d).+[\\w]', expand=False),\n", " errors='coerce')\n", "plantlist['uba_commissioned_3'] = pd.to_numeric(\n", " plantlist['uba_commissioned'].str.extract('[\\w].+(\\d\\d\\d\\d)', expand=False),\n", " errors='coerce')\n", "\n", "plantlist.loc[plantlist['retrofit'] == plantlist['uba_commissioned_1'], 'uba_commissioned_1'] = ''\n", "plantlist.loc[plantlist['retrofit'] == plantlist['uba_commissioned_2'], 'uba_commissioned_2'] = ''\n", "plantlist.loc[plantlist['retrofit'] == plantlist['uba_commissioned_3'], 'uba_commissioned_3'] = ''\n", "\n", "# Split multiple commissioning dates as listed in BNetzA\n", "plantlist['commissioned_1'] = pd.to_numeric(\n", " plantlist['commissioned'].str.extract('(\\d\\d\\d\\d)', expand=False),\n", " errors='coerce')\n", "plantlist.loc[plantlist['commissioned_1'].isnull(), 'commissioned_1'] = pd.to_numeric(\n", " plantlist['commissioned'].str.extract('(\\d\\d\\d\\d).+[\\w]', expand=False),\n", " errors='coerce').loc[plantlist['commissioned_1'].isnull()]\n", "plantlist['commissioned_2'] = pd.to_numeric(\n", " plantlist['commissioned'].str.extract('[\\w].+(\\d\\d\\d\\d).+[\\w]', expand=False),\n", " errors='coerce')\n", "plantlist['commissioned_3'] = pd.to_numeric(\n", " plantlist['commissioned'].str.extract('[\\w].+(\\d\\d\\d\\d)', expand=False),\n", " errors='coerce')\n", "\n", "# Show plantlist\n", "plantlist[plantlist['status'] == 'shutdown']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.5 Convert input colums to usable data types" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
companynamepostcodecitystreetstateblockcommissionedstatusfuel_basis...retrofituba_commissioned_1uba_commissioned_2uba_commissioned_3commissioned_1commissioned_2commissioned_3capacity_floatcommissioned_floatretrofit_float
BNA0005Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT A1990shutdown_temporaryErdgas...NaNNaNNaNNaN1990.0NaNNaN37.51990.0NaN
BNA0006Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT B1990shutdown_temporaryErdgas...NaNNaNNaNNaN1990.0NaNNaN37.51990.0NaN
BNA0007Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT C1990shutdown_temporaryErdgas...NaNNaNNaNNaN1990.0NaNNaN37.51990.0NaN
BNA0008Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT D1990shutdown_temporaryErdgas...NaNNaNNaNNaN1990.0NaNNaN37.51990.0NaN
BNA0010aRheinkraftwerk Albbruck-Dogern AGRADAG79774AlbbruckKraftwerkstrasse 34Baden-WürttembergNaN01.01.1934operatingLaufwasser...2020.0193320091934.0NaN1934.079.51934.02020.0
\n", "

5 rows × 56 columns

\n", "
" ], "text/plain": [ " company name postcode \\\n", "BNA0005 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0006 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0007 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0008 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0010a Rheinkraftwerk Albbruck-Dogern AG RADAG 79774 \n", "\n", " city street state block \\\n", "BNA0005 Ahrensfelde Lindenberger Weg Brandenburg GT A \n", "BNA0006 Ahrensfelde Lindenberger Weg Brandenburg GT B \n", "BNA0007 Ahrensfelde Lindenberger Weg Brandenburg GT C \n", "BNA0008 Ahrensfelde Lindenberger Weg Brandenburg GT D \n", "BNA0010a Albbruck Kraftwerkstrasse 34 Baden-Württemberg NaN \n", "\n", " commissioned status fuel_basis ... retrofit \\\n", "BNA0005 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0006 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0007 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0008 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0010a 01.01.1934 operating Laufwasser ... 2020.0 \n", "\n", " uba_commissioned_1 uba_commissioned_2 uba_commissioned_3 \\\n", "BNA0005 NaN NaN NaN \n", "BNA0006 NaN NaN NaN \n", "BNA0007 NaN NaN NaN \n", "BNA0008 NaN NaN NaN \n", "BNA0010a 1933 2009 \n", "\n", " commissioned_1 commissioned_2 commissioned_3 capacity_float \\\n", "BNA0005 1990.0 NaN NaN 37.5 \n", "BNA0006 1990.0 NaN NaN 37.5 \n", "BNA0007 1990.0 NaN NaN 37.5 \n", "BNA0008 1990.0 NaN NaN 37.5 \n", "BNA0010a 1934.0 NaN 1934.0 79.5 \n", "\n", " commissioned_float retrofit_float \n", "BNA0005 1990.0 NaN \n", "BNA0006 1990.0 NaN \n", "BNA0007 1990.0 NaN \n", "BNA0008 1990.0 NaN \n", "BNA0010a 1934.0 2020.0 \n", "\n", "[5 rows x 56 columns]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plantlist['capacity_float'] = pd.to_numeric(\n", " plantlist['capacity'], \n", " errors='coerce')\n", "plantlist['commissioned_float'] = pd.to_numeric(\n", " plantlist[['commissioned','commissioned_1','commissioned_2','commissioned_3']].max(axis=1),\n", " errors='coerce')\n", "plantlist['retrofit_float'] = pd.to_numeric(\n", " plantlist['retrofit'],\n", " errors='coerce')\n", "plantlist.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.6 Identify generation technology" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.6.1 Process technology information from UBA list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Split uba_technology information into technology (GT, CC,...) and type (HKW, IKW, ...) \n", "Abkürzung: Erläuterung \n", "BoA: Braunkohlenkraftwerk mit optimierter Anlagentechnik \n", "DKW: Dampfkraftwerk \n", "DT: Dampfturbine \n", "DWR: Druckwasserreaktor \n", "G/AK: Gasturbine mit Abhitzekessel \n", "GT: Gasturbine \n", "GuD: Gas- und Dampfturbinenkraftwerk \n", "HEL: Leichtes Heizöl \n", "HKW: Heizkraftwerk \n", "HS: Schweres Heizöl \n", "IKW: Industriekraftwerk \n", "LWK: Laufwasserkraftwerk \n", "PSW: Pumpspeicherkraftwerk \n", "PV: Photovoltaik \n", "SSA: Sammelschienenanlage \n", "SWK: Speicherwasserkraftwerk \n", "SWR: Siedewasserreaktor \n", "WEA: Windenergieanlage \n", "Wind (L): Wind Onshore (Land) \n", "Wind (O): Wind (Offshore) \n" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "# Split uba_technology information into technology (GT, CC,...) and type (HKW, IKW, ...)\n", "plantlist['technology'] = plantlist['uba_technology']\n", "plantlist['type'] = plantlist['uba_technology']\n", "\n", "dict_technology = {\n", " 'GT': 'Gas turbine',\n", " 'GT / DT': 'Combined cycle',\n", " 'DT': 'Steam turbine',\n", " 'GuD': 'Combined cycle',\n", " 'DKW': 'Steam turbine',\n", " 'LWK': 'Run-of-river',\n", " 'PSW': 'Pumped storage',\n", " 'DWR': 'Steam turbine', #Pressurized water reactor\n", " 'G/AK': 'Gas turbine', #GT with heat recovery\n", " 'SWR': 'Steam turbine', #boiling water reactor\n", " 'SWK': 'Reservoir', #storage power plant\n", " 'SSA': 'Steam turbine', #bus bar\n", " 'HKW (DT)': 'Steam turbine',\n", " 'HKW / GuD': 'Combined cycle',\n", " 'GuD / HKW': 'Combined cycle',\n", " 'IKW / GuD': 'Combined cycle',\n", " 'IKW /GuD': 'Combined cycle',\n", " 'GuD / IKW': 'Combined cycle',\n", " 'HKW / SSA': 'Steam turbine',\n", " 'IKW / SSA': 'Steam turbine',\n", " 'SSA / IKW': 'Steam turbine',\n", " 'HKW': '',\n", " 'IKW': '',\n", " 'IKW / HKW': '',\n", " 'HKW / IKW': '',\n", " 'IKW / HKW / GuD' : 'Combined cycle',\n", " 'HKW / GuD / IKW' : 'Combined cycle',\n", " 'GuD / HKW / IKW': 'Combined cycle',\n", " }\n", "plantlist['technology'].replace(dict_technology, inplace=True)\n", "plantlist['technology'].unique()\n", "\n", "# Check if all technologies have been translated\n", "for technology in plantlist['technology'].unique():\n", " if (technology not in dict_technology.values()) & (str(technology) != 'nan'):\n", " logger.error('Untranslated technology: ' + str(technology))\n", "\n", "# Translate types\n", "dict_type = {\n", " 'HKW': 'CHP', #thermal power plant,\n", " 'HKW (DT)': 'CHP',\n", " 'IKW': 'IPP', #industrial power plant\n", " 'HKW / GuD': 'CHP',\n", " 'GuD / HKW': 'CHP',\n", " 'IKW / GuD': 'IPP',\n", " 'IKW /GuD': 'IPP',\n", " 'GuD / IKW': 'IPP',\n", " 'IKW / SSA': 'IPP',\n", " 'HKW / SSA': 'CHP',\n", " 'IKW / HKW': 'CHP',\n", " 'HKW / IKW': 'CHP',\n", " 'SSA / IKW': 'IPP',\n", " 'GT': '',\n", " 'GT / DT': '',\n", " 'DT': '',\n", " 'GuD': '',\n", " 'DKW': '',\n", " 'LWK': '',\n", " 'PSW': '',\n", " 'DWR': '', #Pressurized water reactor\n", " 'G/AK': 'CHP', #GT with heat recovery\n", " 'SWR': '', #boiling water reactor\n", " 'SWK': '', #storage power plant\n", " 'SSA': '',\n", " 'WEA': '',\n", " 'IKW / HKW / GuD' : 'CHP',\n", " 'HKW / GuD / IKW': 'CHP',\n", " 'GuD / HKW / IKW': 'CHP',\n", "}\n", "plantlist['type'].replace(dict_type, inplace=True)\n", "plantlist['type'].unique()\n", "\n", "# Check if all types have been translated\n", "for type in plantlist['type'].unique():\n", " if (type not in dict_type.values()) & (str(type) != 'nan'):\n", " logger.error('Untranslated type: ' + str(type))\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.6.2 Identify generation technology based on BNetzA information" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Set technology based on fuels\n", "\n", "plantlist.loc[(plantlist['fuel'] == 'Nuclear') & ((plantlist['technology'] == '') | (\n", " plantlist['technology'].isnull())), 'technology'] = 'Steam turbine'\n", "\n", "plantlist.loc[(plantlist['fuel'] == 'Lignite') & ((plantlist['technology'] == '') | (\n", " plantlist['technology'].isnull())), 'technology'] = 'Steam turbine'\n", "\n", "plantlist.loc[(plantlist['fuel'] == 'Hard Coal') & ((plantlist['technology'] == '') | (\n", " plantlist['technology'].isnull())), 'technology'] = 'Steam turbine'\n", "\n", "plantlist.loc[(plantlist['fuel'] == 'Hard coal') & ((plantlist['technology'] == '') | (\n", " plantlist['technology'].isnull())), 'technology'] = 'Steam turbine'\n", "\n", "plantlist.loc[(plantlist['fuel'] == 'Hydro') & ((plantlist['technology'] == '') | (\n", " plantlist['technology'].isnull())), 'technology'] = 'Run-of-river'\n", "\n", "plantlist.loc[(plantlist['fuel'] == 'Hydro PSP') & \n", " ((plantlist['technology'] == '') | (plantlist['technology'].isnull())), \n", " 'technology'] = 'Pumped storage'\n", "plantlist.loc[(plantlist['fuel'] == 'Hydro PSP'), 'fuel'] = 'Hydro'\n", "\n", "plantlist.loc[(plantlist['fuel'] == 'Hydro Reservoir') & \n", " ((plantlist['technology'] == '') | (plantlist['technology'].isnull())), \n", " 'technology'] = 'RES'\n", "plantlist.loc[(plantlist['fuel'] == 'Hydro Reservoir'), 'fuel'] = 'Hydro'\n", "\n", "plantlist.loc[(plantlist['fuel'] == 'reservoir') & ((plantlist['technology'] == '') | \n", " (plantlist['technology'].isnull())), \n", " 'technology'] = 'RES'\n", "\n", "# Set technology based on name and block information combined with fuels (e.g. combined-cycle, gas turbine)\n", "# Define technology CC as combination of GT and DT\n", "plantlist.loc[((plantlist['name'].str.contains(\"GT\")) | (plantlist['block'].str.contains(\"GT\")))\n", " & ((plantlist['name'].str.contains(\"DT\")) | (plantlist['block'].str.contains(\"DT\")))\n", " & ((plantlist['technology'] == '') | (plantlist['technology'].isnull())), 'technology'] = 'Combined cycle'\n", "# Define technology CC if specified as GuD\n", "plantlist.loc[((plantlist['name'].str.contains(\"GuD\")) | (plantlist['block'].str.contains(\"GuD\"))\n", " | (plantlist['name'].str.contains(\"GUD\")) | (plantlist['name'].str.contains(\"GUD\")))\n", " & ((plantlist['technology'] == '') | (plantlist['technology'].isnull())), 'technology'] = 'Combined cycle'\n", "# Define technology GT\n", "plantlist.loc[((plantlist['name'].str.contains(\"GT\"))\n", " | (plantlist['block'].str.contains(\"GT\"))\n", " | (plantlist['name'].str.contains(\"Gasturbine\"))\n", " | (plantlist['block'].str.contains(\"Gasturbine\")))\n", " & ((plantlist['technology'] == '') | (plantlist['technology'].isnull())), 'technology'] = 'Gas turbine'\n", "# Define technology ST\n", "plantlist.loc[((plantlist['name'].str.contains(\"DT\"))\n", " | (plantlist['block'].str.contains(\"DT\"))\n", " | (plantlist['name'].str.contains(\"Dampfturbine\"))\n", " | (plantlist['block'].str.contains(\"Dampfturbine\"))\n", " | (plantlist['name'].str.contains(\"Dampfkraftwerk\"))\n", " | (plantlist['block'].str.contains(\"Dampfkraftwerk\"))\n", " | (plantlist['name'].str.contains(\"DKW\"))\n", " | (plantlist['block'].str.contains(\"DKW\")))\n", " & ((plantlist['technology'] == '') | (plantlist['technology'].isnull())), 'technology'] = 'Steam turbine'\n", "# Define technology CB\n", "plantlist.loc[((plantlist['name'].str.contains(\"motor\"))\n", " | (plantlist['block'].str.contains(\"motor\"))\n", " | (plantlist['name'].str.contains(\"Motor\"))\n", " | (plantlist['block'].str.contains(\"Motor\")))\n", " & ((plantlist['technology'] == '') | (plantlist['technology'].isnull())), 'technology'] = 'Combustion Engine'\n", "\n", "# Identify stroage technologies\n", "\n", "plantlist.loc[(plantlist['fuel'] == 'Other fuels') & ((plantlist[\n", " 'fuel_basis'] == 'Sonstige Speichertechnologien') & (plantlist['technology'].isnull())), 'technology'] = 'Storage technologies'\n", "\n", "\n", "# Set technology ST for all technologies which could not be identified\n", "plantlist.loc[((plantlist['technology'] == '')\n", " | (plantlist['technology'].isnull())), 'technology'] = 'Steam turbine'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.7 Add country code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some power plants are in Austria, Switzerland, or Luxembourg. As they are sometimes part of the German electricity system, they are included here." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "scrolled": false }, "outputs": [], "source": [ "# Add country Code\n", "plantlist['country_code'] = plantlist['state']\n", "dict_state_country = {\n", " 'Brandenburg': 'DE',\n", " 'Baden-Württemberg': 'DE',\n", " 'Niedersachsen': 'DE',\n", " 'Bayern': 'DE',\n", " 'Mecklenburg-Vorpommern': 'DE',\n", " 'Sachsen-Anhalt': 'DE',\n", " 'Hessen': 'DE',\n", " 'Nordrhein-Westfalen': 'DE',\n", " 'Berlin': 'DE',\n", " 'Saarland': 'DE',\n", " 'Thüringen': 'DE',\n", " 'Sachsen': 'DE',\n", " 'Bremen': 'DE',\n", " 'Schleswig-Holstein': 'DE',\n", " 'Hamburg': 'DE',\n", " 'Rheinland-Pfalz': 'DE',\n", " 'Österreich': 'AT',\n", " 'Luxemburg': 'LU',\n", " 'Schweiz': 'CH',\n", "}\n", "plantlist['country_code'].replace(dict_state_country, inplace=True)\n", "\n", "# Check if all types have been translated\n", "for plant_type in plantlist['country_code'].unique():\n", " if (plant_type not in dict_state_country.values()) & (str(plant_type) != 'nan'):\n", " logger.error('Untranslated type: ' + str(plant_type))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.8 Add efficiency data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.8.1 Efficiencies from research" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This sections adds efficiency data. These values have been researched by hand. \n", "\n", "The source of each value is given in the column \"efficiency_source\". \n", "\n", "Additionally, a rating of the source has been done starting from A (e.g. website of the power plants operator) to C (e.g. Article in local newspaper)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 7.8.1.1 Import data" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
companynamepostcodecitystreetstateblockcommissionedstatusfuel_basis...retrofit_floattechnologytypecountry_codeefficiency_netefficiency_grossefficiency_commentdateefficiency_sourcesource_type
BNA0005Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT A1990shutdown_temporaryErdgas...NaNGas turbineNaNDE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...A
BNA0006Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT B1990shutdown_temporaryErdgas...NaNGas turbineNaNDE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...A
BNA0007Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT C1990shutdown_temporaryErdgas...NaNGas turbineNaNDE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...A
BNA0008Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT D1990shutdown_temporaryErdgas...NaNGas turbineNaNDE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...A
BNA0010aRheinkraftwerk Albbruck-Dogern AGRADAG79774AlbbruckKraftwerkstrasse 34Baden-WürttembergNaN01.01.1934operatingLaufwasser...2020.0Run-of-riverDENaNNaNNaNNaNNaNNaN
\n", "

5 rows × 65 columns

\n", "
" ], "text/plain": [ " company name postcode \\\n", "BNA0005 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0006 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0007 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0008 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0010a Rheinkraftwerk Albbruck-Dogern AG RADAG 79774 \n", "\n", " city street state block \\\n", "BNA0005 Ahrensfelde Lindenberger Weg Brandenburg GT A \n", "BNA0006 Ahrensfelde Lindenberger Weg Brandenburg GT B \n", "BNA0007 Ahrensfelde Lindenberger Weg Brandenburg GT C \n", "BNA0008 Ahrensfelde Lindenberger Weg Brandenburg GT D \n", "BNA0010a Albbruck Kraftwerkstrasse 34 Baden-Württemberg NaN \n", "\n", " commissioned status fuel_basis ... retrofit_float \\\n", "BNA0005 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0006 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0007 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0008 1990 shutdown_temporary Erdgas ... NaN \n", "BNA0010a 01.01.1934 operating Laufwasser ... 2020.0 \n", "\n", " technology type country_code efficiency_net efficiency_gross \\\n", "BNA0005 Gas turbine NaN DE 0.31 NaN \n", "BNA0006 Gas turbine NaN DE 0.31 NaN \n", "BNA0007 Gas turbine NaN DE 0.31 NaN \n", "BNA0008 Gas turbine NaN DE 0.31 NaN \n", "BNA0010a Run-of-river DE NaN NaN \n", "\n", " efficiency_comment date \\\n", "BNA0005 NaN 2015-30-10 \n", "BNA0006 NaN 2015-30-10 \n", "BNA0007 NaN 2015-30-10 \n", "BNA0008 NaN 2015-30-10 \n", "BNA0010a NaN NaN \n", "\n", " efficiency_source source_type \n", "BNA0005 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0006 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0007 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0008 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0010a NaN NaN \n", "\n", "[5 rows x 65 columns]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Efficiencies\n", "data_efficiencies_bnetza = pd.read_csv(os.path.join('input/data/DE', 'input_efficiency_de.csv'),\n", " sep=',', # CSV field separator, default is ','\n", " decimal='.', # Decimal separator, default is '.')\n", " index_col='id',\n", " encoding='utf8')\n", "data_efficiencies_bnetza['efficiency_net'] = pd.to_numeric(\n", " data_efficiencies_bnetza['efficiency_net'],\n", " errors='coerce') \n", "\n", "data_efficiencies_bnetza = data_efficiencies_bnetza.dropna(subset=['efficiency_net'])\n", "\n", "plantlist = pd.merge(\n", " plantlist, \n", " data_efficiencies_bnetza, \n", " left_index=True, \n", " right_index=True, \n", " how='left')\n", "\n", "plantlist.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 7.8.1.2 Plot efficiencies by year of commissioning" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
blockcommissionedstatusfuel_basisfuel_multiple1fuel_multiple2fueleegchpcapacity...commissioned_floatretrofit_floattechnologytypecountry_codeefficiency_netefficiency_grossefficiency_commentdateefficiency_source
BNA0005GT A1990shutdown_temporaryErdgasNaNNaNNatural gasnono37.5...1990.0NaNGas turbineNaNDE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...
BNA0006GT B1990shutdown_temporaryErdgasNaNNaNNatural gasnono37.5...1990.0NaNGas turbineNaNDE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...
BNA0007GT C1990shutdown_temporaryErdgasNaNNaNNatural gasnono37.5...1990.0NaNGas turbineNaNDE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...
BNA0008GT D1990shutdown_temporaryErdgasNaNNaNNatural gasnono37.5...1990.0NaNGas turbineNaNDE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...
BNA0010aNaN01.01.1934operatingLaufwasserNaNNaNHydronono79.5...1934.02020.0Run-of-riverDENaNNaNNaNNaNNaN
\n", "

5 rows × 58 columns

\n", "
" ], "text/plain": [ " block commissioned status fuel_basis fuel_multiple1 \\\n", "BNA0005 GT A 1990 shutdown_temporary Erdgas NaN \n", "BNA0006 GT B 1990 shutdown_temporary Erdgas NaN \n", "BNA0007 GT C 1990 shutdown_temporary Erdgas NaN \n", "BNA0008 GT D 1990 shutdown_temporary Erdgas NaN \n", "BNA0010a NaN 01.01.1934 operating Laufwasser NaN \n", "\n", " fuel_multiple2 fuel eeg chp capacity ... \\\n", "BNA0005 NaN Natural gas no no 37.5 ... \n", "BNA0006 NaN Natural gas no no 37.5 ... \n", "BNA0007 NaN Natural gas no no 37.5 ... \n", "BNA0008 NaN Natural gas no no 37.5 ... \n", "BNA0010a NaN Hydro no no 79.5 ... \n", "\n", " commissioned_float retrofit_float technology type country_code \\\n", "BNA0005 1990.0 NaN Gas turbine NaN DE \n", "BNA0006 1990.0 NaN Gas turbine NaN DE \n", "BNA0007 1990.0 NaN Gas turbine NaN DE \n", "BNA0008 1990.0 NaN Gas turbine NaN DE \n", "BNA0010a 1934.0 2020.0 Run-of-river DE \n", "\n", " efficiency_net efficiency_gross efficiency_comment date \\\n", "BNA0005 0.31 NaN NaN 2015-30-10 \n", "BNA0006 0.31 NaN NaN 2015-30-10 \n", "BNA0007 0.31 NaN NaN 2015-30-10 \n", "BNA0008 0.31 NaN NaN 2015-30-10 \n", "BNA0010a NaN NaN NaN NaN \n", "\n", " efficiency_source \n", "BNA0005 https://www.ffe.de/download/berichte/Endberich... \n", "BNA0006 https://www.ffe.de/download/berichte/Endberich... \n", "BNA0007 https://www.ffe.de/download/berichte/Endberich... \n", "BNA0008 https://www.ffe.de/download/berichte/Endberich... \n", "BNA0010a NaN \n", "\n", "[5 rows x 58 columns]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plantlist.iloc[:,6:-1].head()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "plantlist_for_efficiency_analysis = plantlist\n", "plantlist_for_efficiency_analysis = plantlist_for_efficiency_analysis.dropna(subset=['efficiency_net'])" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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g1RXVxMMBj1/r+eee47x48czduxYJkyYwCeffALArbfeynXXXcekSZO4+uqrqa2tZdKkSYwdO5ZvfvObWHvQJDYAf/vb3zjxxBMZPXo0559/PgA7duxgypQpjBo1ilNOOYW3334bgBUrVnDaaacxduxYTjvtNN5//33Pv14RERERkW7R9jifxnrncfnMrs3gSlLw9J5ba22TMWYW8DzgA+Zba9caY65vef0+a+06Y8zfgLeBZuAha+07AO2N9bJegDVr1lBeXo7P5yMUClFSUkJRUVFU19y7dy9jxoxpfb5jxw4uvfRSAM444wyWLVuGMYaHHnqI22+/nV//+tcArFq1itdff51evXrxne98hzPOOIO5c+eyePFiHnjggYPep6amhmuvvZalS5dSUFDAjh07ALjlllsYO3Yszz77LC+//DJXX301q1ev5ktf+hJLly4lMzOTl156iR//+Mc89dRTUX2tIiIiIiIJYf9xPvvPqYUvjvPRMuOU5PWGUlhrlwBLDmi774DndwB3uBnrpWAwSHl5OU1NTa1LgcvKyigoKMDv93f5ur169WL16tWtzxcsWEBFRQUAVVVVTJs2jW3btrFv3z4KCgpa+1166aX06tULgKVLl/L0008DcNFFF3H44Ycf9D7Lli3jrLPOar1Gv379AHj99ddbQ+t5551HbW0t9fX17Ny5k//8z/9k/fr1GGNobGzs8tcoIiIiIpJQdJxP2vF6WXJSqaurw+fzhbX5fD7q6uo8e8/Zs2cza9Ys1qxZw/33309DQ0PrawcGamPa22PrC9badvu0t4TZGMOcOXM499xzeeedd3juuefC3ltEREREJKm1Pc4n059cx/lEswlWGlO4bSM3N5dQKBTWFgqFyM3N9ew96+vryc/PB+CRRx7psN9ZZ53Fn/70JwD++te/8tlnnx3U59RTT+XVV19l48aNAK3LktuOfeWVVxgwYAA5OTlh771gwYKYfU0iIiIiIgnDWufMlQ72rEk42gSryxRu2/D7/ZSUlJCZmUnPnj3JzMykpKQkqiXJh3LrrbdyxRVXcOaZZzJgwIAO+91yyy0sXbqUE088kRdeeIEhQ4Yc1CcvL48HHniAqVOnMnr0aKZNm9b6HhUVFYwaNYqbbrqpNUTfeOON/OhHP+L0008/KNSLiIiIiCS1/RtKNTdAKOg8JvqGUtoEKyqmo113k1FxcbHdfy/rfuvWrWPEiBERXScYDFJXV0dubq6nwTaVdeVzFxEREZEE1lDjbMbkDyTH0t7alc7sZ2P9F21ZOXDeS87ZtYkoGWvuZsaYVdba4vZe83xDqWTk9/sVakVERERE9qtc6MwgZvRwNmkaXwqB6fGuqnPJuKFUMtacQLQsWUREREREOpasS2XbbiiVlZMcG0olY80JRDO3IiIiIiLSsWQ+LzYwHQZOSK7l1MlYc4JQuBURERERkY4l+1LZ7LzkC4jJWHMC0LJkERERERHpmJbKSpLQzK2IiIiIiHROS2UlCWjmtptUVVVRUlLC8OHDGTZsGP/93//Nvn37qKio4Dvf+Q4ACxYsYNasWXGuVERERESkHdl5znE0CraSoBRuu4G1lqlTpzJlyhTWr1/PBx98wO7du7n55pspLi7mnnvuiXeJIiIiIiIiSU3hth01NTWsXLmSmprYbG/+8ssvk52dzde+9jUAfD4fd911F/Pnz2fJkiVcfPHFMXkfERERERGRdKVwe4CFCxcydOhQJk6cyNChQ1m4cGHU11y7di0nnXRSWFtOTg5Dhgzhww8/jPr6IiIiIkmvoQZqVyb+2amJQJ+VSLsUbtuoqalh5syZ7N27l/r6evbu3cvMmTOjnsG11mKMcd0uIiIiklYqF0LZUHh5ovNYGf3kQsrSZyXSIYXbNiorK+nRo0dYW1ZWFpWVlVFd9/jjj6eioiKsbefOnWzZsoVhw4ZFdW0RERGRpNZQA8tnQmgvNNY7j8tnalayPfqsRDqlcNtGIBBg377wA6obGxsJBAJRXff8889nz549PProowCEQiG+//3vc80113DYYYdFdW0RERGRpBashIzwyQUyspx2CZfMn1X9OtjwiPMo4hGF2zby8vIoLS2lV69e5OTk0KtXL0pLS8nLi267c2MMzzzzDE8++STDhw/n2GOPJTs7m5///OcxqlxEREQkSfkD0Bw+uUBzo9Mu4ZL1s1o5GxaPhGXXOI8rZ8e7IklRxlob7xpipri42B64/HfdunWMGDEiouvU1NRQWVlJIBCIOtimq6587iIiIpKmKhc6y2szspywNr4UAtPjXVViSrbPqn6dE2gPdNG70Fc/K0rkjDGrrLXF7b2W2d3FJIO8vDyFWhEREZHuEpgOAyc4y2v9AcjWz2EdSrbPqnZFx+0KtxJjCrciIiIiEn/ZeYkf1BJFMn1W/cdF1i4SBd1zKyIiIiIi3ug7AobPCm8bPkuztuIJzdyKiIiIiIh3Tv4/OPbbzlLk/uMUbMUzCrciIiIiIuKtviMUasVzWpYsIiIiIl9oqIHalc6jiEgSUbjtBsYYvv/977c+v/POO7n11ls7HfPKK6/wxhtvxLSOQCDA9u3bY3pNERERSSGVC6FsKLw80XmsXBjvikREXFO47QY9e/bk6aefjihYdiXchkKhSEsTERERcTTUOOenhvZCY73zuHymZnBFJGko3LYnxstxMjMzue6667jrrrsOeu25555j/PjxjB07lgkTJvDJJ59QWVnJfffdx1133cWYMWN47bXXuOaaa/jzn//cOq53796AE4LPPfdcZsyYwQknnADAlClTOOmkkzj++ON54IEHDllfaWkpxx57LOeccw7XXnsts2bN6rA2gFdffZUxY8YwZswYxo4dy65du6L+jERERCTOgpWQ0SO8LSPLaRcRSQIKtwfyaDnOf/3Xf/GnP/2J+vr6sPYzzjiDZcuW8e9//5urrrqK22+/nUAgwPXXX893v/tdVq9ezZlnntnptVesWMHPfvYz3n33XQDmz5/PqlWrqKio4J577qG2trbDsVu3bmXevHksW7aMF198kffee6/T2sBZVv3b3/6W1atX89prr9GrV6+ufiwiIiKSKPwBaN4X3tbc6LSLiCQB7ZbcVtvlOKG9TtvymTBwQtQHZefk5HD11Vdzzz33hIXBqqoqpk2bxrZt29i3bx8FBQURX3vcuHFh4+655x6eeeYZALZs2cL69evp379/u2NXrFjB2WefTb9+/QC44oor+OCDDzqt7fTTT+d73/seX/3qV5k6dSqDBw+OuGYRERFJMNl5ML7U+dknI8sJtuNLo/4ZSESku2jmti2Pl+PccMMNlJaWEgwGW9tmz57NrFmzWLNmDffffz8NDQ3tjs3MzKS5uRkAay379n3xm1W/39/691deeYWXXnqJN998k7feeouxY8d2eM391+pIR7XddNNNPPTQQ+zdu5dTTjklbLZXREREklhgOpRsgvNech4D0+NdkYiIawq3bXm8HKdfv35ceeWVlJaWtrbV19eTn58PwCOPPNLa3qdPn7B7WQOBAKtWrQKgrKyMxsbGdt+jvr6eww8/nMMOO4z33nuPZcuWdVrTuHHjePXV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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot efficiencies for lignite, coal, oil, and natural gas\n", "\n", "fuel_for_plot = ['Lignite', 'Hard coal', 'Oil', 'Natural gas']\n", "col_dict = {'Lignite': 'brown', 'Hard coal': 'grey', 'Oil': 'k', 'Natural gas': 'orange'}\n", "\n", "fig, ax = plt.subplots(figsize=(16,8))\n", "\n", "for fuels in fuel_for_plot:\n", " \n", " sub_df = plantlist_for_efficiency_analysis[plantlist_for_efficiency_analysis.fuel == fuels]\n", " \n", " if len(sub_df['efficiency_net']) > 10:\n", " x = np.array(sub_df['commissioned_float'].astype(int))\n", " fit = np.polyfit(x, sub_df['efficiency_net'], deg=1)\n", " ax.plot(x, fit[0]*x + fit[1], color=col_dict[fuels])\n", " \n", " sub_df.plot(ax=ax,\n", " kind='scatter',\n", " x='commissioned_float',\n", " y='efficiency_net',\n", " c=col_dict[fuels],\n", " label=fuels) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.8.2 Efficiencies from literature" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Jonas Egerer, Clemens Gerbaulet, Richard Ihlenburg, Friedrich Kunz, Benjamin Reinhard, Christian von Hirschhausen, Alexander Weber, Jens Weibezahn (2014): **Electricity Sector Data for Policy-Relevant Modeling: Data Documentation and Applications to the German and European Electricity Markets**. DIW Data Documentation 72, Berlin, Germany." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 7.8.2.1 Import data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For each energy source - technology combination two values are read, to be applied as a linear approximation based on the year of commissioning. Therefore, the efficiency is made up of the efficiency_intercept (the efficiency at \"year zero\") plus the efficiency_slope multiplied by the year of commissioning." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
efficiency_interceptefficiency_slope
fueltechnology
Biomass and biogasSteam turbine0.3800.0000
Combustion Engine-2.3580.0014
Hard coalSteam turbine-4.5750.0025
Combined cycle-8.4600.0045
Natural gasCombustion Engine-2.3580.0014
Combined cycle-8.4600.0045
Gas turbine-4.8200.0026
hp0.9500.0000
ic0.3800.0000
Steam turbine-1.8150.0011
LigniteSteam turbine-4.4000.0024
OilCombustion Engine-2.3580.0014
Gas turbine-4.8200.0026
Combined cycle0.3800.0000
ic0.3800.0000
Steam turbine-1.8150.0011
NuclearSteam turbine0.3300.0000
WasteGas turbine0.3300.0000
Steam turbine0.3300.0000
Combined cycle0.3300.0000
HydroPumped storage0.7500.0000
Reservoir0.8000.0000
Run-of-river0.8000.0000
Other fossil fuelsGas turbine0.3300.0000
Combined cycle0.3300.0000
Steam turbine0.3300.0000
Combustion Engine-2.3580.0014
\n", "
" ], "text/plain": [ " efficiency_intercept efficiency_slope\n", "fuel technology \n", "Biomass and biogas Steam turbine 0.380 0.0000\n", " Combustion Engine -2.358 0.0014\n", "Hard coal Steam turbine -4.575 0.0025\n", " Combined cycle -8.460 0.0045\n", "Natural gas Combustion Engine -2.358 0.0014\n", " Combined cycle -8.460 0.0045\n", " Gas turbine -4.820 0.0026\n", " hp 0.950 0.0000\n", " ic 0.380 0.0000\n", " Steam turbine -1.815 0.0011\n", "Lignite Steam turbine -4.400 0.0024\n", "Oil Combustion Engine -2.358 0.0014\n", " Gas turbine -4.820 0.0026\n", " Combined cycle 0.380 0.0000\n", " ic 0.380 0.0000\n", " Steam turbine -1.815 0.0011\n", "Nuclear Steam turbine 0.330 0.0000\n", "Waste Gas turbine 0.330 0.0000\n", " Steam turbine 0.330 0.0000\n", " Combined cycle 0.330 0.0000\n", "Hydro Pumped storage 0.750 0.0000\n", " Reservoir 0.800 0.0000\n", " Run-of-river 0.800 0.0000\n", "Other fossil fuels Gas turbine 0.330 0.0000\n", " Combined cycle 0.330 0.0000\n", " Steam turbine 0.330 0.0000\n", " Combustion Engine -2.358 0.0014" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_efficiencies_literature = pd.read_csv(os.path.join('input/data/DE','input_efficiency_literature_by_fuel_technology.csv'),\n", " sep=',', # CSV field separator, default is ','\n", " decimal='.', # Decimal separator, default is '.') \n", " encoding='utf8')\n", "#data_efficiencies_literature['technology'] = data_efficiencies_literature['technology'].str.upper()\n", "data_efficiencies_literature = data_efficiencies_literature.set_index(['fuel','technology'])\n", "data_efficiencies_literature" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 7.8.2.2 Apply efficiency approximation from literature" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
companynamepostcodecitystreetstateblockcommissionedstatusfuel_basis...country_codeefficiency_netefficiency_grossefficiency_commentdateefficiency_sourcesource_typeefficiency_interceptefficiency_slopeefficiency_literature
BNA0005Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT A1990shutdown_temporaryErdgas...DE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...A-4.820.00260.354
BNA0006Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT B1990shutdown_temporaryErdgas...DE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...A-4.820.00260.354
BNA0007Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT C1990shutdown_temporaryErdgas...DE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...A-4.820.00260.354
BNA0008Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT D1990shutdown_temporaryErdgas...DE0.31NaNNaN2015-30-10https://www.ffe.de/download/berichte/Endberich...A-4.820.00260.354
BNA0010aRheinkraftwerk Albbruck-Dogern AGRADAG79774AlbbruckKraftwerkstrasse 34Baden-WürttembergNaN01.01.1934operatingLaufwasser...DENaNNaNNaNNaNNaNNaN0.800.00000.800
\n", "

5 rows × 68 columns

\n", "
" ], "text/plain": [ " company name postcode \\\n", "BNA0005 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0006 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0007 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0008 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0010a Rheinkraftwerk Albbruck-Dogern AG RADAG 79774 \n", "\n", " city street state block \\\n", "BNA0005 Ahrensfelde Lindenberger Weg Brandenburg GT A \n", "BNA0006 Ahrensfelde Lindenberger Weg Brandenburg GT B \n", "BNA0007 Ahrensfelde Lindenberger Weg Brandenburg GT C \n", "BNA0008 Ahrensfelde Lindenberger Weg Brandenburg GT D \n", "BNA0010a Albbruck Kraftwerkstrasse 34 Baden-Württemberg NaN \n", "\n", " commissioned status fuel_basis ... country_code \\\n", "BNA0005 1990 shutdown_temporary Erdgas ... DE \n", "BNA0006 1990 shutdown_temporary Erdgas ... DE \n", "BNA0007 1990 shutdown_temporary Erdgas ... DE \n", "BNA0008 1990 shutdown_temporary Erdgas ... DE \n", "BNA0010a 01.01.1934 operating Laufwasser ... DE \n", "\n", " efficiency_net efficiency_gross efficiency_comment date \\\n", "BNA0005 0.31 NaN NaN 2015-30-10 \n", "BNA0006 0.31 NaN NaN 2015-30-10 \n", "BNA0007 0.31 NaN NaN 2015-30-10 \n", "BNA0008 0.31 NaN NaN 2015-30-10 \n", "BNA0010a NaN NaN NaN NaN \n", "\n", " efficiency_source source_type \\\n", "BNA0005 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0006 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0007 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0008 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0010a NaN NaN \n", "\n", " efficiency_intercept efficiency_slope efficiency_literature \n", "BNA0005 -4.82 0.0026 0.354 \n", "BNA0006 -4.82 0.0026 0.354 \n", "BNA0007 -4.82 0.0026 0.354 \n", "BNA0008 -4.82 0.0026 0.354 \n", "BNA0010a 0.80 0.0000 0.800 \n", "\n", "[5 rows x 68 columns]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plantlist = plantlist.join(data_efficiencies_literature,on=['fuel','technology'])\n", "plantlist['efficiency_literature'] = plantlist['efficiency_intercept'] + plantlist['efficiency_slope']*plantlist[['commissioned_float','retrofit_float']].max(axis=1)\n", "plantlist.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.9 Add geodata and EIC Codes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The locations of power plants have been researched manually, these are now added to the output. Checking was done visually using satellite imagery and other mapping material." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
companynamepostcodecitystreetstateblockcommissionedstatusfuel_basis...dateefficiency_sourcesource_typeefficiency_interceptefficiency_slopeefficiency_literaturelatloneic_code_planteic_code_block
BNA0005Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT A1990shutdown_temporaryErdgas...2015-30-10https://www.ffe.de/download/berichte/Endberich...A-4.820.00260.35452.5895013.558652NaNNaN
BNA0006Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT B1990shutdown_temporaryErdgas...2015-30-10https://www.ffe.de/download/berichte/Endberich...A-4.820.00260.35452.5895013.558652NaNNaN
BNA0007Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT C1990shutdown_temporaryErdgas...2015-30-10https://www.ffe.de/download/berichte/Endberich...A-4.820.00260.35452.5895013.558652NaNNaN
BNA0008Lausitz Energie Kraftwerke AGAhrensfelde16356AhrensfeldeLindenberger WegBrandenburgGT D1990shutdown_temporaryErdgas...2015-30-10https://www.ffe.de/download/berichte/Endberich...A-4.820.00260.35452.5895013.558652NaNNaN
BNA0010aRheinkraftwerk Albbruck-Dogern AGRADAG79774AlbbruckKraftwerkstrasse 34Baden-WürttembergNaN01.01.1934operatingLaufwasser...NaNNaNNaN0.800.00000.80047.586298.132070NaNNaN
\n", "

5 rows × 72 columns

\n", "
" ], "text/plain": [ " company name postcode \\\n", "BNA0005 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0006 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0007 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0008 Lausitz Energie Kraftwerke AG Ahrensfelde 16356 \n", "BNA0010a Rheinkraftwerk Albbruck-Dogern AG RADAG 79774 \n", "\n", " city street state block \\\n", "BNA0005 Ahrensfelde Lindenberger Weg Brandenburg GT A \n", "BNA0006 Ahrensfelde Lindenberger Weg Brandenburg GT B \n", "BNA0007 Ahrensfelde Lindenberger Weg Brandenburg GT C \n", "BNA0008 Ahrensfelde Lindenberger Weg Brandenburg GT D \n", "BNA0010a Albbruck Kraftwerkstrasse 34 Baden-Württemberg NaN \n", "\n", " commissioned status fuel_basis ... date \\\n", "BNA0005 1990 shutdown_temporary Erdgas ... 2015-30-10 \n", "BNA0006 1990 shutdown_temporary Erdgas ... 2015-30-10 \n", "BNA0007 1990 shutdown_temporary Erdgas ... 2015-30-10 \n", "BNA0008 1990 shutdown_temporary Erdgas ... 2015-30-10 \n", "BNA0010a 01.01.1934 operating Laufwasser ... NaN \n", "\n", " efficiency_source source_type \\\n", "BNA0005 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0006 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0007 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0008 https://www.ffe.de/download/berichte/Endberich... A \n", "BNA0010a NaN NaN \n", "\n", " efficiency_intercept efficiency_slope efficiency_literature \\\n", "BNA0005 -4.82 0.0026 0.354 \n", "BNA0006 -4.82 0.0026 0.354 \n", "BNA0007 -4.82 0.0026 0.354 \n", "BNA0008 -4.82 0.0026 0.354 \n", "BNA0010a 0.80 0.0000 0.800 \n", "\n", " lat lon eic_code_plant eic_code_block \n", "BNA0005 52.58950 13.558652 NaN NaN \n", "BNA0006 52.58950 13.558652 NaN NaN \n", "BNA0007 52.58950 13.558652 NaN NaN \n", "BNA0008 52.58950 13.558652 NaN NaN \n", "BNA0010a 47.58629 8.132070 NaN NaN \n", "\n", "[5 rows x 72 columns]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_plant_locations = pd.read_csv(os.path.join('input/data/DE','input_plant_locations_de.csv'),\n", " sep=',', # CSV field separator, default is ','\n", " decimal='.', # Decimal separator, default is '.') \n", " encoding='utf8')\n", "\n", "data_plant_locations = data_plant_locations.set_index('id')\n", "\n", "data_plant_locations['lat'] = pd.to_numeric(data_plant_locations['lat'], \n", " errors='coerce')\n", "data_plant_locations['lon'] = pd.to_numeric(data_plant_locations['lon'], \n", " errors='coerce')\n", "\n", "plantlist = pd.merge(plantlist, \n", " data_plant_locations, \n", " left_index=True, \n", " right_index=True, \n", " how='left')\n", "plantlist.head()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
companynamepostcodecitystreetstateblockcommissionedstatusfuel_basis...dateefficiency_sourcesource_typeefficiency_interceptefficiency_slopeefficiency_literaturelatloneic_code_planteic_code_block
\n", "

0 rows × 72 columns

\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [company, name, postcode, city, street, state, block, commissioned, status, fuel_basis, fuel_multiple1, fuel_multiple2, fuel, eeg, chp, capacity, network_node, voltage, network_operator, bnetza_id, capacity_bnetza, capacity_bnetza_aggregate, capacity_bnetza_with_chp, chp_bnetza, merge_comment, uba_capacity, uba_capacity_original, uba_capacity_scaled, uba_chp_capacity, uba_chp_capacity_original, uba_chp_capacity_scaled, uba_city, uba_commissioned, uba_company, uba_company_aggregate, uba_fuel, uba_id_string, uba_match_fuel, uba_match_name, uba_name, uba_name_aggregate, uba_postcode, uba_state, uba_technology, uba_technology_aggregate, shutdown, retrofit, uba_commissioned_1, uba_commissioned_2, uba_commissioned_3, commissioned_1, commissioned_2, commissioned_3, capacity_float, commissioned_float, retrofit_float, technology, type, country_code, efficiency_net, efficiency_gross, efficiency_comment, date, efficiency_source, source_type, efficiency_intercept, efficiency_slope, efficiency_literature, lat, lon, eic_code_plant, eic_code_block]\n", "Index: []\n", "\n", "[0 rows x 72 columns]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plantlist[plantlist.lat.isnull()]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7.10 Allocate energy source levels" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To enable a more readable output, the columns 'fuel' is augmented with additional information called 'energy source level'" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
energy_source_level_1energy_source_level_2energy_source_level_3companynamepostcodecitystreetstateblock...dateefficiency_sourcesource_typeefficiency_interceptefficiency_slopeefficiency_literaturelatloneic_code_planteic_code_block
BNA0012aRenewable energyBioenergyBiomass and biogasSappi Alfeld GmbHWerkskraftwerk Sappi Alfeld31061AlfeldMühlenmarsch 1NiedersachsenTurbine 5...NaNNaNNaN0.3800.00000.380051.9847619.822831NaNNaN
BNA0021Renewable energyBioenergyBiomass and biogasHeizkraftwerk Altenstadt GmbH & Co. KGHKW Altenstadt86972AltenstadtTriebstraße 90BayernNaN...NaNNaNNaN0.3800.00000.380047.79714010.858740NaNNaN
BNA0027Renewable energyBioenergyBiomass and biogasZellstoff Stendal GmbHZellstoff Stendal GmbH39596ArneburgGoldbecker Straße 1Sachsen-Anhalt-...NaNNaNNaN0.3800.00000.380052.72713012.011150NaNNaN
BNA0055Renewable energyBioenergyBiomass and biogasPfleiderer Baruth GmbHUTB15837Baruth/MarkAn der Birkenpfuhlheide 3BrandenburgNaN...NaNNaNNaN0.3800.00000.380052.07778013.517250NaNNaN
BNA0062Renewable energyBioenergyBiomass and biogasSonae Arauco Beeskow GmbHBHW Beeskow15848BeeskowNaNBrandenburgNaN...NaNNaNNaN0.3800.00000.380052.18269014.258410NaNNaN
..................................................................
BNA1867Other or unspecified energy sourcesWasteNaNAVG Köln mbHAVG Köln50735KölnGeestemünder Straße 23Nordrhein-WestfalenTurbosatz 2...NaNNaNNaN0.3300.00000.330050.9996206.940959NaNNaN
BNA0492NaNNaNNaNRAG Anthrazit Ibbenbüren GmbHRAG Anthrazit Ibbenbüren GmbH49477IbbenbürenNaNNordrhein-WestfalenEVA...NaNNaNNaN0.3300.00000.330052.2858807.746130NaNNaN
BNA0997NaNNaNNaNSTEAG New Energies GmbHHKW Fenne, Grubengaskraftwerk66333Völklingen-FenneNaNSaarlandGasmotorenanlage Fenne...NaNNaNNaN-2.3580.00140.446249.2490186.879244NaNNaN
BNA1864NaNNaNNaNKÄMMERER Energie GmbHTurbine 449084OsnabrückRömereschstrasse 33NiedersachsenNaN...NaNNaNNaNNaNNaNNaN52.2940368.022962NaNNaN
BNA1865NaNNaNNaNKÄMMERER Energie GmbHTurbine 549084OsnabrückRömereschstrasse 33NiedersachsenNaN...NaNNaNNaNNaNNaNNaN52.2940368.022962NaNNaN
\n", "

909 rows × 75 columns

\n", "
" ], "text/plain": [ " energy_source_level_1 energy_source_level_2 \\\n", "BNA0012a Renewable energy Bioenergy \n", "BNA0021 Renewable energy Bioenergy \n", "BNA0027 Renewable energy Bioenergy \n", "BNA0055 Renewable energy Bioenergy \n", "BNA0062 Renewable energy Bioenergy \n", "... ... ... \n", "BNA1867 Other or unspecified energy sources Waste \n", "BNA0492 NaN NaN \n", "BNA0997 NaN NaN \n", "BNA1864 NaN NaN \n", "BNA1865 NaN NaN \n", "\n", " energy_source_level_3 company \\\n", "BNA0012a Biomass and biogas Sappi Alfeld GmbH \n", "BNA0021 Biomass and biogas Heizkraftwerk Altenstadt GmbH & Co. KG \n", "BNA0027 Biomass and biogas Zellstoff Stendal GmbH \n", "BNA0055 Biomass and biogas Pfleiderer Baruth GmbH \n", "BNA0062 Biomass and biogas Sonae Arauco Beeskow GmbH \n", "... ... ... \n", "BNA1867 NaN AVG Köln mbH \n", "BNA0492 NaN RAG Anthrazit Ibbenbüren GmbH \n", "BNA0997 NaN STEAG New Energies GmbH \n", "BNA1864 NaN KÄMMERER Energie GmbH \n", "BNA1865 NaN KÄMMERER Energie GmbH \n", "\n", " name postcode city \\\n", "BNA0012a Werkskraftwerk Sappi Alfeld 31061 Alfeld \n", "BNA0021 HKW Altenstadt 86972 Altenstadt \n", "BNA0027 Zellstoff Stendal GmbH 39596 Arneburg \n", "BNA0055 UTB 15837 Baruth/Mark \n", "BNA0062 BHW Beeskow 15848 Beeskow \n", "... ... ... ... \n", "BNA1867 AVG Köln 50735 Köln \n", "BNA0492 RAG Anthrazit Ibbenbüren GmbH 49477 Ibbenbüren \n", "BNA0997 HKW Fenne, Grubengaskraftwerk 66333 Völklingen-Fenne \n", "BNA1864 Turbine 4 49084 Osnabrück \n", "BNA1865 Turbine 5 49084 Osnabrück \n", "\n", " street state \\\n", "BNA0012a Mühlenmarsch 1 Niedersachsen \n", "BNA0021 Triebstraße 90 Bayern \n", "BNA0027 Goldbecker Straße 1 Sachsen-Anhalt \n", "BNA0055 An der Birkenpfuhlheide 3 Brandenburg \n", "BNA0062 NaN Brandenburg \n", "... ... ... \n", "BNA1867 Geestemünder Straße 23 Nordrhein-Westfalen \n", "BNA0492 NaN Nordrhein-Westfalen \n", "BNA0997 NaN Saarland \n", "BNA1864 Römereschstrasse 33 Niedersachsen \n", "BNA1865 Römereschstrasse 33 Niedersachsen \n", "\n", " block ... date efficiency_source source_type \\\n", "BNA0012a Turbine 5 ... NaN NaN NaN \n", "BNA0021 NaN ... NaN NaN NaN \n", "BNA0027 - ... NaN NaN NaN \n", "BNA0055 NaN ... NaN NaN NaN \n", "BNA0062 NaN ... NaN NaN NaN \n", "... ... ... ... ... ... \n", "BNA1867 Turbosatz 2 ... NaN NaN NaN \n", "BNA0492 EVA ... NaN NaN NaN \n", "BNA0997 Gasmotorenanlage Fenne ... NaN NaN NaN \n", "BNA1864 NaN ... NaN NaN NaN \n", "BNA1865 NaN ... NaN NaN NaN \n", "\n", " efficiency_intercept efficiency_slope efficiency_literature \\\n", "BNA0012a 0.380 0.0000 0.3800 \n", "BNA0021 0.380 0.0000 0.3800 \n", "BNA0027 0.380 0.0000 0.3800 \n", "BNA0055 0.380 0.0000 0.3800 \n", "BNA0062 0.380 0.0000 0.3800 \n", "... ... ... ... \n", "BNA1867 0.330 0.0000 0.3300 \n", "BNA0492 0.330 0.0000 0.3300 \n", "BNA0997 -2.358 0.0014 0.4462 \n", "BNA1864 NaN NaN NaN \n", "BNA1865 NaN NaN NaN \n", "\n", " lat lon eic_code_plant eic_code_block \n", "BNA0012a 51.984761 9.822831 NaN NaN \n", "BNA0021 47.797140 10.858740 NaN NaN \n", "BNA0027 52.727130 12.011150 NaN NaN \n", "BNA0055 52.077780 13.517250 NaN NaN \n", "BNA0062 52.182690 14.258410 NaN NaN \n", "... ... ... ... ... \n", "BNA1867 50.999620 6.940959 NaN NaN \n", "BNA0492 52.285880 7.746130 NaN NaN \n", "BNA0997 49.249018 6.879244 NaN NaN \n", "BNA1864 52.294036 8.022962 NaN NaN \n", "BNA1865 52.294036 8.022962 NaN NaN \n", "\n", "[909 rows x 75 columns]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# read energy source level allocation table\n", "energy_source_level_allocator = pd.read_csv(os.path.join('input', 'energy_source_level_allocator.csv'),\n", " sep=',', # CSV field separator, default is ','\n", " decimal='.', # Decimal separator, default is '.')\n", " index_col='fuel',\n", " encoding='utf8')\n", "plantlist = pd.merge(energy_source_level_allocator, plantlist,\n", " left_index = True,\n", " right_on='fuel',\n", " how='outer')\n", "\n", "plantlist" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 8. Define final output" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name_bnetzablock_bnetzaname_ubacompanystreetpostcodecitystatecountrycapacity_net_bnetza...efficiency_estimateenergy_source_level_1energy_source_level_2energy_source_level_3eegnetwork_nodevoltagenetwork_operatormerge_commentcomment
BNA0012aWerkskraftwerk Sappi AlfeldTurbine 5NaNSappi Alfeld GmbHMühlenmarsch 131061AlfeldNiedersachsenDE13.0...0.38Renewable energyBioenergyBiomass and biogasyesNaNMittelspannung (MS)Überlandwerk Leinetal GmbHNaNNaN
BNA0021HKW AltenstadtNaNNaNHeizkraftwerk Altenstadt GmbH & Co. KGTriebstraße 9086972AltenstadtBayernDE9.8...0.38Renewable energyBioenergyBiomass and biogasyesNaNMittelspannung (MS)LEW Verteilnetz GmbHNaNNaN
BNA0027Zellstoff Stendal GmbH-ArneburgZellstoff Stendal GmbHGoldbecker Straße 139596ArneburgSachsen-AnhaltDE138.9...0.38Renewable energyBioenergyBiomass and biogasyesDE0075603959600000E00000000013559 DE0075603959...USp. Mittel- / Niederspannung (MS/NS)Infrastrukturbetrieb der Stadt ArneburgList matching type: Single UBA power plant ass...NaN
BNA0055UTBNaNNaNPfleiderer Baruth GmbHAn der Birkenpfuhlheide 315837Baruth/MarkBrandenburgDE16.0...0.38Renewable energyBioenergyBiomass and biogasyesUTB/Eon-edisMittelspannung (MS)E.DIS AGNaNNaN
BNA0062BHW BeeskowNaNNaNSonae Arauco Beeskow GmbHNaN15848BeeskowBrandenburgDE18.3...0.38Renewable energyBioenergyBiomass and biogasyesUmspannwerk Beeskow der E.DIS AGHochspannung (HS)E.DIS AGNaNNaN
\n", "

5 rows × 37 columns

\n", "
" ], "text/plain": [ " name_bnetza block_bnetza name_uba \\\n", "BNA0012a Werkskraftwerk Sappi Alfeld Turbine 5 NaN \n", "BNA0021 HKW Altenstadt NaN NaN \n", "BNA0027 Zellstoff Stendal GmbH - Arneburg \n", "BNA0055 UTB NaN NaN \n", "BNA0062 BHW Beeskow NaN NaN \n", "\n", " company street \\\n", "BNA0012a Sappi Alfeld GmbH Mühlenmarsch 1 \n", "BNA0021 Heizkraftwerk Altenstadt GmbH & Co. KG Triebstraße 90 \n", "BNA0027 Zellstoff Stendal GmbH Goldbecker Straße 1 \n", "BNA0055 Pfleiderer Baruth GmbH An der Birkenpfuhlheide 3 \n", "BNA0062 Sonae Arauco Beeskow GmbH NaN \n", "\n", " postcode city state country capacity_net_bnetza \\\n", "BNA0012a 31061 Alfeld Niedersachsen DE 13.0 \n", "BNA0021 86972 Altenstadt Bayern DE 9.8 \n", "BNA0027 39596 Arneburg Sachsen-Anhalt DE 138.9 \n", "BNA0055 15837 Baruth/Mark Brandenburg DE 16.0 \n", "BNA0062 15848 Beeskow Brandenburg DE 18.3 \n", "\n", " ... efficiency_estimate energy_source_level_1 \\\n", "BNA0012a ... 0.38 Renewable energy \n", "BNA0021 ... 0.38 Renewable energy \n", "BNA0027 ... 0.38 Renewable energy \n", "BNA0055 ... 0.38 Renewable energy \n", "BNA0062 ... 0.38 Renewable energy \n", "\n", " energy_source_level_2 energy_source_level_3 eeg \\\n", "BNA0012a Bioenergy Biomass and biogas yes \n", "BNA0021 Bioenergy Biomass and biogas yes \n", "BNA0027 Bioenergy Biomass and biogas yes \n", "BNA0055 Bioenergy Biomass and biogas yes \n", "BNA0062 Bioenergy Biomass and biogas yes \n", "\n", " network_node \\\n", "BNA0012a NaN \n", "BNA0021 NaN \n", "BNA0027 DE0075603959600000E00000000013559 DE0075603959... \n", "BNA0055 UTB/Eon-edis \n", "BNA0062 Umspannwerk Beeskow der E.DIS AG \n", "\n", " voltage \\\n", "BNA0012a Mittelspannung (MS) \n", "BNA0021 Mittelspannung (MS) \n", "BNA0027 USp. Mittel- / Niederspannung (MS/NS) \n", "BNA0055 Mittelspannung (MS) \n", "BNA0062 Hochspannung (HS) \n", "\n", " network_operator \\\n", "BNA0012a Überlandwerk Leinetal GmbH \n", "BNA0021 LEW Verteilnetz GmbH \n", "BNA0027 Infrastrukturbetrieb der Stadt Arneburg \n", "BNA0055 E.DIS AG \n", "BNA0062 E.DIS AG \n", "\n", " merge_comment comment \n", "BNA0012a NaN NaN \n", "BNA0021 NaN NaN \n", "BNA0027 List matching type: Single UBA power plant ass... NaN \n", "BNA0055 NaN NaN \n", "BNA0062 NaN NaN \n", "\n", "[5 rows x 37 columns]" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "# Merge uba_name_aggregate and uba_name\n", "plantlist.loc[plantlist['uba_name_aggregate'].isnull(), 'uba_name_aggregate'] = plantlist['uba_name'][plantlist['uba_name_aggregate'].isnull()]\n", "\n", "# Drop columns not relevant for output\n", "colsToDrop = ['bnetza_id',\n", " 'capacity',\n", " 'uba_name',\n", " 'uba_capacity_original',\n", " 'uba_chp_capacity_original',\n", " 'uba_city',\n", " 'uba_commissioned',\n", " 'uba_company',\n", " 'uba_company_aggregate',\n", " 'uba_fuel',\n", " 'uba_postcode',\n", " 'uba_state',\n", " 'uba_technology',\n", " 'uba_technology_aggregate',\n", " 'retrofit',\n", " 'uba_commissioned_1',\n", " 'uba_commissioned_2',\n", " 'uba_commissioned_3',\n", " 'commissioned_1',\n", " 'commissioned_2',\n", " 'commissioned_3',\n", " 'fuel_basis',\n", " 'fuel_multiple1',\n", " 'fuel_multiple2',\n", " 'efficiency_gross',\n", " 'efficiency_intercept',\n", " 'efficiency_slope',\n", " 'source_type',\n", " 'date'\n", " ]\n", "plantlist = plantlist.drop(colsToDrop, axis=1)\n", "\n", "# Rename columns\n", "plantlist = plantlist.rename(columns={'commissioned': 'commissioned_original',\n", " 'commissioned_float': 'commissioned',\n", " 'retrofit_float': 'retrofit',\n", " 'capacity_float': 'capacity_net_bnetza',\n", " 'uba_capacity': 'capacity_gross_uba',\n", " 'uba_chp_capacity': 'chp_capacity_uba',\n", " 'efficiency_net': 'efficiency_data',\n", " 'efficiency_literature': 'efficiency_estimate',\n", " 'uba_name_aggregate': 'name_uba',\n", " 'name': 'name_bnetza',\n", " 'block': 'block_bnetza',\n", " 'country_code': 'country',\n", " 'fuel': 'energy_source',\n", " })\n", "\n", "# Sort columns\n", "columns_sorted = [\n", " 'name_bnetza',\n", " 'block_bnetza',\n", " 'name_uba',\n", " 'company',\n", " 'street',\n", " 'postcode',\n", " 'city',\n", " 'state',\n", " 'country',\n", " 'capacity_net_bnetza',\n", " 'capacity_gross_uba',\n", " 'energy_source',\n", " 'technology',\n", " 'chp',\n", " 'chp_capacity_uba',\n", " 'commissioned',\n", " 'commissioned_original',\n", " 'retrofit',\n", " 'shutdown',\n", " 'status',\n", " 'type',\n", " 'lat',\n", " 'lon',\n", " 'eic_code_plant',\n", " 'eic_code_block',\n", " 'efficiency_data',\n", " 'efficiency_source',\n", " 'efficiency_estimate',\n", " 'energy_source_level_1',\n", " 'energy_source_level_2',\n", " 'energy_source_level_3',\n", " 'eeg',\n", " 'network_node',\n", " 'voltage',\n", " 'network_operator',\n", " 'merge_comment',\n", " 'comment']\n", "plantlist = plantlist.reindex(columns=columns_sorted)\n", "\n", "plantlist.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8.1 Round values" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "scrolled": false }, "outputs": [], "source": [ "# Round capacity values as well as the efficiency estimate to five decimals-\n", "plantlist.capacity_net_bnetza = plantlist.capacity_net_bnetza.round(decimals=5)\n", "plantlist.capacity_gross_uba = plantlist.capacity_gross_uba.round(decimals=5) \n", "plantlist.efficiency_estimate = plantlist.efficiency_estimate.round(decimals=5)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## 8.2 Verification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8.2.1 Capacities by plant status" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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KCERERERAVJSUkhJSTmuLCkpicGDBwfOp06dWmLbwYMHH1evd+/e9O594ruL3nvvvbIJtoqolEu2AJxzO5xzz5Z23cxq4t8TMsB7k9Xv8Ccx3wOpwFtmtg5/gtLMOZeHf8/JLC+J+GeQofQHnvL6SgDGAGHAG2aWBawGnnHO7QOGmlm2ma3Fv3/kk9I6PYXx+BOPpUDR1zi8DGwAVnkb5f/KiUllXyDbW9bVDP8eGBERERGRSsn82ymkqqrZ+Ep35NstoQ5DREREQmTjxo00b9481GHIOaaknyszy3TOJRWvW2lnSERERERE5NynhEREREREREJGCUkV57tIr/0VERERkdBRQiIiIiIiIiGjhEREREREqpSFCxeydOnSwPnkyZN57TW9mDRUKvN3SERERESkgkWNmFWm/eWM61Gm/QWroKCA6tVL/lV34cKF1K1bl2uuuQaAQYMGVWRoUoxmSEREREQk5J5++mliY2OJjY1lwoQJ5OTk0KxZM/r3709cXBy9e/fm8OHDAGRmZtKxY0datWpFSkoK3377LQCdOnXioYceomPHjjz77LN89NFHtG3blsTERLp168auXbvIyclh8uTJPPPMMyQkJJCens7o0aMZP358oI+0tDTatGlDdHQ06enpABw+fJj//u//Ji4ujr59+9K2bVtWrlwZmod1jlFCIiIiIiIhlZmZyZQpU1i+fDlffPEFL730Ej/88AObN29m4MCBrFu3jvr16/PCCy+Qn5/P4MGDmTFjBpmZmQwYMICHH3440Ne+fftYtGgRv/vd77j22mv54osvWL16Nb/4xS948skniYqKYtCgQTzwwAOsWbOGDh06nBBPQUEBGRkZTJgwgccffxyAF154gQsuuIB169bx6KOPkpmZWWHP51ynJVsiIiIiElJLlizh1ltvpU6dOgD06tWL9PR0LrnkEtq3bw9Av379mDhxItdffz3Z2dlcd911ABQWFtK4ceNAX3379g0c79ixg759+/Ltt9/y448/0rRp06Di6dWrFwCtWrUiJycnEOOQIUMAiI2NJS4u7uxuWgKUkIiIiIhISDnnSiw3sxPOnXPExMSwbNmyEtscS2oABg8ezIMPPkjPnj1ZuHAho0ePDiqemjVrAhAWFkZBQcFJY5SzpyVbIiIiIhJSycnJzJw5k8OHD3Po0CHef/99OnTowNdffx1I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BUYA/cwsH/gXMKZoR865tWa2GlgP/AP/sq9TeRx4y1vmtQj4upR6h4AYM8vEv/ysaGKBcy7PzO7CvwSrOrACmOw9i3uBOWb2PZBRpNmT+PfcPAh8VqS878nuU0RERKSyycrKYvjw4VSrVo0aNWowadIkevcu+aWst912G6+99hoJCQm0bt06sPSqYcOGtG/fntjYWG644QaefPJJPvvsM3w+H9HR0YGkIzw8nClTptCnTx8KCgpo3bo1gwYNAqBt27bs2rUrMCMSFxfHhRdeWOJMi5QdO9m0lYSemdV1zh309t88D2xxzj1TVv3XbAIxmsIAACAASURBVHyla9x/wln1MXxfLX47+YSVYSIiIvITsHHjRpo3L9tX/YqU9HNlZpneC6SOoy+1V353ezNN6/Ev0/priOMRERERESkz5blkS8qANxtSZjMiIiIiIiKViRKSKs53UQQrx/UIdRgiIiIiUkVpyZaIiIiIiISMEhIREREREQkZJSQiIiIiIhIySkhERERERCRktKldRERERAKeH/TZqSudhjP9VllUVBQrV64kMjIyqPr79u3jb3/7G/fee2+J11NTU7nppptK/eBiWVuzZg07d+7kxhtvrJDxfso0QyIiIiIiP3n79u3jhRdeCHUYAWvWrGH27NmhDgOAgoKCoOoVFhaWcyQlU0IiIiIiIiF16NAhevToQXx8PLGxsUybNg2Av/zlL7Rs2RKfz8emTZsAGD16NOPHjw+0jY2NJScnhxEjRrB161YSEhIYPnw4zjnuu+8+WrRoQY8ePfjuu+8CbebPn09iYiI+n48BAwZw5MgRMjIy6NWrFwAffPABtWrV4scffyQvL4/LLrsMgE6dOpGWlkabNm2Ijo4mPT29xPv58ccfeeyxx5g2bRoJCQlMmzaNQ4cOMWDAAFq3bk1iYiIffPABAFOnTuWWW27h5ptvpmnTpjz33HM8/fTTJCYmcvXVV7N3797A2EOHDuWaa64hNjaWjIwMAPbu3cstt9xCXFwcV199NevWrQs8p4EDB9K9e3fuvPNOcnJy6NChAy1btqRly5YsXboUgIULF9K5c2d++ctf4vP5ePTRR3n22WcD9/Lwww8zceLEs/wXPjkt2RIRERGRkJozZw5NmjRh1qxZAOTm5pKWlkZkZCSrVq3ihRdeYPz48bz88sul9jFu3Diys7NZs2YN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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pivot_status_capacity = pd.pivot_table(\n", " plantlist, \n", " values='capacity_net_bnetza',\n", " columns='status',\n", " index='energy_source', \n", " aggfunc=np.sum\n", " )\n", "pivot_status_capacity.sort_values(by='operating', inplace=True, ascending=0)\n", "pivot_status_capacity_plot=pivot_status_capacity.plot(kind='barh', \n", " stacked=True,\n", " legend=True, \n", " figsize=(12, 6))\n", "pivot_status_capacity_plot.set_xlabel(\"MW\")\n", "pivot_status_capacity_plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8.2.2 Power plant age" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/EAAAJcCAYAAACxNCQRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde5yXY/748de9M6l0lGTR2uKR7TDHms4niWpJJd9WRAdLB6FNrFpflRy2JfINq0UkQqvdDuTQkk6KzGgqNZE0KSwddNJBM3P//mh8fo2mFDNNn5nX8/GYx9z3dV/Xdb+vj08ej/dc133dQRiGSJIkSZKkE9+vijoASZIkSZJ0dEziJUmSJEmKEibxkiRJkiRFCZN4SZIkSZKihEm8JEmSJElRwiRekiRJkqQoEVvUARSWqlWrhjVq1CjqMCRJkiRJOiZpaWmbwzA8Lb9rxTaJr1GjBqmpqUUdhiRJkiRJxyQIgvWHu+ZyekmSJEmSooRJvCRJkiRJUcIkXpIkSZKkKFFsn4mXJEmSpBPB/v372bhxI3v37i3qUHSCKVOmDNWrV6dUqVJH3cYkXpIkSZIK0caNG6lQoQI1atQgCIKiDkcniDAM2bJlCxs3bqRmzZpH3c7l9JIkSZJUiPbu3cupp55qAq88giDg1FNPPeYVGoWaxAdBMDgIgpVBEHwUBMGLQRCUCYKgShAE/wmCYE3u71MOqj8sCIJPgyD4OAiC9geVNwiCYEXutXGB335JkiRJUcQURvn5Od+LQkvigyA4C7gZSAnDMA6IAboDQ4G3wzCsBbyde04QBHVzr9cDOgB/D4IgJre7x4G+QK3cnw6FFbckSZIkSSeqwl5OHwuUDYIgFjgZ+BLoDDybe/1ZoEvucWfgpTAM94VhuA74FGgUBMEZQMUwDBeHYRgCkw5qI0mSJEk6zrKysoo6hMM6kWMrCIWWxIdh+AUwBvgc+ArYHobhbOD0MAy/yq3zFVAtt8lZwIaDutiYW3ZW7vGPyyVJkiRJR+H555+nUaNGJCUl0a9fP7Kzsylfvjx33HEHiYmJNGnShK+//hqATZs2cfnll9OwYUMaNmzIu+++C8DIkSPp27cv7dq1o2fPnmzatImLLrqI+vXr069fP37729+yefNm7rzzTv7v//4vcu877riDcePG5RvXV199RatWrUhKSiIuLo4FCxYA8OKLLxIfH09cXBy33357pH758uUjx1OnTqV3794A9O7dm1tuuYU2bdpw++238+mnn3LhhReSmJhI/fr1Wbt2LQAPPPAADRs2JCEhgREjRhTcB3wcFeZy+lM4MLteEzgTKBcEwdVHapJPWXiE8vzu2TcIgtQgCFI3bdp0rCFLkiRJUrGTkZHBlClTePfdd0lPTycmJobJkyfz3Xff0aRJE5YtW0arVq148sknARg0aBCDBw/mgw8+4F//+hfXXXddpK+0tDRmzJjBCy+8wF133cUFF1zAhx9+yGWXXcbnn38OwB//+EeeffbA4uucnBxeeuklevTokW9sL7zwAu3btyc9PZ1ly5aRlJTEl19+ye23386cOXNIT0/ngw8+YPr06T85zk8++YS33nqLBx98kB49ejBw4ECWLVvGokWLOOOMM5g9ezZr1qxhyZIlpKenk5aWxvz583/px3vcFeYr5i4E1oVhuAkgCIJ/A82Ar4MgOCMMw69yl8p/k1t/I/Cbg9pX58Dy+425xz8uP0QYhk8ATwCkpKTkm+hLkiRJUkny9ttvk5aWRsOGDQHYs2cP1apV46STTqJjx44ANGjQgP/85z8AvPXWW6xatSrSfseOHezcuROATp06UbZsWQAWLlzItGnTAOjQoQOnnHJgz/IaNWpw6qmnsnTpUr7++muSk5M59dRT842tYcOGXHvttezfv58uXbqQlJTEnDlzOP/88znttNMA6NGjB/Pnz6dLlyM/Vd2tWzdiYmLYuXMnX3zxBZdddhlw4F3sALNnz2b27NkkJycDsGvXLtasWUOrVq2O5eMscoWZxH8ONAmC4GRgD9AWSAW+A3oBo3N/z8itPxN4IQiChzgwc18LWBKGYXYQBDuDIGgCvA/0BB4pxLglSZIkqdgIw5BevXrx17/+NU/5mDFjIrujx8TERJ4lz8nJYfHixZFk/WDlypXL0+/hXHfddUycOJH//ve/XHvttYet16pVK+bPn8+sWbO45ppruO2226hYseJh6x+8m/uPX832Q2yHiysMQ4YNG0a/fv0O2380KMxn4t8HpgIfAity7/UEB5L3i4IgWANclHtOGIYrgX8Cq4A3gIFhGGbndjcAeIoDm92tBV4vrLglSZIkqThp27YtU6dO5ZtvDiyC3rp1K+vXrz9s/Xbt2vHoo49GztPT0/Ot16JFC/75z38CB2a5v/3228i1yy67jDfeeIMPPviA9u3b59seYP369VSrVo3rr7+eP/7xj3z44Yc0btyYefPmsXnzZrKzs3nxxRdp3bo1AKeffjoZGRnk5OREVgH8WMWKFalevXpkCf6+ffvYvXs37du35+mnn2bXrl0AfPHFF5HPJJoU5kw8YRiOAH68W8A+DszK51f/XuDefMpTgbgCD1CSJEmSirm6detyzz330K5dO3JycihVqhSPPfbYYeuPGzeOgQMHkpCQQFZWFq1atWL8+PGH1BsxYgRXXnklU6ZMoXXr1pxxxhlUqFABgJNOOok2bdpQuXJlYmJiDmn7g7lz5/LAAw9QqlQpypcvz6RJkzjjjDP461//Sps2bQjDkIsvvpjOnTsDMHr0aDp27MhvfvMb4uLiIgn5jz333HP069eP4cOHU6pUKV5++WXatWtHRkYGTZs2BQ5skvf8889TrVq1fPs4UQVHWgIRzVJSUsLU1NSiDkOSJElSCZeRkUGdOnWKOowCt2/fPmJiYoiNjWXx4sUMGDAgMmufk5ND/fr1efnll6lVq1YRR3piy+/7EQRBWhiGKfnVL9SZeEmSJElS8fT555/zhz/8gZycHE466aTI7varVq2iY8eOXHbZZSbwhcAkXpIkSZJ0zGrVqsXSpUsPKa9bty6fffZZnrIVK1ZwzTXX5CkrXbo077//fqHGWByZxEuSJEmSClV8fPxhN8jTsSm03eklSZIkSVLBMomXJEmSJClKmMRLkiRJkhQlTOIlSZIkSYoSJvGSJEmSVMzFxMSQlJREYmIi9evXZ9GiRQB8+eWX/M///E8RR1c4atSowebNmw8pL1++fL71hw8fzltvvVXYYf1i7k4vSZKkAlFj6KxDyjJHX1IEkUgntvz+rfwSR/PvrGzZspHd4d98802GDRvGvHnzOPPMM5k6dWqBxhOtRo0aVdQhHBVn4iVJklQgFlLxkB9JJ54dO3ZwyimnAJCZmUlcXBwAe/fupU+fPsTHx5OcnMw777wDwMSJE+nSpQuXXnopNWvW5NFHH+Whhx4iOTmZJk2asHXrVgCefPJJGjZsSGJiIpdffjm7d+8G4OWXXyYuLo7ExERatWoFwMqVK2nUqBFJSUkkJCSwZs2aQ+IcMGAAKSkp1KtXjxEjRkTKa9SowYgRI6hfvz7x8fGsXr0agC1bttCuXTuSk5Pp168fYRge9jMYMmQI9evXp23btmzatAmA3r17R/6g8fbbb5OcnEx8fDzXXnst+/btA+C1116jdu3atGjRgptvvpmOHTsCsGTJEpo1a0ZycjLNmjXj448/PupxHiuTeEmSJEkq5vbs2UNSUhK1a9fmuuuu48477zykzmOPPQbAihUrePHFF+nVqxd79+4F4KOPPuKFF15gyZIl3HHHHZx88sksXbqUpk2bMmnSJAC6du3KBx98wLJly6hTpw4TJkwADsxwv/nmmyxbtoyZM2cCMH78eAYNGkR6ejqpqalUr179kHjuvfdeUlNTWb58OfPmzWP58uWRa1WrVuXDDz9kwIABjBkzBoC77rqLFi1asHTpUjp16sTnn3+e72fx3XffUb9+fT788ENat27NXXfdlef63r176d27N1OmTGHFihVkZWXx+OOPs3fvXvr168frr7/OwoULI8k/QO3atZk/fz5Lly5l1KhR/OUvfznqcR4rk3hJkiRJKuZ+WE6/evVq3njjDXr27HnITPXChQu55pprgANJ6W9/+1s++eQTANq0aUOFChU47bTTqFSpEpdeeikA8fHxZGZmAgcS/ZYtWxIfH8/kyZNZuXIlAM2bN6d37948+eSTZGdnA9C0aVPuu+8+/va3v7F+/XrKli17SMz//Oc/qV+/PsnJyaxcuZJVq1ZFrnXt2hWABg0aRO4/f/58rr76agAuueSSyGqDH/vVr37FFVdcAcDVV1/NwoUL81z/+OOPqVmzJueddx4AvXr1Yv78+axevZpzzjmHmjVrAnDllVdG2mzfvp1u3boRFxfH4MGDI2M/mnEeK5N4SZIkSSpBmjZtyubNm/PMJANHXH5eunTpyPGvfvWryPmvfvUrsrKygAPL0R999FFWrFjBiBEjIrP448eP55577mHDhg0kJSWxZcsWrrrqKmbOnEnZsmVp3749c+bMyXO/devWMWbMGN5++22WL1/OJZdcEunv4HhiYmIi9wcIguCYP48ftznc53Ckz+fOO++kTZs2fPTRR7zyyiuRWH9qnD+HSbwkSZIklSCrV68mOzubU089NU95q1atmDx5MgCffPIJn3/+Ob/73e+Out+dO3dyxhlnsH///kg/AGvXrqVx48aMGjWKqlWrsmHDBj777DPOOeccbr75Zjp16pRnqTwceG6/XLly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yRIuv/xypk+fTocOHY5yxHnFxsaSk5MTOd+7dy8AOTk5VK5cOTKe9PR0MjIyDmk/a9YsBg4cSFpaGg0aNCArK+tnxVFQTOIlSZIkqRhr27Ytu3fvjuzonp2dzZAhQ+jduzcnn3wyFSpUYOfOnUfVz9SpU/nmmwN7k2/dupX169cfUyytWrVi+vTp7N69m++++45p06bRsmVLvvzyS04++WSuvvpqbr31Vj788EN27drF9u3bufjii3n44YdJT08/9sEDp59+Ot988w1btmxh3759vPrqq8CBRwpq1qzJyy+/DBz4A8OyZcvytM3JyWHDhg20adOG+++/n23btrFr166fFUdBKexn4iVJkiRJRSgIAqZNm8YNN9zA3XffTU5ODhdffDH33XcfAG3atGH06NEkJSUxbNiww/ZTt25d7rnnHtq1a0dOTg6lSpXiscce47e//e1Rx1K/fn169+5No0aNALjuuutITk7mzTff5LbbbuNXv/oVpUqV4vHHH2fnzp107tyZvXv3EoYhY8eO/VnjL1WqVGTTvZo1a1K7du3ItcmTJzNgwADuuece9u/fT/fu3UlMTIxcz87O5uqrr2b79u2EYcjgwYOpXLnyz4qjoASHW84Q7VJSUsIfLxmRJElS4dk4dMEhZdVHtyyCSKQTS0ZGBnXq1CnqMHSCyu/7EQRBWhiG+e0v53J6SZIkSZKihUm8JEmSJElRwiRekiRJkqQoYRIvSZIkSVKUMImXJEmSJClKmMRLkiRJkhQlTOIlSZIkqZjbuHEjnTt3platWpx77rkMGjSI77//HoD09HRee+21SN2RI0cyZsyYArv36tWrSUpKIjk5mbVr1x5z+4KOJ9rFFnUAkiRJklSS/Pqd9ALt779tko54PQxDunbtyoABA5gxYwbZ2dn07duXO+64gwceeID09HRSU1O5+OKLCySe7OxsYmJiIufTp0+nc+fO3HXXXQXSf0nnTLwkSZIkFWNz5syhTJky9OnTB4CYmBjGjh3L008/zY4dOxg+fDhTpkwhKSmJKVOmALBq1SrOP/98zjnnHMaNGxfp6/nnn6dRo0YkJSXRr18/srOzAShfvjzDhw+ncePGLF68OFL/tdde4+GHH+app56iTZs2ZGZmEhcXF7k+ZswYRo4cCcDatWvp0KEDDRo0oGXLlqxevfqQsYwbN466deuSkJBA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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plantlist_filtered = plantlist \n", "pivot_age_capacity = pd.pivot_table(\n", " plantlist_filtered, \n", " values='capacity_net_bnetza',\n", " columns='energy_source',\n", " index='commissioned', \n", " aggfunc=np.sum,\n", " dropna=True\n", " )\n", "\n", "pivot_age_capacity_plot=pivot_age_capacity.plot(kind='bar', \n", " stacked=True,\n", " legend=True, \n", " figsize=(17, 10))\n", "pivot_age_capacity_plot.set_ylabel(\"MW\")\n", "\n", "xaxis_labels = pivot_age_capacity.index.astype(int)\n", "pivot_age_capacity_plot.set_xticklabels(xaxis_labels)\n", "\n", "\n", "pivot_age_capacity_plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8.2.3 Block size vs year of commissioning" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This chart is suitable to check outliers of commissioning years and block sizes. \n", "In theory, there should be no unexpected values, e.g. all commissioning years should be greater than 1900. \n", "Block sizes above 2000 MW are also unlikely." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plantlist_for_plot = plantlist.copy(deep=True)\n", "plantlist_for_plot['capacity_float'] = pd.to_numeric(plantlist_for_plot['capacity_net_bnetza'], \n", " errors='coerce')\n", "plantlist_for_plot['commissioned_float'] = pd.to_numeric(plantlist_for_plot['commissioned'], \n", " errors='coerce')\n", "\n", "age_capacity_plot = plantlist_for_plot.plot(kind='scatter', x='commissioned_float', y='capacity_float', figsize=(17, 10))\n", "age_capacity_plot.set_xlabel(\"commissioned\")\n", "age_capacity_plot.set_ylabel(\"MW\")\n", "\n", "age_capacity_plot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8.3 Logical checks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8.3.1 Every power plant needs a capacity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "List all entries with zero capacity." ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name_bnetzablock_bnetzaname_ubacompanystreetpostcodecitystatecountrycapacity_net_bnetza...efficiency_estimateenergy_source_level_1energy_source_level_2energy_source_level_3eegnetwork_nodevoltagenetwork_operatormerge_commentcomment
BNA0490aGoldenbergFNaNRWE Power AGNaN50354HürthNordrhein-WestfalenDE0.0...0.3832Fossil fuelsLigniteNaNnoKnapsackHochspannung (HS)Westnetz GmbHNaNNaN
\n", "

1 rows × 37 columns

\n", "
" ], "text/plain": [ " name_bnetza block_bnetza name_uba company street postcode \\\n", "BNA0490a Goldenberg F NaN RWE Power AG NaN 50354 \n", "\n", " city state country capacity_net_bnetza ... \\\n", "BNA0490a Hürth Nordrhein-Westfalen DE 0.0 ... \n", "\n", " efficiency_estimate energy_source_level_1 energy_source_level_2 \\\n", "BNA0490a 0.3832 Fossil fuels Lignite \n", "\n", " energy_source_level_3 eeg network_node voltage \\\n", "BNA0490a NaN no Knapsack Hochspannung (HS) \n", "\n", " network_operator merge_comment comment \n", "BNA0490a Westnetz GmbH NaN NaN \n", "\n", "[1 rows x 37 columns]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plantlist[plantlist.capacity_net_bnetza == 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8.3.2 Commissioning Dates" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name_bnetzablock_bnetzaname_ubacompanystreetpostcodecitystatecountrycapacity_net_bnetza...efficiency_estimateenergy_source_level_1energy_source_level_2energy_source_level_3eegnetwork_nodevoltagenetwork_operatormerge_commentcomment
\n", "

0 rows × 37 columns

\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [name_bnetza, block_bnetza, name_uba, company, street, postcode, city, state, country, capacity_net_bnetza, capacity_gross_uba, energy_source, technology, chp, chp_capacity_uba, commissioned, commissioned_original, retrofit, shutdown, status, type, lat, lon, eic_code_plant, eic_code_block, efficiency_data, efficiency_source, efficiency_estimate, energy_source_level_1, energy_source_level_2, energy_source_level_3, eeg, network_node, voltage, network_operator, merge_comment, comment]\n", "Index: []\n", "\n", "[0 rows x 37 columns]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Show all Plants with commisioning dates below 1900 \n", "plantlist[plantlist['commissioned'] <= 1900]" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
name_bnetzablock_bnetzaname_ubacompanystreetpostcodecitystatecountrycapacity_net_bnetza...efficiency_estimateenergy_source_level_1energy_source_level_2energy_source_level_3eegnetwork_nodevoltagenetwork_operatormerge_commentcomment
BNA0059aHKW KasselTurbine 1NaNVolkswagen AGNaN34225BaunatalHessenDE12.20...NaNFossil fuelsNatural gasNaNnoAnlage AMittelspannung (MS)VW Kraftwerk GmbHNaNNaN
BNA0080LichterfeldeLichterfelde 2NaNVattenfall Europe Wärme AGOstpreußendamm 6112207BerlinBerlinDE144.00...NaNFossil fuelsNatural gasNaNnoLichterfeldeHochspannung (HS)Stromnetz Berlin GmbHList matching type: Single UBA power plant ass...NaN
BNA0118Heizkraftwerk SüdHeizkraftwerk SüdNaNEnergie- und Wasserversorgung Bonn/Rhein-Sieg ...NaN53121BonnNordrhein-WestfalenDE14.40...NaNFossil fuelsNatural gasNaNnoUmspannanlage Kessenich10Bonn Netz GmbHNaNNaN
BNA0140KW HastedtBlock 14NaNswb Erzeugung GmbH & Co. KGHastedter Osterdeich 25528207BremenBremenDE155.00...NaNFossil fuelsNatural gasNaNnoDE0072032820700000000000000232556Hochspannung (HS)Wesernetz Bremen GmbHNaNNaN
BNA0288HKW NiederradBlock 2NaNMainova AGLyoner Straße 960528Frankfurt am MainHessenDE56.00...NaNFossil fuelsNatural gasNaNnoUW GoldsteinstraßeHochspannung (HS)NRM Netzdienste Rhein-Main GmbHList matching type: UBA capacity distributed p...NaN
BNA0681Freimann GT 11NaNSWM Services GmbHNaN80807MünchenBayernDE80.00...NaNFossil fuelsNatural gasNaNnoUW FreimannHochspannung (HS)SWM Infrastruktur GmbHNaNNaN
BNA0682Freimann GT 22NaNSWM Services GmbHNaN80807MünchenBayernDE80.00...NaNFossil fuelsNatural gasNaNnoUW FreimannHochspannung (HS)SWM Infrastruktur GmbHNaNNaN
BNA0735ThyrowGT FNaNLausitz Energie Kraftwerke AGNaN15806NunsdorfBrandenburgDE37.50...NaNFossil fuelsNatural gasNaNnoThyrowHochspannung (HS)50Hertz Transmission GmbHList matching type: UBA capacity distributed p...NaN
BNA0736ThyrowGT GNaNLausitz Energie Kraftwerke AGNaN15806NunsdorfBrandenburgDE37.50...NaNFossil fuelsNatural gasNaNnoThyrowHochspannung (HS)50Hertz Transmission GmbHList matching type: UBA capacity distributed p...NaN
BNA0737ThyrowGT HNaNLausitz Energie Kraftwerke AGNaN15806NunsdorfBrandenburgDE37.50...NaNFossil fuelsNatural gasNaNnoThyrowHochspannung (HS)50Hertz Transmission GmbHList matching type: UBA capacity distributed p...NaN
BNA0799Heizkraftwerk Pforzheim GmbHGaskesselanlageNaNHeizkraftwerk Pforzheim GmbHHohwiesenweg 1575175PforzheimBaden-WürttembergDE11.30...NaNFossil fuelsNatural gasNaNnoHohwiesenwegHochspannung (HS)Stadtwerke Pforzheim GmbH und Co. KGNaNNaN
BNA0913GuD Anlage SpreetalGuDNaNAlpiq Spreetal GmbHSüdstraße2979SpreetalSachsenDE50.00...NaNFossil fuelsNatural gasNaNno110kV Umspannwerk Schwarze PumpeHochspannung (HS)Mitteldeutsche Netzgesellschaft Strom mbHNaNNaN
BNA0918aDow StadeKraftwärmekopplungsanlageNaNDow Deutschland Anlagengesellschaft mbHBützflethersand21683StadeNiedersachsenDE190.00...NaNFossil fuelsNatural gasNaNnoUW GötzdorfHöchstspannung (HöS)TenneT TSO GmbHNaNNaN
BNA0922aGuD-Ikw StaßfurtNaNNaNCIECH Energy Deutschland GmbHAthenslebener Weg 5739418StaßfurtSachsen-AnhaltDE9.00...NaNFossil fuelsNatural gasNaNnoUW NORDHochspannung (HS)HSN Magdeburg GmbHNaNNaN
BNA0933Heizkraftwerk Stuttgart-GaisburgGAI GT 13NaNEnBW Energie Baden-Württemberg AGLangwiesenweg 2370376StuttgartBaden-WürttembergDE55.00...NaNFossil fuelsNatural gasNaNnoGaisburgHochspannung (HS)Netze BW GmbHNaNNaN
BNA1337aHeizkraftwerkHeizkraftwerkNaNDS Smith Paper Deutschland GmbHWeichertstr. 763741AschaffenburgBayernDE27.00...NaNFossil fuelsNatural gasNaNnoNaNMittelspannung (MS)Aschaffenburger Versorgungs GmbHNaNNaN
BNA0355GrafenrheinfeldKKGNaNE.ON Kernkraft GmbHNaN97506GrafenrheinfeldBayernDE1275.00...NaNNuclearNaNNaNnoGrafenrheinfeldHöchstspannung (HöS)TenneT TSO GmbHNaNNaN
BNA0161BrunsbüttelGT ANaNVattenfall Europe Nuclear Energy GmbHOtto Hahn Str. 7625541BrunsbüttelSchleswig-HolsteinDE63.50...NaNFossil fuelsOilNaNnoBrunsbüttelHöchstspannung (HöS)50Hertz Transmission GmbHNaNNaN
BNA0162BrunsbüttelGT BNaNVattenfall Europe Nuclear Energy GmbHOtto Hahn Str. 7625541BrunsbüttelSchleswig-HolsteinDE63.50...NaNFossil fuelsOilNaNnoBrunsbüttelHöchstspannung (HöS)50Hertz Transmission GmbHNaNNaN
BNA0163BrunsbüttelGT CNaNVattenfall Europe Nuclear Energy GmbHOtto Hahn Str. 7625541BrunsbüttelSchleswig-HolsteinDE63.50...NaNFossil fuelsOilNaNnoBrunsbüttelHöchstspannung (HöS)50Hertz Transmission GmbHNaNNaN
BNA0164BrunsbüttelGT DNaNVattenfall Europe Nuclear Energy GmbHOtto Hahn Str. 7625541BrunsbüttelSchleswig-HolsteinDE63.50...NaNFossil fuelsOilNaNnoBrunsbüttelHöchstspannung (HöS)50Hertz Transmission GmbHNaNNaN
BNA0269HKW FlensburgBlock 5Flensburg K09 bis K12Stadtwerke Flensburg GmbHBatteriestr. 4824939FlensburgSchleswig-HolsteinDE30.00...NaNFossil fuelsOilNaNnoStadtwerke Flensburg GmbHMittelspannung (MS)Stadtwerke Flensburg GmbHList matching type: UBA capacity distributed p...NaN
BNA1338SpitzenkraftwerkMLDNaNEurowatt Spitzenkraft GmbHRuselbergstr. 8794469DeggendorfBayernDE19.00...NaNFossil fuelsOilNaNnoUmspannwerk DeggendorfMittelspannung (MS)Bayernwerk AGNaNNaN
BNA0143KW MittelsbürenBlock 3NaNswb Erzeugung GmbH & Co. KGAuf den Delben 3528237BremenBremenDE110.00...NaNOtherOther fuelsNaNnoBahnstromanschlußHochspannung (HS)DB Energie GmbHNaNNaN
BNA0289aHKW WestM4Frankfurt-West 2 u. 3Mainova AGGutleutstraße 23160627Frankfurt am MainHessenDE19.70...NaNOtherOther fuelsNaNnoUW Gutleutstraße30NRM Netzdienste Rhein-Main GmbHList matching type: UBA capacity distributed p...NaN
BNA0638HKW MannheimTurbine 2NaNMVV Energie AGOtto-Hahn-Straße 168169MannheimBaden-WürttembergDE2.78...NaNOther or unspecified energy sourcesWasteNaNnoH80Mittelspannung (MS)Netrion GmbHNaNNaN
BNA0639HKW MannheimTurbine DNaNMVV Energie AGOtto-Hahn-Straße 168169MannheimBaden-WürttembergDE5.56...NaNOther or unspecified energy sourcesWasteNaNnoH80Mittelspannung (MS)24/7 Netze GmbHNaNNaN
\n", "

27 rows × 37 columns

\n", "
" ], "text/plain": [ " name_bnetza block_bnetza \\\n", "BNA0059a HKW Kassel Turbine 1 \n", "BNA0080 Lichterfelde Lichterfelde 2 \n", "BNA0118 Heizkraftwerk Süd Heizkraftwerk Süd \n", "BNA0140 KW Hastedt Block 14 \n", "BNA0288 HKW Niederrad Block 2 \n", "BNA0681 Freimann GT 1 1 \n", "BNA0682 Freimann GT 2 2 \n", "BNA0735 Thyrow GT F \n", "BNA0736 Thyrow GT G \n", "BNA0737 Thyrow GT H \n", "BNA0799 Heizkraftwerk Pforzheim GmbH Gaskesselanlage \n", "BNA0913 GuD Anlage Spreetal GuD \n", "BNA0918a Dow Stade Kraftwärmekopplungsanlage \n", "BNA0922a GuD-Ikw Staßfurt NaN \n", "BNA0933 Heizkraftwerk Stuttgart-Gaisburg GAI GT 13 \n", "BNA1337a Heizkraftwerk Heizkraftwerk \n", "BNA0355 Grafenrheinfeld KKG \n", "BNA0161 Brunsbüttel GT A \n", "BNA0162 Brunsbüttel GT B \n", "BNA0163 Brunsbüttel GT C \n", "BNA0164 Brunsbüttel GT D \n", "BNA0269 HKW Flensburg Block 5 \n", "BNA1338 Spitzenkraftwerk MLD \n", "BNA0143 KW Mittelsbüren Block 3 \n", "BNA0289a HKW West M4 \n", "BNA0638 HKW Mannheim Turbine 2 \n", "BNA0639 HKW Mannheim Turbine D \n", "\n", " name_uba \\\n", "BNA0059a NaN \n", "BNA0080 NaN \n", "BNA0118 NaN \n", "BNA0140 NaN \n", "BNA0288 NaN \n", "BNA0681 NaN \n", "BNA0682 NaN \n", "BNA0735 NaN \n", "BNA0736 NaN \n", "BNA0737 NaN \n", "BNA0799 NaN \n", "BNA0913 NaN \n", "BNA0918a NaN \n", "BNA0922a NaN \n", "BNA0933 NaN \n", "BNA1337a NaN \n", "BNA0355 NaN \n", "BNA0161 NaN \n", "BNA0162 NaN \n", "BNA0163 NaN \n", "BNA0164 NaN \n", "BNA0269 Flensburg K09 bis K12 \n", "BNA1338 NaN \n", "BNA0143 NaN \n", "BNA0289a Frankfurt-West 2 u. 3 \n", "BNA0638 NaN \n", "BNA0639 NaN \n", "\n", " company \\\n", "BNA0059a Volkswagen AG \n", "BNA0080 Vattenfall Europe Wärme AG \n", "BNA0118 Energie- und Wasserversorgung Bonn/Rhein-Sieg ... \n", "BNA0140 swb Erzeugung GmbH & Co. KG \n", "BNA0288 Mainova AG \n", "BNA0681 SWM Services GmbH \n", "BNA0682 SWM Services GmbH \n", "BNA0735 Lausitz Energie Kraftwerke AG \n", "BNA0736 Lausitz Energie Kraftwerke AG \n", "BNA0737 Lausitz Energie Kraftwerke AG \n", "BNA0799 Heizkraftwerk Pforzheim GmbH \n", "BNA0913 Alpiq Spreetal GmbH \n", "BNA0918a Dow Deutschland Anlagengesellschaft mbH \n", "BNA0922a CIECH Energy Deutschland GmbH \n", "BNA0933 EnBW Energie Baden-Württemberg AG \n", "BNA1337a DS Smith Paper Deutschland GmbH \n", "BNA0355 E.ON Kernkraft GmbH \n", "BNA0161 Vattenfall Europe Nuclear Energy GmbH \n", "BNA0162 Vattenfall Europe Nuclear Energy GmbH \n", "BNA0163 Vattenfall Europe Nuclear Energy GmbH \n", "BNA0164 Vattenfall Europe Nuclear Energy GmbH \n", "BNA0269 Stadtwerke Flensburg GmbH \n", "BNA1338 Eurowatt Spitzenkraft GmbH \n", "BNA0143 swb Erzeugung GmbH & Co. KG \n", "BNA0289a Mainova AG \n", "BNA0638 MVV Energie AG \n", "BNA0639 MVV Energie AG \n", "\n", " street postcode city \\\n", "BNA0059a NaN 34225 Baunatal \n", "BNA0080 Ostpreußendamm 61 12207 Berlin \n", "BNA0118 NaN 53121 Bonn \n", "BNA0140 Hastedter Osterdeich 255 28207 Bremen \n", "BNA0288 Lyoner Straße 9 60528 Frankfurt am Main \n", "BNA0681 NaN 80807 München \n", "BNA0682 NaN 80807 München \n", "BNA0735 NaN 15806 Nunsdorf \n", "BNA0736 NaN 15806 Nunsdorf \n", "BNA0737 NaN 15806 Nunsdorf \n", "BNA0799 Hohwiesenweg 15 75175 Pforzheim \n", "BNA0913 Südstraße 2979 Spreetal \n", "BNA0918a Bützflethersand 21683 Stade \n", "BNA0922a Athenslebener Weg 57 39418 Staßfurt \n", "BNA0933 Langwiesenweg 23 70376 Stuttgart \n", "BNA1337a Weichertstr. 7 63741 Aschaffenburg \n", "BNA0355 NaN 97506 Grafenrheinfeld \n", "BNA0161 Otto Hahn Str. 76 25541 Brunsbüttel \n", "BNA0162 Otto Hahn Str. 76 25541 Brunsbüttel \n", "BNA0163 Otto Hahn Str. 76 25541 Brunsbüttel \n", "BNA0164 Otto Hahn Str. 76 25541 Brunsbüttel \n", "BNA0269 Batteriestr. 48 24939 Flensburg \n", "BNA1338 Ruselbergstr. 87 94469 Deggendorf \n", "BNA0143 Auf den Delben 35 28237 Bremen \n", "BNA0289a Gutleutstraße 231 60627 Frankfurt am Main \n", "BNA0638 Otto-Hahn-Straße 1 68169 Mannheim \n", "BNA0639 Otto-Hahn-Straße 1 68169 Mannheim \n", "\n", " state country capacity_net_bnetza ... \\\n", "BNA0059a Hessen DE 12.20 ... \n", "BNA0080 Berlin DE 144.00 ... \n", "BNA0118 Nordrhein-Westfalen DE 14.40 ... \n", "BNA0140 Bremen DE 155.00 ... \n", "BNA0288 Hessen DE 56.00 ... \n", "BNA0681 Bayern DE 80.00 ... \n", "BNA0682 Bayern DE 80.00 ... \n", "BNA0735 Brandenburg DE 37.50 ... \n", "BNA0736 Brandenburg DE 37.50 ... \n", "BNA0737 Brandenburg DE 37.50 ... \n", "BNA0799 Baden-Württemberg DE 11.30 ... \n", "BNA0913 Sachsen DE 50.00 ... \n", "BNA0918a Niedersachsen DE 190.00 ... \n", "BNA0922a Sachsen-Anhalt DE 9.00 ... \n", "BNA0933 Baden-Württemberg DE 55.00 ... \n", "BNA1337a Bayern DE 27.00 ... \n", "BNA0355 Bayern DE 1275.00 ... \n", "BNA0161 Schleswig-Holstein DE 63.50 ... \n", "BNA0162 Schleswig-Holstein DE 63.50 ... \n", "BNA0163 Schleswig-Holstein DE 63.50 ... \n", "BNA0164 Schleswig-Holstein DE 63.50 ... \n", "BNA0269 Schleswig-Holstein DE 30.00 ... \n", "BNA1338 Bayern DE 19.00 ... \n", "BNA0143 Bremen DE 110.00 ... \n", "BNA0289a Hessen DE 19.70 ... \n", "BNA0638 Baden-Württemberg DE 2.78 ... \n", "BNA0639 Baden-Württemberg DE 5.56 ... \n", "\n", " efficiency_estimate energy_source_level_1 \\\n", "BNA0059a NaN Fossil fuels \n", "BNA0080 NaN Fossil fuels \n", "BNA0118 NaN Fossil fuels \n", "BNA0140 NaN Fossil fuels \n", "BNA0288 NaN Fossil fuels \n", "BNA0681 NaN Fossil fuels \n", "BNA0682 NaN Fossil fuels \n", "BNA0735 NaN Fossil fuels \n", "BNA0736 NaN Fossil fuels \n", "BNA0737 NaN Fossil fuels \n", "BNA0799 NaN Fossil fuels \n", "BNA0913 NaN Fossil fuels \n", "BNA0918a NaN Fossil fuels \n", "BNA0922a NaN Fossil fuels \n", "BNA0933 NaN Fossil fuels \n", "BNA1337a NaN Fossil fuels \n", "BNA0355 NaN Nuclear \n", "BNA0161 NaN Fossil fuels \n", "BNA0162 NaN Fossil fuels \n", "BNA0163 NaN Fossil fuels \n", "BNA0164 NaN Fossil fuels \n", "BNA0269 NaN Fossil fuels \n", "BNA1338 NaN Fossil fuels \n", "BNA0143 NaN Other \n", "BNA0289a NaN Other \n", "BNA0638 NaN Other or unspecified energy sources \n", "BNA0639 NaN Other or unspecified energy sources \n", "\n", " energy_source_level_2 energy_source_level_3 eeg \\\n", "BNA0059a Natural gas NaN no \n", "BNA0080 Natural gas NaN no \n", "BNA0118 Natural gas NaN no \n", "BNA0140 Natural gas NaN no \n", "BNA0288 Natural gas NaN no \n", "BNA0681 Natural gas NaN no \n", "BNA0682 Natural gas NaN no \n", "BNA0735 Natural gas NaN no \n", "BNA0736 Natural gas NaN no \n", "BNA0737 Natural gas NaN no \n", "BNA0799 Natural gas NaN no \n", "BNA0913 Natural gas NaN no \n", "BNA0918a Natural gas NaN no \n", "BNA0922a Natural gas NaN no \n", "BNA0933 Natural gas NaN no \n", "BNA1337a Natural gas NaN no \n", "BNA0355 NaN NaN no \n", "BNA0161 Oil NaN no \n", "BNA0162 Oil NaN no \n", "BNA0163 Oil NaN no \n", "BNA0164 Oil NaN no \n", "BNA0269 Oil NaN no \n", "BNA1338 Oil NaN no \n", "BNA0143 Other fuels NaN no \n", "BNA0289a Other fuels NaN no \n", "BNA0638 Waste NaN no \n", "BNA0639 Waste NaN no \n", "\n", " network_node voltage \\\n", "BNA0059a Anlage A Mittelspannung (MS) \n", "BNA0080 Lichterfelde Hochspannung (HS) \n", "BNA0118 Umspannanlage Kessenich 10 \n", "BNA0140 DE0072032820700000000000000232556 Hochspannung (HS) \n", "BNA0288 UW Goldsteinstraße Hochspannung (HS) \n", "BNA0681 UW Freimann Hochspannung (HS) \n", "BNA0682 UW Freimann Hochspannung (HS) \n", "BNA0735 Thyrow Hochspannung (HS) \n", "BNA0736 Thyrow Hochspannung (HS) \n", "BNA0737 Thyrow Hochspannung (HS) \n", "BNA0799 Hohwiesenweg Hochspannung (HS) \n", "BNA0913 110kV Umspannwerk Schwarze Pumpe Hochspannung (HS) \n", "BNA0918a UW Götzdorf Höchstspannung (HöS) \n", "BNA0922a UW NORD Hochspannung (HS) \n", "BNA0933 Gaisburg Hochspannung (HS) \n", "BNA1337a NaN Mittelspannung (MS) \n", "BNA0355 Grafenrheinfeld Höchstspannung (HöS) \n", "BNA0161 Brunsbüttel Höchstspannung (HöS) \n", "BNA0162 Brunsbüttel Höchstspannung (HöS) \n", "BNA0163 Brunsbüttel Höchstspannung (HöS) \n", "BNA0164 Brunsbüttel Höchstspannung (HöS) \n", "BNA0269 Stadtwerke Flensburg GmbH Mittelspannung (MS) \n", "BNA1338 Umspannwerk Deggendorf Mittelspannung (MS) \n", "BNA0143 Bahnstromanschluß Hochspannung (HS) \n", "BNA0289a UW Gutleutstraße 30 \n", "BNA0638 H80 Mittelspannung (MS) \n", "BNA0639 H80 Mittelspannung (MS) \n", "\n", " network_operator \\\n", "BNA0059a VW Kraftwerk GmbH \n", "BNA0080 Stromnetz Berlin GmbH \n", "BNA0118 Bonn Netz GmbH \n", "BNA0140 Wesernetz Bremen GmbH \n", "BNA0288 NRM Netzdienste Rhein-Main GmbH \n", "BNA0681 SWM Infrastruktur GmbH \n", "BNA0682 SWM Infrastruktur GmbH \n", "BNA0735 50Hertz Transmission GmbH \n", "BNA0736 50Hertz Transmission GmbH \n", "BNA0737 50Hertz Transmission GmbH \n", "BNA0799 Stadtwerke Pforzheim GmbH und Co. KG \n", "BNA0913 Mitteldeutsche Netzgesellschaft Strom mbH \n", "BNA0918a TenneT TSO GmbH \n", "BNA0922a HSN Magdeburg GmbH \n", "BNA0933 Netze BW GmbH \n", "BNA1337a Aschaffenburger Versorgungs GmbH \n", "BNA0355 TenneT TSO GmbH \n", "BNA0161 50Hertz Transmission GmbH \n", "BNA0162 50Hertz Transmission GmbH \n", "BNA0163 50Hertz Transmission GmbH \n", "BNA0164 50Hertz Transmission GmbH \n", "BNA0269 Stadtwerke Flensburg GmbH \n", "BNA1338 Bayernwerk AG \n", "BNA0143 DB Energie GmbH \n", "BNA0289a NRM Netzdienste Rhein-Main GmbH \n", "BNA0638 Netrion GmbH \n", "BNA0639 24/7 Netze GmbH \n", "\n", " merge_comment comment \n", "BNA0059a NaN NaN \n", "BNA0080 List matching type: Single UBA power plant ass... NaN \n", "BNA0118 NaN NaN \n", "BNA0140 NaN NaN \n", "BNA0288 List matching type: UBA capacity distributed p... NaN \n", "BNA0681 NaN NaN \n", "BNA0682 NaN NaN \n", "BNA0735 List matching type: UBA capacity distributed p... NaN \n", "BNA0736 List matching type: UBA capacity distributed p... NaN \n", "BNA0737 List matching type: UBA capacity distributed p... NaN \n", "BNA0799 NaN NaN \n", "BNA0913 NaN NaN \n", "BNA0918a NaN NaN \n", "BNA0922a NaN NaN \n", "BNA0933 NaN NaN \n", "BNA1337a NaN NaN \n", "BNA0355 NaN NaN \n", "BNA0161 NaN NaN \n", "BNA0162 NaN NaN \n", "BNA0163 NaN NaN \n", "BNA0164 NaN NaN \n", "BNA0269 List matching type: UBA capacity distributed p... NaN \n", "BNA1338 NaN NaN \n", "BNA0143 NaN NaN \n", "BNA0289a List matching type: UBA capacity distributed p... NaN \n", "BNA0638 NaN NaN \n", "BNA0639 NaN NaN \n", "\n", "[27 rows x 37 columns]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Show all Plants with invalid commisioning dates\n", "plantlist[plantlist['commissioned'].isnull()]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8.3.3 Compare UBA and BNetzA data" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0NameBlockBnetzaCapacityUBACapacity
BNA08590.208333Rheinkraftwerk Ryburg-SchwörstadtRyburg-Schwörstadt30.00144.00000
BNA08350.402586KW RheinfeldenKW Rheinfelden46.70116.00000
BNA03640.493642JochensteinJochenstein66.00133.70000
BNA04440.627273WintershallWintershall69.00110.00000
BNA0616b0.688976Kraftwerk NordS 300 VT 1, VT 2, NT 787.50127.00000
..................
BNA06601.481960Kraftwerk IBlock 455.5637.49088
BNA0662b1.481961Kraftwerk IDampfwirtschaft (6 Einzelturbinen)169.32114.25405
BNA0662a1.481961Kraftwerk IBlock 568.4046.15507
BNA03503.969811GoldisthalPSS A1052.00265.00000
BNA06525.972571MarkersbachPSS A1045.20175.00000
\n", "

225 rows × 5 columns

\n", "
" ], "text/plain": [ " 0 Name \\\n", "BNA0859 0.208333 Rheinkraftwerk Ryburg-Schwörstadt \n", "BNA0835 0.402586 KW Rheinfelden \n", "BNA0364 0.493642 Jochenstein \n", "BNA0444 0.627273 Wintershall \n", "BNA0616b 0.688976 Kraftwerk Nord \n", "... ... ... \n", "BNA0660 1.481960 Kraftwerk I \n", "BNA0662b 1.481961 Kraftwerk I \n", "BNA0662a 1.481961 Kraftwerk I \n", "BNA0350 3.969811 Goldisthal \n", "BNA0652 5.972571 Markersbach \n", "\n", " Block BnetzaCapacity UBACapacity \n", "BNA0859 Ryburg-Schwörstadt 30.00 144.00000 \n", "BNA0835 KW Rheinfelden 46.70 116.00000 \n", "BNA0364 Jochenstein 66.00 133.70000 \n", "BNA0444 Wintershall 69.00 110.00000 \n", "BNA0616b S 300 VT 1, VT 2, NT 7 87.50 127.00000 \n", "... ... ... ... \n", "BNA0660 Block 4 55.56 37.49088 \n", "BNA0662b Dampfwirtschaft (6 Einzelturbinen) 169.32 114.25405 \n", "BNA0662a Block 5 68.40 46.15507 \n", "BNA0350 PSS A 1052.00 265.00000 \n", "BNA0652 PSS A 1045.20 175.00000 \n", "\n", "[225 rows x 5 columns]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# TODO: improve this comparison, it creates many false positives\n", "\n", "capacitycomparison = pd.DataFrame(plantlist.capacity_net_bnetza / plantlist.capacity_gross_uba)\n", "capacitycomparison['Name'] = plantlist.name_bnetza\n", "capacitycomparison['Block'] = plantlist.block_bnetza\n", "capacitycomparison['BnetzaCapacity'] = plantlist.capacity_net_bnetza\n", "capacitycomparison['UBACapacity'] = plantlist.capacity_gross_uba\n", "capacitycomparison.dropna(inplace=True)\n", "capacitycomparison.sort_values(by=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 9. Result export" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Write the results to file" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "output_path = 'output'\n", "\n", "plantlist.to_csv(\n", " os.path.join(output_path, 'conventional_power_plants_DE.csv'),\n", " encoding='utf-8', index_label='id'\n", ")\n", "\n", "plantlist.to_excel(\n", " os.path.join(output_path, 'conventional_power_plants_DE.xlsx'),\n", " sheet_name='plants', index_label='id'\n", ")\n", "\n", "plantlist.to_sql(\n", " 'conventional_power_plants_DE',\n", " sqlite3.connect(os.path.join(output_path ,'conventional_power_plants.sqlite')),\n", " if_exists=\"replace\", index_label='id'\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "End of script." ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "anaconda-cloud": {}, "celltoolbar": "Raw Cell Format", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" }, "toc": { "nav_menu": { "height": "512px", "width": "252px" }, "navigate_menu": true, "number_sections": false, "sideBar": true, "threshold": 4, "toc_cell": true, "toc_section_display": "block", "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 1 }