Skip to content

Instantly share code, notes, and snippets.

@rdmolony
Last active April 23, 2021 13:49
Show Gist options
  • Select an option

  • Save rdmolony/23224c5defdcd63d2c020e779d913fcf to your computer and use it in GitHub Desktop.

Select an option

Save rdmolony/23224c5defdcd63d2c020e779d913fcf to your computer and use it in GitHub Desktop.
estimate-dublin-heat-demand.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "estimate-dublin-heat-demand.ipynb",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true,
"authorship_tag": "ABX9TyO2drUKDLCMAOU6zZp8wSsO",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/rdmolony/23224c5defdcd63d2c020e779d913fcf/estimate-dublin-heat-demand.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "o4euzmnjARsp"
},
"source": [
"# Download & Import all Dependencies"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c-HFib7Cmbng"
},
"source": [
"**Note!**\n",
"\n",
"May need to click the `Restart Runtime` if prompted!\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "-XAxdkZz_dTK"
},
"source": [
"!pip install pydrive2 geopandas pygeos"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "e9jxtbzRAPn9"
},
"source": [
"from collections import defaultdict\n",
"from pathlib import Path\n",
"from shutil import unpack_archive\n",
"\n",
"import geopandas as gpd\n",
"from google.colab import auth\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"from pydrive.auth import GoogleAuth\n",
"from pydrive.drive import GoogleDrive\n",
"from oauth2client.client import GoogleCredentials\n",
"import seaborn as sns\n",
"\n",
"sns.set()\n",
"gpd.options.use_pygeos = True"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "Pz1KpBiT6As6"
},
"source": [
"# Download Data from the `codema-dev` Google Drive\n",
"\n",
"- `dublin_ber_public.csv`<sup>1</sup>\n",
"\n",
"\n",
"- `dublin_indiv_hh_up_to_2011_anonymised.csv`<sup>2</sup>\n",
"\n",
"- `benchmarks.zip`<sup>3</sup>\n",
"\n",
"- `dublin_valuation_office_public.csv`<sup>4</sup>\n",
"\n",
"- `dublin_routing_key_boundaries.geojson`<sup>5</sup>\n",
"\n",
"- `dublin_public_sector_gas_demand_2018_gwh_per_year.csv`<sup>6</sup>\n",
"\n",
"\n",
"<br>\n",
"<hr>\n",
"<sup>1</sup> <a href=\"https://ndber.seai.ie/BERResearchTool/Register/Register.aspx\">SEAI BER Public search</a> Dublin extract [accessed on 04/2021] <br>\n",
"<sup>2</sup> 2011 Census cross-tabulated (Dwelling Type | Period Built) building stock requested by Codema - Dublin's Energy Agency from the Central Statistics Office in 2015 anonymised [on 04/2021] to Routing Key Boundaries<sup>5</sup> <br>\n",
"<sup>3</sup> Folder containing: `uses/` = Valuation Office uses linked to corresponding CIBSE benchmarks, `benchmarks.xlsx` = CIBSE benchmark categories info <br>\n",
"<sup>4</sup> <a href=\"https://www.valoff.ie/en/open-data/api/\">Dublin commercial property floor area extract</a> [accessed on 03/2021] <br>\n",
"<sup>5</sup> Dublin Routing Key Boundaries derived by Autoaddress.ie from Small Area boundaries from DATA.GOV.IE and Eircode Routing Key data and is <a href=\"https://www.autoaddress.ie/support/developer-centre/resources/routing-key-boundaries\">published as open, free and reusable</a> [accessed on 21/04/2021] <br>\n",
"<sup>6</sup> Dublin Public Sector (offices, schools, universities, banks, hospitals, gardai stations, post offices, theatres, courts, local authority & government buildings, libraries) measured gas demands [2018] aggregated to postcode level "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XezqIvZxmtnS"
},
"source": [
"**Note!**\n",
"\n",
"Login to your Google account in order to download the required data from the `codema-dev` Google Drive"
]
},
{
"cell_type": "code",
"metadata": {
"id": "uAadXGz_-pgA"
},
"source": [
"# Authenticate and create the PyDrive client\n",
"auth.authenticate_user()\n",
"gauth = GoogleAuth()\n",
"gauth.credentials = GoogleCredentials.get_application_default()\n",
"drive = GoogleDrive(gauth)"
],
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "hqmjHIyH_mNH"
},
"source": [
"downloaded = drive.CreateFile({'id':\"1-Kb3qNEsW1R05y0vNvuK02zhHMiHAk6X\"}) \n",
"downloaded.GetContentFile('dublin_ber_public.csv')"
],
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "mcg5PJgoAG2z"
},
"source": [
"downloaded = drive.CreateFile({'id':\"1-dYKeyCek9CQmQpprnxWXUo8r7M1rGbM\"}) \n",
"downloaded.GetContentFile('dublin_indiv_hh_up_to_2011_anonymised.csv') "
],
"execution_count": 5,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Pk0aBAKGIDCV"
},
"source": [
"downloaded = drive.CreateFile({'id':\"13FU8iVXQVt6xO-9nSpj8TbeYHbzJtO-2\"}) \n",
"downloaded.GetContentFile('dublin_valuation_office_public.csv') "
],
"execution_count": 6,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "YNqsxXuvJjRF"
},
"source": [
"downloaded = drive.CreateFile({'id':\"13CYgwp4ZeOmfVkQUXPbcIwuTLpsgeTOJ\"}) \n",
"downloaded.GetContentFile('benchmarks.zip')\n",
"unpack_archive(\"benchmarks.zip\") # unzip!"
],
"execution_count": 7,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "MxIp1NCZ4QUU"
},
"source": [
"downloaded = drive.CreateFile({'id':\"13YIVjgKM9t1GYmwK3PRsW--PfAMEK8XV\"}) \n",
"downloaded.GetContentFile('dublin_routing_key_boundaries.geojson')"
],
"execution_count": 8,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "6KK26gw5QmD4"
},
"source": [
"downloaded = drive.CreateFile({'id':\"13aHl7Hyc_haQuQozdhd7pLEyccYMAIR7\"}) \n",
"downloaded.GetContentFile('dublin_public_sector_gas_demand_2018_gwh_per_year.csv')"
],
"execution_count": 9,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "r9OM4pBm4X2G"
},
"source": [
"# Import Boundary data\n",
"\n",
"- `dublin_routing_key_boundaries`<sup>1</sup>\n",
"\n",
"<br>\n",
"<hr>\n",
"<sup>1</sup> Used to link & amalgamate data to postcode level which is currently [21/04/2021] as fine a granularity as BER Public gets"
]
},
{
"cell_type": "code",
"metadata": {
"id": "NGY5sxi9QRMH"
},
"source": [
"dublin_routing_key_boundaries = gpd.read_file(\n",
" \"dublin_routing_key_boundaries.geojson\",\n",
" driver=\"GeoJSON\",\n",
")"
],
"execution_count": 10,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "z1ybNu2jI2HI"
},
"source": [
"# Residential Building Heat Demands"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CuE-c7bJ6B3_"
},
"source": [
"## On the BER Public dataset calculate:\n",
"\n",
"1. Convert BER Rating (A1, A2, B1 etc) to BER Band (A, B etc)\n",
"\n",
"2. Convert `Year_of_Construction` to `period_built` as specified in the 2011 Census\n",
"\n",
"3. Convert `DwellingTypeDescr` to `dwelling_type` as specified in the 2011 Census\n",
"\n",
"4. Create `category_id` to mark each unique `CountyName` (i.e. Postcode), `dwelling_type`, `period_built` for use in joining the BER Public data to the 2011 Census data\n",
"\n",
"5. Calculate `total_floor_area` by summing the area of each floor"
]
},
{
"cell_type": "code",
"metadata": {
"id": "1q1bwWuf58Sj"
},
"source": [
"thermal_bridging_factor = 0.15\n",
"ventilation_heat_loss_constant = 0.33\n",
"effective_air_rate_change = 0.5\n",
"typical_floor_height = 2.5 # 200,000 / 280,000 Dublin HH are (2.4, 2.6]\n",
"dublin_ber_public = (\n",
" pd.read_csv(\"dublin_ber_public.csv\")\n",
" .assign(\n",
" BERBand=lambda df: df[\"EnergyRating\"].str[0].astype(\"category\"),\n",
" period_built=lambda df: pd.cut(\n",
" df[\"Year_of_Construction\"],\n",
" bins=[\n",
" -np.inf,\n",
" 1919,\n",
" 1945,\n",
" 1960,\n",
" 1970,\n",
" 1980,\n",
" 1990,\n",
" 2000,\n",
" 2005,\n",
" 2011,\n",
" np.inf,\n",
" ],\n",
" labels=[\n",
" \"before 1919\",\n",
" \"1919 - 1945\",\n",
" \"1946 - 1960\",\n",
" \"1961 - 1970\",\n",
" \"1971 - 1980\",\n",
" \"1981 - 1990\",\n",
" \"1991 - 2000\",\n",
" \"2001 - 2005\",\n",
" \"2006 - 2010\",\n",
" \"2011 or later\",\n",
" ],\n",
" ),\n",
" dwelling_type=lambda df: df[\"DwellingTypeDescr\"].replace(\n",
" {\n",
" \"Grnd floor apt.\": \"Apartment\",\n",
" \"Mid floor apt.\": \"Apartment\",\n",
" \"Top floor apt.\": \"Apartment\",\n",
" \"Maisonette\": \"Apartment\",\n",
" \"Apt.\": \"Apartment\",\n",
" \"Det. house\": \"Detached house\",\n",
" \"Semi-det. house\": \"Semi-detached house\",\n",
" \"House\": \"Semi-detached house\",\n",
" \"Mid terrc house\": \"Terraced house\",\n",
" \"End terrc house\": \"Terraced house\",\n",
" None: \"Not stated\",\n",
" }\n",
" ),\n",
" category_id=lambda df: df.groupby(\n",
" [\"CountyName\", \"dwelling_type\", \"period_built\"]\n",
" ).cumcount().apply(lambda x: x + 1),\n",
" total_floor_area=lambda df: df[\"GroundFloorArea\"]\n",
" + df[\"FirstFloorArea\"]\n",
" + df[\"SecondFloorArea\"]\n",
" + df[\"ThirdFloorArea\"],\n",
" )\n",
")\n"
],
"execution_count": 11,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 617
},
"id": "oHmLK0WbHWlE",
"outputId": "5bac3537-8125-4730-8e79-850c3aaa8830"
},
"source": [
"dublin_ber_public"
],
"execution_count": 12,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>CountyName</th>\n",
" <th>DwellingTypeDescr</th>\n",
" <th>Year_of_Construction</th>\n",
" <th>EnergyRating</th>\n",
" <th>GroundFloorArea</th>\n",
" <th>FirstFloorArea</th>\n",
" <th>SecondFloorArea</th>\n",
" <th>ThirdFloorArea</th>\n",
" <th>GroundFloorHeight</th>\n",
" <th>FirstFloorHeight</th>\n",
" <th>SecondFloorHeight</th>\n",
" <th>ThirdFloorHeight</th>\n",
" <th>NoStoreys</th>\n",
" <th>RoofArea</th>\n",
" <th>DoorArea</th>\n",
" <th>WallArea</th>\n",
" <th>WindowArea</th>\n",
" <th>UValueWall</th>\n",
" <th>UValueRoof</th>\n",
" <th>UValueFloor</th>\n",
" <th>UvalueDoor</th>\n",
" <th>UValueWindow</th>\n",
" <th>BERBand</th>\n",
" <th>period_built</th>\n",
" <th>dwelling_type</th>\n",
" <th>category_id</th>\n",
" <th>total_floor_area</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Dublin 6W</td>\n",
" <td>Semi-detached house</td>\n",
" <td>1994.0</td>\n",
" <td>D1</td>\n",
" <td>55.20</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.40</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>55.20</td>\n",
" <td>1.82</td>\n",
" <td>42.75</td>\n",
" <td>6.31</td>\n",
" <td>0.35</td>\n",
" <td>0.26</td>\n",
" <td>0.41</td>\n",
" <td>3.00</td>\n",
" <td>2.80</td>\n",
" <td>D</td>\n",
" <td>1991 - 2000</td>\n",
" <td>Semi-detached house</td>\n",
" <td>1</td>\n",
" <td>55.20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Co. Dublin</td>\n",
" <td>Ground-floor apartment</td>\n",
" <td>2007.0</td>\n",
" <td>B2</td>\n",
" <td>55.43</td>\n",
" <td>55.43</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.41</td>\n",
" <td>2.66</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.0</td>\n",
" <td>0.54</td>\n",
" <td>2.07</td>\n",
" <td>34.40</td>\n",
" <td>25.38</td>\n",
" <td>0.37</td>\n",
" <td>0.25</td>\n",
" <td>0.26</td>\n",
" <td>3.00</td>\n",
" <td>2.70</td>\n",
" <td>B</td>\n",
" <td>2006 - 2010</td>\n",
" <td>Ground-floor apartment</td>\n",
" <td>1</td>\n",
" <td>110.86</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Dublin 6</td>\n",
" <td>Mid-floor apartment</td>\n",
" <td>2000.0</td>\n",
" <td>B3</td>\n",
" <td>70.67</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.40</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.00</td>\n",
" <td>2.06</td>\n",
" <td>26.32</td>\n",
" <td>13.54</td>\n",
" <td>0.91</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>3.00</td>\n",
" <td>2.70</td>\n",
" <td>B</td>\n",
" <td>1991 - 2000</td>\n",
" <td>Mid-floor apartment</td>\n",
" <td>1</td>\n",
" <td>70.67</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Dublin 14</td>\n",
" <td>Semi-detached house</td>\n",
" <td>1955.0</td>\n",
" <td>B3</td>\n",
" <td>110.58</td>\n",
" <td>68.08</td>\n",
" <td>36.69</td>\n",
" <td>0.0</td>\n",
" <td>2.85</td>\n",
" <td>2.70</td>\n",
" <td>1.36</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>101.64</td>\n",
" <td>0.00</td>\n",
" <td>188.46</td>\n",
" <td>54.52</td>\n",
" <td>0.22</td>\n",
" <td>0.27</td>\n",
" <td>0.60</td>\n",
" <td>0.00</td>\n",
" <td>2.44</td>\n",
" <td>B</td>\n",
" <td>1946 - 1960</td>\n",
" <td>Semi-detached house</td>\n",
" <td>1</td>\n",
" <td>215.35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Dublin 9</td>\n",
" <td>Ground-floor apartment</td>\n",
" <td>2001.0</td>\n",
" <td>C1</td>\n",
" <td>67.98</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.34</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.00</td>\n",
" <td>2.26</td>\n",
" <td>38.77</td>\n",
" <td>8.68</td>\n",
" <td>0.51</td>\n",
" <td>0.00</td>\n",
" <td>0.29</td>\n",
" <td>2.54</td>\n",
" <td>2.70</td>\n",
" <td>C</td>\n",
" <td>2001 - 2005</td>\n",
" <td>Ground-floor apartment</td>\n",
" <td>1</td>\n",
" <td>67.98</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>286954</th>\n",
" <td>Dublin 9</td>\n",
" <td>End of terrace house</td>\n",
" <td>1945.0</td>\n",
" <td>G</td>\n",
" <td>55.45</td>\n",
" <td>32.93</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.50</td>\n",
" <td>2.69</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.0</td>\n",
" <td>57.60</td>\n",
" <td>3.70</td>\n",
" <td>96.76</td>\n",
" <td>13.00</td>\n",
" <td>1.97</td>\n",
" <td>1.30</td>\n",
" <td>0.78</td>\n",
" <td>2.35</td>\n",
" <td>5.63</td>\n",
" <td>G</td>\n",
" <td>1919 - 1945</td>\n",
" <td>End of terrace house</td>\n",
" <td>262</td>\n",
" <td>88.38</td>\n",
" </tr>\n",
" <tr>\n",
" <th>286955</th>\n",
" <td>Dublin 14</td>\n",
" <td>Semi-detached house</td>\n",
" <td>1963.0</td>\n",
" <td>C3</td>\n",
" <td>75.66</td>\n",
" <td>58.08</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.38</td>\n",
" <td>2.73</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.0</td>\n",
" <td>75.87</td>\n",
" <td>1.61</td>\n",
" <td>82.40</td>\n",
" <td>32.48</td>\n",
" <td>2.06</td>\n",
" <td>0.91</td>\n",
" <td>0.62</td>\n",
" <td>2.91</td>\n",
" <td>3.25</td>\n",
" <td>C</td>\n",
" <td>1961 - 1970</td>\n",
" <td>Semi-detached house</td>\n",
" <td>653</td>\n",
" <td>133.74</td>\n",
" </tr>\n",
" <tr>\n",
" <th>286956</th>\n",
" <td>Dublin 6</td>\n",
" <td>End of terrace house</td>\n",
" <td>1995.0</td>\n",
" <td>C3</td>\n",
" <td>34.37</td>\n",
" <td>34.84</td>\n",
" <td>19.05</td>\n",
" <td>0.0</td>\n",
" <td>2.47</td>\n",
" <td>2.69</td>\n",
" <td>2.00</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>34.64</td>\n",
" <td>1.88</td>\n",
" <td>97.57</td>\n",
" <td>15.44</td>\n",
" <td>0.52</td>\n",
" <td>0.32</td>\n",
" <td>0.44</td>\n",
" <td>3.00</td>\n",
" <td>2.81</td>\n",
" <td>C</td>\n",
" <td>1991 - 2000</td>\n",
" <td>End of terrace house</td>\n",
" <td>94</td>\n",
" <td>88.26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>286957</th>\n",
" <td>Dublin 22</td>\n",
" <td>Mid-floor apartment</td>\n",
" <td>2003.0</td>\n",
" <td>C2</td>\n",
" <td>61.64</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.43</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>0.00</td>\n",
" <td>1.76</td>\n",
" <td>43.16</td>\n",
" <td>9.07</td>\n",
" <td>0.86</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>1.36</td>\n",
" <td>3.06</td>\n",
" <td>C</td>\n",
" <td>2001 - 2005</td>\n",
" <td>Mid-floor apartment</td>\n",
" <td>340</td>\n",
" <td>61.64</td>\n",
" </tr>\n",
" <tr>\n",
" <th>286958</th>\n",
" <td>Dublin 14</td>\n",
" <td>Mid-terrace house</td>\n",
" <td>1962.0</td>\n",
" <td>D2</td>\n",
" <td>51.85</td>\n",
" <td>43.86</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.42</td>\n",
" <td>2.64</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>2.0</td>\n",
" <td>57.91</td>\n",
" <td>3.38</td>\n",
" <td>73.98</td>\n",
" <td>17.19</td>\n",
" <td>2.05</td>\n",
" <td>1.01</td>\n",
" <td>0.87</td>\n",
" <td>2.47</td>\n",
" <td>2.35</td>\n",
" <td>D</td>\n",
" <td>1961 - 1970</td>\n",
" <td>Mid-terrace house</td>\n",
" <td>134</td>\n",
" <td>95.71</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>286959 rows × 27 columns</p>\n",
"</div>"
],
"text/plain": [
" CountyName DwellingTypeDescr ... category_id total_floor_area\n",
"0 Dublin 6W Semi-detached house ... 1 55.20\n",
"1 Co. Dublin Ground-floor apartment ... 1 110.86\n",
"2 Dublin 6 Mid-floor apartment ... 1 70.67\n",
"3 Dublin 14 Semi-detached house ... 1 215.35\n",
"4 Dublin 9 Ground-floor apartment ... 1 67.98\n",
"... ... ... ... ... ...\n",
"286954 Dublin 9 End of terrace house ... 262 88.38\n",
"286955 Dublin 14 Semi-detached house ... 653 133.74\n",
"286956 Dublin 6 End of terrace house ... 94 88.26\n",
"286957 Dublin 22 Mid-floor apartment ... 340 61.64\n",
"286958 Dublin 14 Mid-terrace house ... 134 95.71\n",
"\n",
"[286959 rows x 27 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 12
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JuK-bNDYAw6j"
},
"source": [
"## On the 2011 Census dataset calculate:\n",
"\n",
"1. Create `category_id` to mark each unique `CountyName`, `dwelling_type`, `period_built` for use in joining the BER Public data to the 2011 Census data"
]
},
{
"cell_type": "code",
"metadata": {
"id": "s-_XDqkPCfAf"
},
"source": [
"dublin_census_2011 = (\n",
" pd.read_csv(\"dublin_indiv_hh_up_to_2011_anonymised.csv\")\n",
" .assign(\n",
" category_id=lambda df: df.groupby(\n",
" [\"COUNTYNAME\", \"dwelling_type\", \"period_built\"]\n",
" ).cumcount().apply(lambda x: x + 1),\n",
" )\n",
")"
],
"execution_count": 13,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 423
},
"id": "bG6F5I3wE8VR",
"outputId": "573b8961-133c-4809-ae07-55b4f1887917"
},
"source": [
"dublin_census_2011"
],
"execution_count": 14,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>period_built</th>\n",
" <th>dwelling_type</th>\n",
" <th>COUNTYNAME</th>\n",
" <th>RoutingKey</th>\n",
" <th>Descriptor</th>\n",
" <th>category_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>before 1919</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>454354</th>\n",
" <td>2006 - 2010</td>\n",
" <td>Apartment</td>\n",
" <td>Dublin 20</td>\n",
" <td>D20</td>\n",
" <td>DUBLIN 20</td>\n",
" <td>66</td>\n",
" </tr>\n",
" <tr>\n",
" <th>454355</th>\n",
" <td>2006 - 2010</td>\n",
" <td>Apartment</td>\n",
" <td>Dublin 20</td>\n",
" <td>D20</td>\n",
" <td>DUBLIN 20</td>\n",
" <td>67</td>\n",
" </tr>\n",
" <tr>\n",
" <th>454356</th>\n",
" <td>2006 - 2010</td>\n",
" <td>Apartment</td>\n",
" <td>Dublin 20</td>\n",
" <td>D20</td>\n",
" <td>DUBLIN 20</td>\n",
" <td>68</td>\n",
" </tr>\n",
" <tr>\n",
" <th>454357</th>\n",
" <td>2006 - 2010</td>\n",
" <td>Apartment</td>\n",
" <td>Dublin 20</td>\n",
" <td>D20</td>\n",
" <td>DUBLIN 20</td>\n",
" <td>69</td>\n",
" </tr>\n",
" <tr>\n",
" <th>454358</th>\n",
" <td>2006 - 2010</td>\n",
" <td>Apartment</td>\n",
" <td>Dublin 20</td>\n",
" <td>D20</td>\n",
" <td>DUBLIN 20</td>\n",
" <td>70</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>454359 rows × 6 columns</p>\n",
"</div>"
],
"text/plain": [
" period_built dwelling_type ... Descriptor category_id\n",
"0 before 1919 Detached house ... DUBLIN 10 1\n",
"1 1961 - 1970 Detached house ... DUBLIN 10 1\n",
"2 1961 - 1970 Detached house ... DUBLIN 10 2\n",
"3 1961 - 1970 Detached house ... DUBLIN 10 3\n",
"4 1961 - 1970 Detached house ... DUBLIN 10 4\n",
"... ... ... ... ... ...\n",
"454354 2006 - 2010 Apartment ... DUBLIN 20 66\n",
"454355 2006 - 2010 Apartment ... DUBLIN 20 67\n",
"454356 2006 - 2010 Apartment ... DUBLIN 20 68\n",
"454357 2006 - 2010 Apartment ... DUBLIN 20 69\n",
"454358 2006 - 2010 Apartment ... DUBLIN 20 70\n",
"\n",
"[454359 rows x 6 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EjbyJOE2JNqJ"
},
"source": [
"## Link the BER Public dataset to the 2011 Census dataset\n",
"\n",
"> BER Public is complete post-2011 so combining these two datasets creates a complete up-to-date building stock\n",
"\n",
"1. Merge `dublin_census_2011` with `dublin_ber_public` on common columns\n",
"\n",
"2. Link buildings built after 2011 to the merged building stock"
]
},
{
"cell_type": "code",
"metadata": {
"id": "U__oggm8H1QO"
},
"source": [
"ber_public_columns_to_keep = [\n",
" \"CountyName\",\n",
" \"dwelling_type\",\n",
" \"period_built\",\n",
" \"Year_of_Construction\",\n",
" \"category_id\",\n",
" \"total_floor_area\",\n",
" \"EnergyRating\",\n",
" \"BERBand\",\n",
"]"
],
"execution_count": 15,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "eb0rnMKIAOEg"
},
"source": [
"dublin_indiv_hh_before_2011 = dublin_census_2011.merge(\n",
" dublin_ber_public.loc[:, ber_public_columns_to_keep],\n",
" left_on=[\"COUNTYNAME\", \"dwelling_type\", \"period_built\", \"category_id\"],\n",
" right_on=[\"CountyName\", \"dwelling_type\", \"period_built\", \"category_id\"],\n",
" how=\"left\",\n",
" indicator=True,\n",
" suffixes=[\"\", \"_BER\"],\n",
")"
],
"execution_count": 16,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "8BR6CkHEIgV-"
},
"source": [
"dublin_indiv_hh_2011_or_later = (\n",
" dublin_ber_public.loc[:, ber_public_columns_to_keep]\n",
" .query(\"`Year_of_Construction` >= 2011\")\n",
")"
],
"execution_count": 17,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "wJHeB5zqHell"
},
"source": [
"dublin_indiv_hh = (\n",
" pd.concat(\n",
" [\n",
" dublin_indiv_hh_before_2011,\n",
" dublin_indiv_hh_2011_or_later,\n",
" ]\n",
" )\n",
" .reset_index(drop=True)\n",
")"
],
"execution_count": 18,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 513
},
"id": "ZEOyRUtDHZT3",
"outputId": "22e4222a-7a51-4062-c856-c1abfda50d81"
},
"source": [
"dublin_indiv_hh"
],
"execution_count": 19,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>period_built</th>\n",
" <th>dwelling_type</th>\n",
" <th>COUNTYNAME</th>\n",
" <th>RoutingKey</th>\n",
" <th>Descriptor</th>\n",
" <th>category_id</th>\n",
" <th>CountyName</th>\n",
" <th>Year_of_Construction</th>\n",
" <th>total_floor_area</th>\n",
" <th>EnergyRating</th>\n",
" <th>BERBand</th>\n",
" <th>_merge</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>before 1919</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>1</td>\n",
" <td>Dublin 10</td>\n",
" <td>1900.0</td>\n",
" <td>143.10</td>\n",
" <td>E1</td>\n",
" <td>E</td>\n",
" <td>both</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>left_only</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>left_only</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>left_only</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>4</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>left_only</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491427</th>\n",
" <td>2011 or later</td>\n",
" <td>Mid-floor apartment</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>253</td>\n",
" <td>Dublin 11</td>\n",
" <td>2021.0</td>\n",
" <td>97.50</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491428</th>\n",
" <td>2011 or later</td>\n",
" <td>Mid-floor apartment</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>254</td>\n",
" <td>Dublin 11</td>\n",
" <td>2021.0</td>\n",
" <td>81.00</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491429</th>\n",
" <td>2011 or later</td>\n",
" <td>Top-floor apartment</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>134</td>\n",
" <td>Dublin 11</td>\n",
" <td>2021.0</td>\n",
" <td>81.00</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491430</th>\n",
" <td>2011 or later</td>\n",
" <td>Detached house</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1698</td>\n",
" <td>Co. Dublin</td>\n",
" <td>2021.0</td>\n",
" <td>213.06</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491431</th>\n",
" <td>2011 or later</td>\n",
" <td>Ground-floor apartment</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>810</td>\n",
" <td>Co. Dublin</td>\n",
" <td>2020.0</td>\n",
" <td>77.35</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>491432 rows × 12 columns</p>\n",
"</div>"
],
"text/plain": [
" period_built dwelling_type ... BERBand _merge\n",
"0 before 1919 Detached house ... E both\n",
"1 1961 - 1970 Detached house ... NaN left_only\n",
"2 1961 - 1970 Detached house ... NaN left_only\n",
"3 1961 - 1970 Detached house ... NaN left_only\n",
"4 1961 - 1970 Detached house ... NaN left_only\n",
"... ... ... ... ... ...\n",
"491427 2011 or later Mid-floor apartment ... A NaN\n",
"491428 2011 or later Mid-floor apartment ... A NaN\n",
"491429 2011 or later Top-floor apartment ... A NaN\n",
"491430 2011 or later Detached house ... A NaN\n",
"491431 2011 or later Ground-floor apartment ... A NaN\n",
"\n",
"[491432 rows x 12 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 19
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SvbqhX6uOh03"
},
"source": [
"## Estimate heat demand using estimated BER Ratings\n",
"\n",
"1. Estimate unknown floor areas by using the `CountyName` (i.e. Postcode) average floor area for each `dwelling_type`\n",
"\n",
"2. Estimate all BER Ratings by linking `period_built` to likely corresponding ratings<sup>1</sup>\n",
"\n",
"3. Infer BER Ratings by filling unknown BER Ratings with estimated BER Ratings.\n",
"\n",
"4. Link BER Rating to a corresponding `energy_kwh_per_m2_year`\n",
"\n",
"5. Estimate annual heat demand by multiplying `energy_kwh_per_m2_year` by `estimated_floor_area` and `boiler_efficiency`<sup>2</sup>\n",
"\n",
"6. Fill empty `COUNTYNAME` values (i.e. from census) with `CountyName` values (i.e. from BER) \n",
"\n",
"<br>\n",
"<hr>\n",
"<sup>1</sup> Corresponds to a Linear Regression estimating `BERBand` using `period_built` with the exception of Linear Regression estimating buildings built prior to 1960 are as D whereas here as E is guessed - to reflect the bias of the BER stock against older buildings being sampled. Linear Regression correctly predicts 85% of buildings within ± 1 BER band (i.e. a B rating is guessed A, B or C). In essence older buildings have worse ratings <br>\n",
"<sup>2</sup> Assumed to be 85% as in the BER Public dataset. This is likely an overestimate as the BER Public boiler efficiencies are based on the <a href=\"https://www.seai.ie/home-energy/building-energy-rating-ber/support-for-ber-assessors/harp-database/harp-database-search/\">HARP database</a> [accessed on 21/04/2021] which uses manufacturer-specified efficiencies rather than in-use"
]
},
{
"cell_type": "code",
"metadata": {
"id": "wE5YCeRMO0Cs"
},
"source": [
"typical_boiler_efficiency = 0.85\n",
"kwh_to_mwh_conversion_factor = 10 ** -3\n",
"dublin_indiv_hh_demands = (\n",
" dublin_indiv_hh.copy()\n",
" .assign(\n",
" category_floor_area=lambda df: df.groupby([\"COUNTYNAME\", \"dwelling_type\"])[\n",
" \"total_floor_area\"\n",
" ]\n",
" .apply(lambda x: x.fillna(x.dropna().median()))\n",
" .round(),\n",
" estimated_floor_area=lambda df: df[\"total_floor_area\"]\n",
" .fillna(df[\"category_floor_area\"]),\n",
" estimated_ber=lambda df: df[\"period_built\"].replace(\n",
" {\n",
" \"before 1919\": \"E\",\n",
" \"1919 - 1945\": \"E\",\n",
" \"1946 - 1960\": \"E\",\n",
" \"1961 - 1970\": \"D\",\n",
" \"1971 - 1980\": \"D\",\n",
" \"1981 - 1990\": \"D\",\n",
" \"1991 - 2000\": \"D\",\n",
" \"2001 - 2005\": \"C\",\n",
" \"2006 - 2010\": \"B\",\n",
" \"2011 or later\": \"A\",\n",
" \"not stated\": \"unknown\",\n",
" }\n",
" ),\n",
" inferred_ber=lambda df: np.where(\n",
" df[\"BERBand\"].isnull(),\n",
" df[\"estimated_ber\"],\n",
" df[\"BERBand\"],\n",
" ),\n",
" energy_kwh_per_m2_year=lambda df: df[\"estimated_ber\"]\n",
" .replace(\n",
" {\n",
" \"A\": 25,\n",
" \"B\": 100,\n",
" \"C\": 175,\n",
" \"D\": 240,\n",
" \"E\": 320,\n",
" \"F\": 380,\n",
" \"G\": 450,\n",
" \"unknown\": 240,\n",
" }\n",
" )\n",
" .astype(np.int32),\n",
" heating_mwh_per_m2_year=lambda df: df[\"energy_kwh_per_m2_year\"]\n",
" * typical_boiler_efficiency\n",
" * kwh_to_mwh_conversion_factor,\n",
" heating_mwh_per_year=lambda df: df[\"heating_mwh_per_m2_year\"]\n",
" * df[\"estimated_floor_area\"],\n",
" COUNTYNAME=lambda df: df[\"COUNTYNAME\"].fillna(df[\"CountyName\"])\n",
" )\n",
" .drop(\n",
" columns=[\n",
" \"total_floor_area\",\n",
" \"category_floor_area\",\n",
" ]\n",
" )\n",
")"
],
"execution_count": 20,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 513
},
"id": "_kMQ-0juPE3d",
"outputId": "7c87aa85-b274-4f86-de89-c2a63823a905"
},
"source": [
"dublin_indiv_hh_demands"
],
"execution_count": 21,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>period_built</th>\n",
" <th>dwelling_type</th>\n",
" <th>COUNTYNAME</th>\n",
" <th>RoutingKey</th>\n",
" <th>Descriptor</th>\n",
" <th>category_id</th>\n",
" <th>CountyName</th>\n",
" <th>Year_of_Construction</th>\n",
" <th>EnergyRating</th>\n",
" <th>BERBand</th>\n",
" <th>_merge</th>\n",
" <th>estimated_floor_area</th>\n",
" <th>estimated_ber</th>\n",
" <th>inferred_ber</th>\n",
" <th>energy_kwh_per_m2_year</th>\n",
" <th>heating_mwh_per_m2_year</th>\n",
" <th>heating_mwh_per_year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>before 1919</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>1</td>\n",
" <td>Dublin 10</td>\n",
" <td>1900.0</td>\n",
" <td>E1</td>\n",
" <td>E</td>\n",
" <td>both</td>\n",
" <td>143.10</td>\n",
" <td>E</td>\n",
" <td>E</td>\n",
" <td>320</td>\n",
" <td>0.27200</td>\n",
" <td>38.923200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>left_only</td>\n",
" <td>90.00</td>\n",
" <td>D</td>\n",
" <td>D</td>\n",
" <td>240</td>\n",
" <td>0.20400</td>\n",
" <td>18.360000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>2</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>left_only</td>\n",
" <td>90.00</td>\n",
" <td>D</td>\n",
" <td>D</td>\n",
" <td>240</td>\n",
" <td>0.20400</td>\n",
" <td>18.360000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>left_only</td>\n",
" <td>90.00</td>\n",
" <td>D</td>\n",
" <td>D</td>\n",
" <td>240</td>\n",
" <td>0.20400</td>\n",
" <td>18.360000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1961 - 1970</td>\n",
" <td>Detached house</td>\n",
" <td>Dublin 10</td>\n",
" <td>D10</td>\n",
" <td>DUBLIN 10</td>\n",
" <td>4</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>left_only</td>\n",
" <td>90.00</td>\n",
" <td>D</td>\n",
" <td>D</td>\n",
" <td>240</td>\n",
" <td>0.20400</td>\n",
" <td>18.360000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491427</th>\n",
" <td>2011 or later</td>\n",
" <td>Mid-floor apartment</td>\n",
" <td>Dublin 11</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>253</td>\n",
" <td>Dublin 11</td>\n",
" <td>2021.0</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" <td>97.50</td>\n",
" <td>A</td>\n",
" <td>A</td>\n",
" <td>25</td>\n",
" <td>0.02125</td>\n",
" <td>2.071875</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491428</th>\n",
" <td>2011 or later</td>\n",
" <td>Mid-floor apartment</td>\n",
" <td>Dublin 11</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>254</td>\n",
" <td>Dublin 11</td>\n",
" <td>2021.0</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" <td>81.00</td>\n",
" <td>A</td>\n",
" <td>A</td>\n",
" <td>25</td>\n",
" <td>0.02125</td>\n",
" <td>1.721250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491429</th>\n",
" <td>2011 or later</td>\n",
" <td>Top-floor apartment</td>\n",
" <td>Dublin 11</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>134</td>\n",
" <td>Dublin 11</td>\n",
" <td>2021.0</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" <td>81.00</td>\n",
" <td>A</td>\n",
" <td>A</td>\n",
" <td>25</td>\n",
" <td>0.02125</td>\n",
" <td>1.721250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491430</th>\n",
" <td>2011 or later</td>\n",
" <td>Detached house</td>\n",
" <td>Co. Dublin</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1698</td>\n",
" <td>Co. Dublin</td>\n",
" <td>2021.0</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" <td>213.06</td>\n",
" <td>A</td>\n",
" <td>A</td>\n",
" <td>25</td>\n",
" <td>0.02125</td>\n",
" <td>4.527525</td>\n",
" </tr>\n",
" <tr>\n",
" <th>491431</th>\n",
" <td>2011 or later</td>\n",
" <td>Ground-floor apartment</td>\n",
" <td>Co. Dublin</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>810</td>\n",
" <td>Co. Dublin</td>\n",
" <td>2020.0</td>\n",
" <td>A2</td>\n",
" <td>A</td>\n",
" <td>NaN</td>\n",
" <td>77.35</td>\n",
" <td>A</td>\n",
" <td>A</td>\n",
" <td>25</td>\n",
" <td>0.02125</td>\n",
" <td>1.643687</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>491432 rows × 17 columns</p>\n",
"</div>"
],
"text/plain": [
" period_built ... heating_mwh_per_year\n",
"0 before 1919 ... 38.923200\n",
"1 1961 - 1970 ... 18.360000\n",
"2 1961 - 1970 ... 18.360000\n",
"3 1961 - 1970 ... 18.360000\n",
"4 1961 - 1970 ... 18.360000\n",
"... ... ... ...\n",
"491427 2011 or later ... 2.071875\n",
"491428 2011 or later ... 1.721250\n",
"491429 2011 or later ... 1.721250\n",
"491430 2011 or later ... 4.527525\n",
"491431 2011 or later ... 1.643687\n",
"\n",
"[491432 rows x 17 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 21
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-q5AhePDzKtG"
},
"source": [
"## Amalgamate buildings to Postcode level"
]
},
{
"cell_type": "code",
"metadata": {
"id": "LGF_X_0DzJLO"
},
"source": [
"mwh_to_gwh_conversion_factor = 10**-3\n",
"residential_postcode_heat_demand_gwh_per_year = (\n",
" dublin_indiv_hh_demands.groupby(\"COUNTYNAME\")\n",
" [\"heating_mwh_per_year\"]\n",
" .sum()\n",
" .multiply(mwh_to_gwh_conversion_factor)\n",
" .round()\n",
" .rename(\"residential_heating_demand_gwh_per_year\")\n",
" .reset_index()\n",
")"
],
"execution_count": 22,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 802
},
"id": "RfPpXNW70QAw",
"outputId": "10287db3-baff-4d05-99fa-4595e534b8e0"
},
"source": [
"residential_postcode_heat_demand_gwh_per_year"
],
"execution_count": 23,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>COUNTYNAME</th>\n",
" <th>residential_heating_demand_gwh_per_year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Co. Dublin</td>\n",
" <td>1813.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Dublin 1</td>\n",
" <td>116.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Dublin 10</td>\n",
" <td>40.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Dublin 11</td>\n",
" <td>198.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Dublin 12</td>\n",
" <td>173.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Dublin 13</td>\n",
" <td>317.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Dublin 14</td>\n",
" <td>337.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Dublin 15</td>\n",
" <td>540.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Dublin 16</td>\n",
" <td>373.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Dublin 17</td>\n",
" <td>62.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Dublin 18</td>\n",
" <td>378.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Dublin 2</td>\n",
" <td>73.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Dublin 20</td>\n",
" <td>56.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Dublin 22</td>\n",
" <td>177.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>Dublin 23</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Dublin 24</td>\n",
" <td>383.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>Dublin 3</td>\n",
" <td>192.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>Dublin 4</td>\n",
" <td>241.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>Dublin 5</td>\n",
" <td>249.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>Dublin 6</td>\n",
" <td>250.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>Dublin 6W</td>\n",
" <td>204.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>Dublin 7</td>\n",
" <td>206.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>Dublin 8</td>\n",
" <td>215.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>Dublin 9</td>\n",
" <td>273.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" COUNTYNAME residential_heating_demand_gwh_per_year\n",
"0 Co. Dublin 1813.0\n",
"1 Dublin 1 116.0\n",
"2 Dublin 10 40.0\n",
"3 Dublin 11 198.0\n",
"4 Dublin 12 173.0\n",
"5 Dublin 13 317.0\n",
"6 Dublin 14 337.0\n",
"7 Dublin 15 540.0\n",
"8 Dublin 16 373.0\n",
"9 Dublin 17 62.0\n",
"10 Dublin 18 378.0\n",
"11 Dublin 2 73.0\n",
"12 Dublin 20 56.0\n",
"13 Dublin 22 177.0\n",
"14 Dublin 23 0.0\n",
"15 Dublin 24 383.0\n",
"16 Dublin 3 192.0\n",
"17 Dublin 4 241.0\n",
"18 Dublin 5 249.0\n",
"19 Dublin 6 250.0\n",
"20 Dublin 6W 204.0\n",
"21 Dublin 7 206.0\n",
"22 Dublin 8 215.0\n",
"23 Dublin 9 273.0"
]
},
"metadata": {
"tags": []
},
"execution_count": 23
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_aNCl344Iw4T"
},
"source": [
"# Commercial Building Heat Demands"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VahKjn2EM3_-"
},
"source": [
"## Link Valuation Office uses to CIBSE benchmarks:\n",
"\n",
"1. Read each CIBSE benchmark file in `benchmarks/uses` and store all listed uses in each file in a `Python Dictionary` under the benchmark name\n",
"\n",
"2. Read all benchmarks"
]
},
{
"cell_type": "code",
"metadata": {
"id": "PIYaY4M_M-sN"
},
"source": [
"dirpath = Path(\"benchmarks\") / \"uses\"\n",
"benchmark_uses = defaultdict()\n",
"for filepath in dirpath.glob(\"*.txt\"):\n",
" with open(filepath, \"r\") as file:\n",
" benchmark_uses[filepath.stem] = [line.rstrip() for line in file]\n",
"uses_linked_to_benchmarks = {i: k for k, v in benchmark_uses.items() for i in v}"
],
"execution_count": 24,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "D-B9yq72M_wN"
},
"source": [
"benchmarks = pd.read_excel(Path(\"benchmarks\") / \"benchmarks.xlsx\").dropna(\n",
" how=\"all\", axis=\"columns\"\n",
")"
],
"execution_count": 25,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "7S7I2PbOIsTc"
},
"source": [
"## On the Valuation office public dataset:\n",
"\n",
"1. Convert ` X ITM` & ` Y ITM` to `geometry` to enable spatial operations - i.e. locating buildings within a certain Postcode or Small Area\n",
"\n",
"2. Split `Uses` into its constituent building use categories so Uses==`PUB, Restaurant` becomes use_1==`PUB`, use_2==`RESTAURANT`\n",
"\n",
"3. Link the CIBSE benchmark categories with a corresponding building use.\n",
"\n",
"4. Assign an appropriate `[\"Typical fossil fuel [kWh/m²y]\", \"Typical fossil fuel [kWh/m²y]\", \"Typical Floor Area [m²]\"]` to each building based on `use_1` **so `use_2` is ignored**\n",
"\n",
"5. Bound the floor areas within `5 <= area <= Upper Bound` () to remove outlier floor areas<sup>1</sup>\n",
"\n",
"6. Apply `Sales Floor Area` factors to buildings where appropriate based on their benchmark category.\n",
"\n",
"7. Fill empty floor areas with `Typical Floor Area [m²]` based on the building benchmark category.\n",
"\n",
"8. Apply CIBSE `[\"Typical fossil fuel [kWh/m²y]\", \"Typical fossil fuel [kWh/m²y]\"]` to `inferred_floor_area_m2` and `typical_boiler_efficiency`==85% (as in Residential) & convert demands to MWh\n",
"\n",
"9. Link each building to its corresponding routing key boundary or Postcode.\n",
"\n",
"10. Remove all Public sector buildings as these are better accounted for using SEAI's Monitoring & Reporting dataset which contains actual values rather than benchmark-derived values.\n",
"\n",
"<br>\n",
"<hr>\n",
"<sup>1</sup> Where upper bound is specific to the benchmark category so that typically small buildings have a low bound and typically big buildings a high bound <br>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "vOpCTOhsKyAw"
},
"source": [
"dublin_valuation_office_public_raw = pd.read_csv(\n",
" \"dublin_valuation_office_public.csv\"\n",
")"
],
"execution_count": 26,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "d5xV-7PCO_Tr"
},
"source": [
"def convert_to_geodataframe(df, x, y, crs):\n",
" geometry = gpd.points_from_xy(df[x], df[y])\n",
" return gpd.GeoDataFrame(df, geometry=geometry, crs=crs).drop(columns=[x, y])"
],
"execution_count": 27,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "85HZswCjIrvD"
},
"source": [
"benchmark_columns = [\n",
" \"Benchmark\",\n",
" \"Typical fossil fuel [kWh/m²y]\",\n",
" \"Industrial space heat [kWh/m²y]\",\n",
" \"Typical Area [m²]\",\n",
" \"Area Upper Bound [m²]\",\n",
" \"GIA to Sales\",\n",
"]\n",
"public_sector_use_categories = [\n",
" \"BANK\",\n",
" \"CENTRE FOR ASYLUM SEEKERS\",\n",
" \"COLLEGE\",\n",
" \"FIRE STATION\",\n",
" \"GARDA STATION\",\n",
" \"HEALTH CENTRE\",\n",
" \"HEALTH FARM\",\n",
" \"HOSPITAL\",\n",
" \"LIBRARY\",\n",
" \"MEDICAL CENTRE\",\n",
" \"MUSEUM\",\n",
" \"MUSEUM HERITAGE / INTERPRETATIVE CENTRE\",\n",
" \"POST OFFICE\",\n",
" \"SCHOOL\", \n",
" \"SURGERY\",\n",
" \"THEATRE\",\n",
"]\n",
"typical_boiler_efficiency = 0.85\n",
"kwh_to_mwh_conversion_factor = 10 ** -3\n",
"dublin_valuation_office_public = (\n",
" dublin_valuation_office_public_raw.pipe(\n",
" convert_to_geodataframe, x=\" X ITM\", y=\" Y ITM\", crs=\"EPSG:2157\"\n",
" )\n",
" .join(\n",
" dublin_valuation_office_public_raw[\"Uses\"].str.split(\", \", expand=True)\n",
" ) # Split 'USE, -' into 'USE', '-'\n",
" .drop(columns=[2, 3]) # drop empty columns resulting from splitting `Uses`\n",
" .rename(columns={0: \"use_1\", 1: \"use_2\", \"Property Number\": \"ID\"})\n",
" .assign(\n",
" benchmark_1=lambda gdf: gdf[\"use_1\"]\n",
" .map(uses_linked_to_benchmarks)\n",
" .astype(str),\n",
" benchmark_2=lambda gdf: gdf[\"use_2\"]\n",
" .map(uses_linked_to_benchmarks)\n",
" .astype(str),\n",
" ID=lambda df: df[\"ID\"].astype(\"int32\"),\n",
" ) # link uses to benchmarks so can merge on common benchmarks\n",
" .merge(\n",
" benchmarks[benchmark_columns],\n",
" how=\"left\",\n",
" left_on=\"benchmark_1\",\n",
" right_on=\"Benchmark\",\n",
" )\n",
" .assign(\n",
" bounded_area_m2=lambda df: np.where(\n",
" (df[\"Area\"] > 5) & (df[\"Area\"] < df[\"Area Upper Bound [m²]\"]),\n",
" df[\"Area\"],\n",
" np.nan,\n",
" ), # Remove all areas outside of 5 <= area <= Upper Bound\n",
" inferred_area_m2=lambda df: np.round(\n",
" df[\"bounded_area_m2\"].fillna(df[\"Typical Area [m²]\"])\n",
" * df[\"GIA to Sales\"].fillna(1)\n",
" ),\n",
" area_is_estimated=lambda df: df[\"bounded_area_m2\"].isnull(),\n",
" heating_mwh_per_year=lambda df: np.round(\n",
" (\n",
" df[\"Typical fossil fuel [kWh/m²y]\"].fillna(0)\n",
" * typical_boiler_efficiency\n",
" * df[\"inferred_area_m2\"]\n",
" + df[\"Industrial space heat [kWh/m²y]\"].fillna(0)\n",
" * df[\"inferred_area_m2\"]\n",
" )\n",
" * kwh_to_mwh_conversion_factor\n",
" ),\n",
" )\n",
" .pipe(gpd.sjoin, dublin_routing_key_boundaries, op=\"within\")\n",
" .drop(columns=\"index_right\")\n",
" .query(\n",
" f\"use_1 not in {public_sector_use_categories}\"\n",
" ) # remove all public sector buildings\n",
")"
],
"execution_count": 28,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "TTVrAzKYLvXf",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 947
},
"outputId": "7a8217f1-838f-4512-93eb-94e7b1882ad2"
},
"source": [
"dublin_valuation_office_public"
],
"execution_count": 29,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ID</th>\n",
" <th>Publication Date</th>\n",
" <th>County</th>\n",
" <th>Local Authority</th>\n",
" <th>Valuation</th>\n",
" <th>Category</th>\n",
" <th>Uses</th>\n",
" <th>Address 1</th>\n",
" <th>Address 2</th>\n",
" <th>Address 3</th>\n",
" <th>Address 4</th>\n",
" <th>Address 5</th>\n",
" <th>Car Park</th>\n",
" <th>Level</th>\n",
" <th>Floor Use</th>\n",
" <th>Area</th>\n",
" <th>Nav Per M2</th>\n",
" <th>Nav</th>\n",
" <th>geometry</th>\n",
" <th>use_1</th>\n",
" <th>use_2</th>\n",
" <th>benchmark_1</th>\n",
" <th>benchmark_2</th>\n",
" <th>Benchmark</th>\n",
" <th>Typical fossil fuel [kWh/m²y]</th>\n",
" <th>Industrial space heat [kWh/m²y]</th>\n",
" <th>Typical Area [m²]</th>\n",
" <th>Area Upper Bound [m²]</th>\n",
" <th>GIA to Sales</th>\n",
" <th>bounded_area_m2</th>\n",
" <th>inferred_area_m2</th>\n",
" <th>area_is_estimated</th>\n",
" <th>heating_mwh_per_year</th>\n",
" <th>COUNTYNAME</th>\n",
" <th>RoutingKey</th>\n",
" <th>Descriptor</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1040566</td>\n",
" <td>17/09/2019</td>\n",
" <td>DUBLIN</td>\n",
" <td>FINGAL COUNTY COUNCIL</td>\n",
" <td>31200</td>\n",
" <td>LEISURE</td>\n",
" <td>CLUB HOUSE (GAA), -</td>\n",
" <td>HILLTOWN</td>\n",
" <td>DUBLIN</td>\n",
" <td>CO. DUBLIN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>CLUBHOUSE</td>\n",
" <td>624.83</td>\n",
" <td>50.0</td>\n",
" <td>31241.50</td>\n",
" <td>POINT (716686.970 746265.740)</td>\n",
" <td>CLUB HOUSE (GAA)</td>\n",
" <td>-</td>\n",
" <td>Public buildings with light usage</td>\n",
" <td>Unknown</td>\n",
" <td>Public buildings with light usage</td>\n",
" <td>105.0</td>\n",
" <td>NaN</td>\n",
" <td>700.0</td>\n",
" <td>10000.0</td>\n",
" <td>NaN</td>\n",
" <td>624.83</td>\n",
" <td>625.0</td>\n",
" <td>False</td>\n",
" <td>56.0</td>\n",
" <td>Co. Dublin</td>\n",
" <td>K67</td>\n",
" <td>SWORDS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>5004862</td>\n",
" <td>17/09/2019</td>\n",
" <td>DUBLIN</td>\n",
" <td>FINGAL COUNTY COUNCIL</td>\n",
" <td>50700</td>\n",
" <td>LEISURE</td>\n",
" <td>ACTIVITY CENTRE, -</td>\n",
" <td>SWORDS CENTRAL SHOPPING CENTRE</td>\n",
" <td>MAIN STREET (SWORDS)</td>\n",
" <td>DUBLIN</td>\n",
" <td>CO. DUBLIN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>SPORTS &amp; LEISURE</td>\n",
" <td>846.24</td>\n",
" <td>60.0</td>\n",
" <td>50774.40</td>\n",
" <td>POINT (718183.880 746491.390)</td>\n",
" <td>ACTIVITY CENTRE</td>\n",
" <td>-</td>\n",
" <td>Entertainment halls</td>\n",
" <td>Unknown</td>\n",
" <td>Entertainment halls</td>\n",
" <td>420.0</td>\n",
" <td>NaN</td>\n",
" <td>700.0</td>\n",
" <td>25000.0</td>\n",
" <td>NaN</td>\n",
" <td>846.24</td>\n",
" <td>846.0</td>\n",
" <td>False</td>\n",
" <td>302.0</td>\n",
" <td>Co. Dublin</td>\n",
" <td>K67</td>\n",
" <td>SWORDS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>5012884</td>\n",
" <td>17/09/2019</td>\n",
" <td>DUBLIN</td>\n",
" <td>FINGAL COUNTY COUNCIL</td>\n",
" <td>56800</td>\n",
" <td>LEISURE</td>\n",
" <td>EQUESTRIAN CENTRE, -</td>\n",
" <td>Monks Equestrian Centre</td>\n",
" <td>Kileek Lane</td>\n",
" <td>St Margarets</td>\n",
" <td>County Dublin</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>ARENA</td>\n",
" <td>2114.00</td>\n",
" <td>13.5</td>\n",
" <td>28539.00</td>\n",
" <td>POINT (714890.560 745232.220)</td>\n",
" <td>EQUESTRIAN CENTRE</td>\n",
" <td>-</td>\n",
" <td>Dry sports and leisure facility</td>\n",
" <td>Unknown</td>\n",
" <td>Dry sports and leisure facility</td>\n",
" <td>330.0</td>\n",
" <td>NaN</td>\n",
" <td>1700.0</td>\n",
" <td>7500.0</td>\n",
" <td>NaN</td>\n",
" <td>2114.00</td>\n",
" <td>2114.0</td>\n",
" <td>False</td>\n",
" <td>593.0</td>\n",
" <td>Co. Dublin</td>\n",
" <td>K67</td>\n",
" <td>SWORDS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>5012884</td>\n",
" <td>17/09/2019</td>\n",
" <td>DUBLIN</td>\n",
" <td>FINGAL COUNTY COUNCIL</td>\n",
" <td>56800</td>\n",
" <td>LEISURE</td>\n",
" <td>EQUESTRIAN CENTRE, -</td>\n",
" <td>Monks Equestrian Centre</td>\n",
" <td>Kileek Lane</td>\n",
" <td>St Margarets</td>\n",
" <td>County Dublin</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>OFFICE(S)</td>\n",
" <td>89.64</td>\n",
" <td>15.0</td>\n",
" <td>1344.60</td>\n",
" <td>POINT (714890.560 745232.220)</td>\n",
" <td>EQUESTRIAN CENTRE</td>\n",
" <td>-</td>\n",
" <td>Dry sports and leisure facility</td>\n",
" <td>Unknown</td>\n",
" <td>Dry sports and leisure facility</td>\n",
" <td>330.0</td>\n",
" <td>NaN</td>\n",
" <td>1700.0</td>\n",
" <td>7500.0</td>\n",
" <td>NaN</td>\n",
" <td>89.64</td>\n",
" <td>90.0</td>\n",
" <td>False</td>\n",
" <td>25.0</td>\n",
" <td>Co. Dublin</td>\n",
" <td>K67</td>\n",
" <td>SWORDS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>5012884</td>\n",
" <td>17/09/2019</td>\n",
" <td>DUBLIN</td>\n",
" <td>FINGAL COUNTY COUNCIL</td>\n",
" <td>56800</td>\n",
" <td>LEISURE</td>\n",
" <td>EQUESTRIAN CENTRE, -</td>\n",
" <td>Monks Equestrian Centre</td>\n",
" <td>Kileek Lane</td>\n",
" <td>St Margarets</td>\n",
" <td>County Dublin</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STABLES</td>\n",
" <td>1800.36</td>\n",
" <td>15.0</td>\n",
" <td>27005.40</td>\n",
" <td>POINT (714890.560 745232.220)</td>\n",
" <td>EQUESTRIAN CENTRE</td>\n",
" <td>-</td>\n",
" <td>Dry sports and leisure facility</td>\n",
" <td>Unknown</td>\n",
" <td>Dry sports and leisure facility</td>\n",
" <td>330.0</td>\n",
" <td>NaN</td>\n",
" <td>1700.0</td>\n",
" <td>7500.0</td>\n",
" <td>NaN</td>\n",
" <td>1800.36</td>\n",
" <td>1800.0</td>\n",
" <td>False</td>\n",
" <td>505.0</td>\n",
" <td>Co. Dublin</td>\n",
" <td>K67</td>\n",
" <td>SWORDS</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89951</th>\n",
" <td>894450</td>\n",
" <td>15/09/2017</td>\n",
" <td>DUBLIN</td>\n",
" <td>SOUTH DUBLIN COUNTY COUNCIL</td>\n",
" <td>35000</td>\n",
" <td>RETAIL (SHOPS)</td>\n",
" <td>SHOP, -</td>\n",
" <td>12 The Mill Centre</td>\n",
" <td>Clondalkin</td>\n",
" <td>Dublin 22</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>RETAIL ZONE C</td>\n",
" <td>4.27</td>\n",
" <td>125.0</td>\n",
" <td>533.75</td>\n",
" <td>POINT (706834.510 731719.520)</td>\n",
" <td>SHOP</td>\n",
" <td>-</td>\n",
" <td>General retail</td>\n",
" <td>Unknown</td>\n",
" <td>General retail</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>50.0</td>\n",
" <td>7500.0</td>\n",
" <td>0.67</td>\n",
" <td>NaN</td>\n",
" <td>34.0</td>\n",
" <td>True</td>\n",
" <td>0.0</td>\n",
" <td>Dublin 22</td>\n",
" <td>D22</td>\n",
" <td>DUBLIN 22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89952</th>\n",
" <td>894450</td>\n",
" <td>15/09/2017</td>\n",
" <td>DUBLIN</td>\n",
" <td>SOUTH DUBLIN COUNTY COUNCIL</td>\n",
" <td>35000</td>\n",
" <td>RETAIL (SHOPS)</td>\n",
" <td>SHOP, -</td>\n",
" <td>12 The Mill Centre</td>\n",
" <td>Clondalkin</td>\n",
" <td>Dublin 22</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>MEZZ</td>\n",
" <td>STORE</td>\n",
" <td>39.06</td>\n",
" <td>170.0</td>\n",
" <td>6640.20</td>\n",
" <td>POINT (706834.510 731719.520)</td>\n",
" <td>SHOP</td>\n",
" <td>-</td>\n",
" <td>General retail</td>\n",
" <td>Unknown</td>\n",
" <td>General retail</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>50.0</td>\n",
" <td>7500.0</td>\n",
" <td>0.67</td>\n",
" <td>39.06</td>\n",
" <td>26.0</td>\n",
" <td>False</td>\n",
" <td>0.0</td>\n",
" <td>Dublin 22</td>\n",
" <td>D22</td>\n",
" <td>DUBLIN 22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89968</th>\n",
" <td>2150843</td>\n",
" <td>17/08/2020</td>\n",
" <td>DUBLIN</td>\n",
" <td>SOUTH DUBLIN COUNTY COUNCIL</td>\n",
" <td>5000</td>\n",
" <td>RETAIL (SHOPS)</td>\n",
" <td>ATM, -</td>\n",
" <td>Unit 30 The Mill Centre</td>\n",
" <td>Clondalkin</td>\n",
" <td>Dublin 22</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>ATM</td>\n",
" <td>1.00</td>\n",
" <td>5000.0</td>\n",
" <td>5000.00</td>\n",
" <td>POINT (706849.210 731722.380)</td>\n",
" <td>ATM</td>\n",
" <td>-</td>\n",
" <td>None</td>\n",
" <td>Unknown</td>\n",
" <td>None</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>True</td>\n",
" <td>NaN</td>\n",
" <td>Dublin 22</td>\n",
" <td>D22</td>\n",
" <td>DUBLIN 22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89970</th>\n",
" <td>1544779</td>\n",
" <td>17/08/2020</td>\n",
" <td>DUBLIN</td>\n",
" <td>SOUTH DUBLIN COUNTY COUNCIL</td>\n",
" <td>7000</td>\n",
" <td>RETAIL (SHOPS)</td>\n",
" <td>ATM, -</td>\n",
" <td>ATM</td>\n",
" <td>Liffey Valley Shopping Centre</td>\n",
" <td>Quarryvale</td>\n",
" <td>Dublin 22</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>ATM</td>\n",
" <td>1.00</td>\n",
" <td>7000.0</td>\n",
" <td>7000.00</td>\n",
" <td>POINT (707164.000 734861.170)</td>\n",
" <td>ATM</td>\n",
" <td>-</td>\n",
" <td>None</td>\n",
" <td>Unknown</td>\n",
" <td>None</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>True</td>\n",
" <td>NaN</td>\n",
" <td>Dublin 22</td>\n",
" <td>D22</td>\n",
" <td>DUBLIN 22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89975</th>\n",
" <td>2170516</td>\n",
" <td>15/09/2017</td>\n",
" <td>DUBLIN</td>\n",
" <td>SOUTH DUBLIN COUNTY COUNCIL</td>\n",
" <td>6000</td>\n",
" <td>RETAIL (SHOPS)</td>\n",
" <td>ATM, -</td>\n",
" <td>1F.3B/1 Fonthill Road</td>\n",
" <td>Clondalkin</td>\n",
" <td>Dublin 22</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>ATM</td>\n",
" <td>1.00</td>\n",
" <td>6000.0</td>\n",
" <td>6000.00</td>\n",
" <td>POINT (707011.830 730548.200)</td>\n",
" <td>ATM</td>\n",
" <td>-</td>\n",
" <td>None</td>\n",
" <td>Unknown</td>\n",
" <td>None</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>0.0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>True</td>\n",
" <td>NaN</td>\n",
" <td>Dublin 22</td>\n",
" <td>D22</td>\n",
" <td>DUBLIN 22</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>95940 rows × 36 columns</p>\n",
"</div>"
],
"text/plain": [
" ID Publication Date County ... COUNTYNAME RoutingKey Descriptor\n",
"0 1040566 17/09/2019 DUBLIN ... Co. Dublin K67 SWORDS\n",
"3 5004862 17/09/2019 DUBLIN ... Co. Dublin K67 SWORDS\n",
"16 5012884 17/09/2019 DUBLIN ... Co. Dublin K67 SWORDS\n",
"17 5012884 17/09/2019 DUBLIN ... Co. Dublin K67 SWORDS\n",
"18 5012884 17/09/2019 DUBLIN ... Co. Dublin K67 SWORDS\n",
"... ... ... ... ... ... ... ...\n",
"89951 894450 15/09/2017 DUBLIN ... Dublin 22 D22 DUBLIN 22\n",
"89952 894450 15/09/2017 DUBLIN ... Dublin 22 D22 DUBLIN 22\n",
"89968 2150843 17/08/2020 DUBLIN ... Dublin 22 D22 DUBLIN 22\n",
"89970 1544779 17/08/2020 DUBLIN ... Dublin 22 D22 DUBLIN 22\n",
"89975 2170516 15/09/2017 DUBLIN ... Dublin 22 D22 DUBLIN 22\n",
"\n",
"[95940 rows x 36 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 29
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "23hXAgul0X_R"
},
"source": [
"## Amalgamate buildings to Postcode level"
]
},
{
"cell_type": "code",
"metadata": {
"id": "EbG1pQxYz9xQ"
},
"source": [
"mwh_to_gwh_conversion_factor = 10**-3\n",
"commercial_postcode_heat_demand_gwh_per_year = (\n",
" dublin_valuation_office_public.groupby(\"COUNTYNAME\")\n",
" [\"heating_mwh_per_year\"]\n",
" .sum()\n",
" .multiply(mwh_to_gwh_conversion_factor)\n",
" .round()\n",
" .rename(\"commercial_heating_demand_gwh_per_year\")\n",
" .reset_index()\n",
")"
],
"execution_count": 30,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 770
},
"id": "K9wK89ZE0UgH",
"outputId": "82037197-9575-42cf-f8c3-7c8abb1fefbc"
},
"source": [
"commercial_postcode_heat_demand_gwh_per_year"
],
"execution_count": 31,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>COUNTYNAME</th>\n",
" <th>commercial_heating_demand_gwh_per_year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Co. Dublin</td>\n",
" <td>521.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Dublin 1</td>\n",
" <td>250.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Dublin 10</td>\n",
" <td>59.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Dublin 11</td>\n",
" <td>235.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Dublin 12</td>\n",
" <td>298.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Dublin 13</td>\n",
" <td>72.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Dublin 14</td>\n",
" <td>21.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Dublin 15</td>\n",
" <td>325.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Dublin 16</td>\n",
" <td>31.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Dublin 17</td>\n",
" <td>83.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Dublin 18</td>\n",
" <td>105.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Dublin 2</td>\n",
" <td>263.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Dublin 20</td>\n",
" <td>14.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Dublin 22</td>\n",
" <td>250.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>Dublin 24</td>\n",
" <td>314.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Dublin 3</td>\n",
" <td>76.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>Dublin 4</td>\n",
" <td>132.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>Dublin 5</td>\n",
" <td>42.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>Dublin 6</td>\n",
" <td>29.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>Dublin 6W</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>Dublin 7</td>\n",
" <td>69.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>Dublin 8</td>\n",
" <td>90.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>Dublin 9</td>\n",
" <td>70.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" COUNTYNAME commercial_heating_demand_gwh_per_year\n",
"0 Co. Dublin 521.0\n",
"1 Dublin 1 250.0\n",
"2 Dublin 10 59.0\n",
"3 Dublin 11 235.0\n",
"4 Dublin 12 298.0\n",
"5 Dublin 13 72.0\n",
"6 Dublin 14 21.0\n",
"7 Dublin 15 325.0\n",
"8 Dublin 16 31.0\n",
"9 Dublin 17 83.0\n",
"10 Dublin 18 105.0\n",
"11 Dublin 2 263.0\n",
"12 Dublin 20 14.0\n",
"13 Dublin 22 250.0\n",
"14 Dublin 24 314.0\n",
"15 Dublin 3 76.0\n",
"16 Dublin 4 132.0\n",
"17 Dublin 5 42.0\n",
"18 Dublin 6 29.0\n",
"19 Dublin 6W 12.0\n",
"20 Dublin 7 69.0\n",
"21 Dublin 8 90.0\n",
"22 Dublin 9 70.0"
]
},
"metadata": {
"tags": []
},
"execution_count": 31
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "y-IET27J1zI-"
},
"source": [
"# Public sector buildings\n",
"\n",
"1. Multiply aggregated measured gas demands by `typical_boiler_efficiency`==85% as in Residential"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Sf3R7O9i12Ap"
},
"source": [
"typical_boiler_efficiency = 0.85\n",
"dublin_public_sector_postcode_heat_demand_gwh_per_year = (\n",
" pd.read_csv(\n",
" \"dublin_public_sector_gas_demand_2018_gwh_per_year.csv\"\n",
" )\n",
" .assign(\n",
" public_sector_heating_demand_gwh_per_year=lambda df:\n",
" np.round(\n",
" df[\"public_sector_gas_demand_2018_gwh_per_year\"]\n",
" * typical_boiler_efficiency\n",
" )\n",
" )\n",
" .rename(columns={\"postcode\": \"COUNTYNAME\"})\n",
")"
],
"execution_count": 32,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 770
},
"id": "EKSL6PBw43em",
"outputId": "8569e972-67a8-46c0-83f0-0ce50b96de75"
},
"source": [
"dublin_public_sector_postcode_heat_demand_gwh_per_year"
],
"execution_count": 33,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>COUNTYNAME</th>\n",
" <th>public_sector_gas_demand_2018_gwh_per_year</th>\n",
" <th>public_sector_heating_demand_gwh_per_year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Co. Dublin</td>\n",
" <td>76.324933</td>\n",
" <td>65.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Dublin 1</td>\n",
" <td>36.814455</td>\n",
" <td>31.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Dublin 10</td>\n",
" <td>24.883521</td>\n",
" <td>21.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Dublin 11</td>\n",
" <td>22.715774</td>\n",
" <td>19.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Dublin 12</td>\n",
" <td>23.665470</td>\n",
" <td>20.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Dublin 13</td>\n",
" <td>3.211683</td>\n",
" <td>3.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Dublin 14</td>\n",
" <td>5.976399</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Dublin 15</td>\n",
" <td>47.604386</td>\n",
" <td>40.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Dublin 16</td>\n",
" <td>6.276551</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Dublin 17</td>\n",
" <td>1.372908</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Dublin 18</td>\n",
" <td>5.664175</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Dublin 2</td>\n",
" <td>68.669112</td>\n",
" <td>58.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Dublin 20</td>\n",
" <td>11.539924</td>\n",
" <td>10.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Dublin 22</td>\n",
" <td>7.189207</td>\n",
" <td>6.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>Dublin 24</td>\n",
" <td>32.429548</td>\n",
" <td>28.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Dublin 3</td>\n",
" <td>13.888130</td>\n",
" <td>12.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>Dublin 4</td>\n",
" <td>89.667099</td>\n",
" <td>76.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>Dublin 5</td>\n",
" <td>12.488888</td>\n",
" <td>11.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>Dublin 6</td>\n",
" <td>26.128051</td>\n",
" <td>22.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>Dublin 6W</td>\n",
" <td>5.513086</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>Dublin 7</td>\n",
" <td>44.392043</td>\n",
" <td>38.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>Dublin 8</td>\n",
" <td>48.485961</td>\n",
" <td>41.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>Dublin 9</td>\n",
" <td>60.730797</td>\n",
" <td>52.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" COUNTYNAME ... public_sector_heating_demand_gwh_per_year\n",
"0 Co. Dublin ... 65.0\n",
"1 Dublin 1 ... 31.0\n",
"2 Dublin 10 ... 21.0\n",
"3 Dublin 11 ... 19.0\n",
"4 Dublin 12 ... 20.0\n",
"5 Dublin 13 ... 3.0\n",
"6 Dublin 14 ... 5.0\n",
"7 Dublin 15 ... 40.0\n",
"8 Dublin 16 ... 5.0\n",
"9 Dublin 17 ... 1.0\n",
"10 Dublin 18 ... 5.0\n",
"11 Dublin 2 ... 58.0\n",
"12 Dublin 20 ... 10.0\n",
"13 Dublin 22 ... 6.0\n",
"14 Dublin 24 ... 28.0\n",
"15 Dublin 3 ... 12.0\n",
"16 Dublin 4 ... 76.0\n",
"17 Dublin 5 ... 11.0\n",
"18 Dublin 6 ... 22.0\n",
"19 Dublin 6W ... 5.0\n",
"20 Dublin 7 ... 38.0\n",
"21 Dublin 8 ... 41.0\n",
"22 Dublin 9 ... 52.0\n",
"\n",
"[23 rows x 3 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 33
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wdTtFXcMwEbM"
},
"source": [
"# Combine Demands"
]
},
{
"cell_type": "code",
"metadata": {
"id": "g9u5QR95MCtW"
},
"source": [
"postcode_heating_demand = (\n",
" residential_postcode_heat_demand_gwh_per_year.merge(\n",
" commercial_postcode_heat_demand_gwh_per_year\n",
" )\n",
" .merge(\n",
" dublin_public_sector_postcode_heat_demand_gwh_per_year\n",
" )\n",
" .assign(\n",
" total_heating_demand_gwh_per_year=lambda df:\n",
" df[\"residential_heating_demand_gwh_per_year\"]\n",
" + df[\"commercial_heating_demand_gwh_per_year\"]\n",
" + df[\"public_sector_heating_demand_gwh_per_year\"]\n",
" )\n",
")"
],
"execution_count": 34,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 790
},
"id": "zw8916tO1cih",
"outputId": "6ff55d66-f83d-4259-c168-33a089b3c30e"
},
"source": [
"postcode_heating_demand"
],
"execution_count": 35,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>COUNTYNAME</th>\n",
" <th>residential_heating_demand_gwh_per_year</th>\n",
" <th>commercial_heating_demand_gwh_per_year</th>\n",
" <th>public_sector_gas_demand_2018_gwh_per_year</th>\n",
" <th>public_sector_heating_demand_gwh_per_year</th>\n",
" <th>total_heating_demand_gwh_per_year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Co. Dublin</td>\n",
" <td>1813.0</td>\n",
" <td>521.0</td>\n",
" <td>76.324933</td>\n",
" <td>65.0</td>\n",
" <td>2399.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Dublin 1</td>\n",
" <td>116.0</td>\n",
" <td>250.0</td>\n",
" <td>36.814455</td>\n",
" <td>31.0</td>\n",
" <td>397.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Dublin 10</td>\n",
" <td>40.0</td>\n",
" <td>59.0</td>\n",
" <td>24.883521</td>\n",
" <td>21.0</td>\n",
" <td>120.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Dublin 11</td>\n",
" <td>198.0</td>\n",
" <td>235.0</td>\n",
" <td>22.715774</td>\n",
" <td>19.0</td>\n",
" <td>452.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Dublin 12</td>\n",
" <td>173.0</td>\n",
" <td>298.0</td>\n",
" <td>23.665470</td>\n",
" <td>20.0</td>\n",
" <td>491.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Dublin 13</td>\n",
" <td>317.0</td>\n",
" <td>72.0</td>\n",
" <td>3.211683</td>\n",
" <td>3.0</td>\n",
" <td>392.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Dublin 14</td>\n",
" <td>337.0</td>\n",
" <td>21.0</td>\n",
" <td>5.976399</td>\n",
" <td>5.0</td>\n",
" <td>363.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Dublin 15</td>\n",
" <td>540.0</td>\n",
" <td>325.0</td>\n",
" <td>47.604386</td>\n",
" <td>40.0</td>\n",
" <td>905.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Dublin 16</td>\n",
" <td>373.0</td>\n",
" <td>31.0</td>\n",
" <td>6.276551</td>\n",
" <td>5.0</td>\n",
" <td>409.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>Dublin 17</td>\n",
" <td>62.0</td>\n",
" <td>83.0</td>\n",
" <td>1.372908</td>\n",
" <td>1.0</td>\n",
" <td>146.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>Dublin 18</td>\n",
" <td>378.0</td>\n",
" <td>105.0</td>\n",
" <td>5.664175</td>\n",
" <td>5.0</td>\n",
" <td>488.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>Dublin 2</td>\n",
" <td>73.0</td>\n",
" <td>263.0</td>\n",
" <td>68.669112</td>\n",
" <td>58.0</td>\n",
" <td>394.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>Dublin 20</td>\n",
" <td>56.0</td>\n",
" <td>14.0</td>\n",
" <td>11.539924</td>\n",
" <td>10.0</td>\n",
" <td>80.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>Dublin 22</td>\n",
" <td>177.0</td>\n",
" <td>250.0</td>\n",
" <td>7.189207</td>\n",
" <td>6.0</td>\n",
" <td>433.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>Dublin 24</td>\n",
" <td>383.0</td>\n",
" <td>314.0</td>\n",
" <td>32.429548</td>\n",
" <td>28.0</td>\n",
" <td>725.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Dublin 3</td>\n",
" <td>192.0</td>\n",
" <td>76.0</td>\n",
" <td>13.888130</td>\n",
" <td>12.0</td>\n",
" <td>280.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>Dublin 4</td>\n",
" <td>241.0</td>\n",
" <td>132.0</td>\n",
" <td>89.667099</td>\n",
" <td>76.0</td>\n",
" <td>449.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>Dublin 5</td>\n",
" <td>249.0</td>\n",
" <td>42.0</td>\n",
" <td>12.488888</td>\n",
" <td>11.0</td>\n",
" <td>302.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>Dublin 6</td>\n",
" <td>250.0</td>\n",
" <td>29.0</td>\n",
" <td>26.128051</td>\n",
" <td>22.0</td>\n",
" <td>301.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>Dublin 6W</td>\n",
" <td>204.0</td>\n",
" <td>12.0</td>\n",
" <td>5.513086</td>\n",
" <td>5.0</td>\n",
" <td>221.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>Dublin 7</td>\n",
" <td>206.0</td>\n",
" <td>69.0</td>\n",
" <td>44.392043</td>\n",
" <td>38.0</td>\n",
" <td>313.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>Dublin 8</td>\n",
" <td>215.0</td>\n",
" <td>90.0</td>\n",
" <td>48.485961</td>\n",
" <td>41.0</td>\n",
" <td>346.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>Dublin 9</td>\n",
" <td>273.0</td>\n",
" <td>70.0</td>\n",
" <td>60.730797</td>\n",
" <td>52.0</td>\n",
" <td>395.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" COUNTYNAME ... total_heating_demand_gwh_per_year\n",
"0 Co. Dublin ... 2399.0\n",
"1 Dublin 1 ... 397.0\n",
"2 Dublin 10 ... 120.0\n",
"3 Dublin 11 ... 452.0\n",
"4 Dublin 12 ... 491.0\n",
"5 Dublin 13 ... 392.0\n",
"6 Dublin 14 ... 363.0\n",
"7 Dublin 15 ... 905.0\n",
"8 Dublin 16 ... 409.0\n",
"9 Dublin 17 ... 146.0\n",
"10 Dublin 18 ... 488.0\n",
"11 Dublin 2 ... 394.0\n",
"12 Dublin 20 ... 80.0\n",
"13 Dublin 22 ... 433.0\n",
"14 Dublin 24 ... 725.0\n",
"15 Dublin 3 ... 280.0\n",
"16 Dublin 4 ... 449.0\n",
"17 Dublin 5 ... 302.0\n",
"18 Dublin 6 ... 301.0\n",
"19 Dublin 6W ... 221.0\n",
"20 Dublin 7 ... 313.0\n",
"21 Dublin 8 ... 346.0\n",
"22 Dublin 9 ... 395.0\n",
"\n",
"[23 rows x 6 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 35
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1Si1VQecIvXP"
},
"source": [
"# Compare Demands to Dublin Gas Totals\n",
"\n",
"- [Gas Networks Ireland Networked Gas Consumption 2019](https://www.cso.ie/en/releasesandpublications/er/ngc/networkedgasconsumption2019/) (GNI)\n",
"- [CSO Census 2016](https://www.cso.ie/en/census/census2016reports/census2016smallareapopulationstatistics/) (CSO)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "1iW3809HIuzX"
},
"source": [
"dublin_residential_gas_total_gwh_per_year = 4608 # GNI\n",
"dublin_non_residential_gas_total_gwh_per_year = 4545 # GNI\n",
"\n",
"gas_as_percentage_of_all_residential = 0.68 # CSO\n",
"\n",
"total_non_residential_meters = 15040\n",
"total_unique_non_residential_property_ids = len(\n",
" dublin_valuation_office_public[\"ID\"].unique()\n",
")\n",
"gas_as_percentage_of_all_non_residential = (\n",
" total_non_residential_meters / total_unique_non_residential_property_ids\n",
")\n",
"\n",
"typical_boiler_efficiency = 0.85 # assumption"
],
"execution_count": 36,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "AAiLwYGgZPhC",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 36
},
"outputId": "8783ecad-163c-4e1e-93cd-714339e1173d"
},
"source": [
"gni_residential_heat_demand_gwh_per_year = (\n",
" dublin_residential_gas_total_gwh_per_year\n",
" * (1 / gas_as_percentage_of_all_residential)\n",
" * typical_boiler_efficiency\n",
")\n",
"display(gni_residential_heat_demand_gwh_per_year)"
],
"execution_count": 37,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"5759.999999999999"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "HSKQZDyQbz3s",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 36
},
"outputId": "a87097ff-3dea-45df-8751-b855d730271d"
},
"source": [
"codema_residential_heat_demand_gwh_per_year = (\n",
" postcode_heating_demand[\"residential_heating_demand_gwh_per_year\"].sum()\n",
")\n",
"display(codema_residential_heat_demand_gwh_per_year)"
],
"execution_count": 38,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"6866.0"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "4_93KLSbb1Ro",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 36
},
"outputId": "4d7aa297-69b6-4c6e-c0d0-3bd8860104c3"
},
"source": [
"gni_non_residential_heat_demand_gwh_per_year = (\n",
" dublin_non_residential_gas_total_gwh_per_year\n",
" * (1 / gas_as_percentage_of_all_non_residential)\n",
" * typical_boiler_efficiency\n",
")\n",
"display(gni_non_residential_heat_demand_gwh_per_year)"
],
"execution_count": 39,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"9741.092403590425"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "vI146lEub2WC",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 36
},
"outputId": "a8de0a0d-238f-4a60-8a45-b121d9075471"
},
"source": [
"codema_non_residential_heat_demand_gwh_per_year = (\n",
" postcode_heating_demand[\"commercial_heating_demand_gwh_per_year\"].sum()\n",
" + postcode_heating_demand[\"public_sector_heating_demand_gwh_per_year\"].sum()\n",
")\n",
"display(codema_non_residential_heat_demand_gwh_per_year)"
],
"execution_count": 40,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"3935.0"
]
},
"metadata": {
"tags": []
}
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment