|
12 | 12 | "[Monte Carlo](https://en.wikipedia.org/wiki/Monte_Carlo_method)\n",
|
13 | 13 | "simulation over a number of theoretical homes that closely\n",
|
14 | 14 | "resemble the target home and, taken as a whole, \n",
|
15 |
| - "probabalistically represent it. \n", |
| 15 | + "probabilistically represent it. \n", |
16 | 16 | "\n",
|
17 | 17 | "We do this because we generally don't know everything about each\n",
|
18 | 18 | "home. We have a large database of home properties\n",
|
|
22 | 22 | "[conditional probability distribution](https://github.com/NREL/resstock/tree/develop/project_national/housing_characteristics) based on the properties\n",
|
23 | 23 | "that we do know. We then predict the energy consumption for each \n",
|
24 | 24 | "sample home using a machine learning model, which yields\n",
|
25 |
| - "a distribution of outcomes that probablistically represents the\n", |
| 25 | + "a distribution of outcomes that probabilistically represents the\n", |
26 | 26 | "query home's energy consumption under the baseline and upgrade scenarios.\n",
|
27 | 27 | "We compute statistics across the this distribution to decide\n",
|
28 | 28 | "what is likely to happen in the query home.\n",
|
|
41 | 41 | "work, describe how they are computed, and discuss how and why\n",
|
42 | 42 | "they should or should not be used in particular ways.\n",
|
43 | 43 | "\n",
|
| 44 | + "To learn more about modeling only baseline\n", |
| 45 | + "view the [REM Core Demo notebook](https://github.com/rewiringamerica/api_demos/tree/main/notebooks/REM%20Demo).\n", |
| 46 | + "\n", |
| 47 | + "\n", |
44 | 48 | "## Imports and Configuration"
|
45 | 49 | ]
|
46 | 50 | },
|
|
100 | 104 | "metadata": {},
|
101 | 105 | "outputs": [],
|
102 | 106 | "source": [
|
103 |
| - "address = '165 Hope St, Providence, RI 02906'\n", |
104 |
| - "upgrade = \"med_eff_hp_hers_sizing_no_setback\"\n", |
105 |
| - "heating_fuel = 'fuel_oil'" |
| 107 | + "address = \"165 Hope St, Providence, RI 02906\"\n", |
| 108 | + "upgrade = \"hvac__heat_pump_seer18_hspf10\"\n", |
| 109 | + "heating_fuel = \"fuel_oil\"" |
106 | 110 | ]
|
107 | 111 | },
|
108 | 112 | {
|
|
125 | 129 | "response = requests.get(\n",
|
126 | 130 | " url=REM_ADDRESS_URL,\n",
|
127 | 131 | " headers=headers,\n",
|
128 |
| - " params=dict(\n", |
129 |
| - " address=address, upgrade=upgrade, heating_fuel=heating_fuel\n", |
130 |
| - " )\n", |
| 132 | + " params=dict(address=address, upgrade=upgrade, heating_fuel=heating_fuel),\n", |
131 | 133 | ")"
|
132 | 134 | ]
|
133 | 135 | },
|
|
191 | 193 | {
|
192 | 194 | "data": {
|
193 | 195 | "text/plain": [
|
194 |
| - "{'energy': {'mean': {'value': 1896.4884, 'units': 'gallon'},\n", |
195 |
| - " 'median': {'value': 1835.3018, 'units': 'gallon'},\n", |
196 |
| - " 'percentile_20': {'value': 1421.099, 'units': 'gallon'},\n", |
197 |
| - " 'percentile_80': {'value': 2339.4446, 'units': 'gallon'}},\n", |
198 |
| - " 'emissions': {'mean': {'value': 23339.9604, 'units': 'kgCO2e'},\n", |
199 |
| - " 'median': {'value': 22586.9408, 'units': 'kgCO2e'},\n", |
200 |
| - " 'percentile_20': {'value': 17489.3729, 'units': 'kgCO2e'},\n", |
201 |
| - " 'percentile_80': {'value': 28791.3938, 'units': 'kgCO2e'}},\n", |
202 |
| - " 'cost': {'mean': {'value': 7583.0636, 'units': '$'},\n", |
203 |
| - " 'median': {'value': 7338.4104, 'units': '$'},\n", |
204 |
| - " 'percentile_20': {'value': 5682.2301, 'units': '$'},\n", |
205 |
| - " 'percentile_80': {'value': 9354.2134, 'units': '$'}}}" |
| 196 | + "{'energy': {'mean': {'value': 1639.9717, 'unit': 'gallon'},\n", |
| 197 | + " 'median': {'value': 1592.8951, 'unit': 'gallon'},\n", |
| 198 | + " 'percentile_20': {'value': 1217.5114, 'unit': 'gallon'},\n", |
| 199 | + " 'percentile_80': {'value': 2014.3037, 'unit': 'gallon'}},\n", |
| 200 | + " 'emissions': {'mean': {'value': 20183.0257, 'unit': 'kgCO2e'},\n", |
| 201 | + " 'median': {'value': 19603.6575, 'unit': 'kgCO2e'},\n", |
| 202 | + " 'percentile_20': {'value': 14983.8342, 'unit': 'kgCO2e'},\n", |
| 203 | + " 'percentile_80': {'value': 24789.9057, 'unit': 'kgCO2e'}},\n", |
| 204 | + " 'cost': {'mean': {'value': 6557.3876, 'unit': '$'},\n", |
| 205 | + " 'median': {'value': 6369.1531, 'unit': '$'},\n", |
| 206 | + " 'percentile_20': {'value': 4868.1902, 'unit': '$'},\n", |
| 207 | + " 'percentile_80': {'value': 8054.1452, 'unit': '$'}}}" |
206 | 208 | ]
|
207 | 209 | },
|
208 | 210 | "execution_count": 9,
|
|
211 | 213 | }
|
212 | 214 | ],
|
213 | 215 | "source": [
|
214 |
| - "fuel_results['fuel_oil']['baseline']" |
| 216 | + "fuel_results[\"fuel_oil\"][\"baseline\"]" |
215 | 217 | ]
|
216 | 218 | },
|
217 | 219 | {
|
|
223 | 225 | {
|
224 | 226 | "data": {
|
225 | 227 | "text/plain": [
|
226 |
| - "{'electricity': {'value': 0.1241, 'units': 'kgCO2e/kWh'},\n", |
227 |
| - " 'natural_gas': {'value': 6.6798, 'units': 'kgCO2e/therm'},\n", |
228 |
| - " 'fuel_oil': {'value': 12.3069, 'units': 'kgCO2e/gallon'},\n", |
229 |
| - " 'propane': {'value': 7.3776, 'units': 'kgCO2e/gallon'}}" |
| 228 | + "{'electricity': {'value': 0.1241, 'unit': 'kgCO2e/kWh'},\n", |
| 229 | + " 'natural_gas': {'value': 6.6798, 'unit': 'kgCO2e/therm'},\n", |
| 230 | + " 'fuel_oil': {'value': 12.3069, 'unit': 'kgCO2e/gallon'},\n", |
| 231 | + " 'propane': {'value': 7.3776, 'unit': 'kgCO2e/gallon'}}" |
230 | 232 | ]
|
231 | 233 | },
|
232 | 234 | "execution_count": 10,
|
|
235 | 237 | }
|
236 | 238 | ],
|
237 | 239 | "source": [
|
238 |
| - "data['emissions_factors']" |
| 240 | + "data[\"emissions_factors\"]" |
239 | 241 | ]
|
240 | 242 | },
|
241 | 243 | {
|
|
245 | 247 | "source": [
|
246 | 248 | "## Let's look at fuel oil, since that's what we are replacing\n",
|
247 | 249 | "\n",
|
248 |
| - "It's a fairly big block of nested dictionaries, but we will go through it peice by\n", |
249 |
| - "peice." |
| 250 | + "It's a fairly big block of nested dictionaries, but we will go through it piece by\n", |
| 251 | + "piece." |
250 | 252 | ]
|
251 | 253 | },
|
252 | 254 | {
|
|
268 | 270 | {
|
269 | 271 | "data": {
|
270 | 272 | "text/plain": [
|
271 |
| - "{'baseline': {'energy': {'mean': {'value': 1896.4884, 'units': 'gallon'},\n", |
272 |
| - " 'median': {'value': 1835.3018, 'units': 'gallon'},\n", |
273 |
| - " 'percentile_20': {'value': 1421.099, 'units': 'gallon'},\n", |
274 |
| - " 'percentile_80': {'value': 2339.4446, 'units': 'gallon'}},\n", |
275 |
| - " 'emissions': {'mean': {'value': 23339.9604, 'units': 'kgCO2e'},\n", |
276 |
| - " 'median': {'value': 22586.9408, 'units': 'kgCO2e'},\n", |
277 |
| - " 'percentile_20': {'value': 17489.3729, 'units': 'kgCO2e'},\n", |
278 |
| - " 'percentile_80': {'value': 28791.3938, 'units': 'kgCO2e'}},\n", |
279 |
| - " 'cost': {'mean': {'value': 7583.0636, 'units': '$'},\n", |
280 |
| - " 'median': {'value': 7338.4104, 'units': '$'},\n", |
281 |
| - " 'percentile_20': {'value': 5682.2301, 'units': '$'},\n", |
282 |
| - " 'percentile_80': {'value': 9354.2134, 'units': '$'}}},\n", |
283 |
| - " 'upgrade': {'energy': {'mean': {'value': 66.8291, 'units': 'gallon'},\n", |
284 |
| - " 'median': {'value': 0.0, 'units': 'gallon'},\n", |
285 |
| - " 'percentile_20': {'value': 0.0, 'units': 'gallon'},\n", |
286 |
| - " 'percentile_80': {'value': 127.0023, 'units': 'gallon'}},\n", |
287 |
| - " 'emissions': {'mean': {'value': 822.4611, 'units': 'kgCO2e'},\n", |
288 |
| - " 'median': {'value': 0.0, 'units': 'kgCO2e'},\n", |
289 |
| - " 'percentile_20': {'value': 0.0, 'units': 'kgCO2e'},\n", |
290 |
| - " 'percentile_80': {'value': 1563.0089, 'units': 'kgCO2e'}},\n", |
291 |
| - " 'cost': {'mean': {'value': 267.2145, 'units': '$'},\n", |
292 |
| - " 'median': {'value': 0.0, 'units': '$'},\n", |
293 |
| - " 'percentile_20': {'value': 0.0, 'units': '$'},\n", |
294 |
| - " 'percentile_80': {'value': 507.8156, 'units': '$'}}},\n", |
295 |
| - " 'delta': {'energy': {'mean': {'value': -1829.6594, 'units': 'gallon'},\n", |
296 |
| - " 'median': {'value': -1734.66, 'units': 'gallon'},\n", |
297 |
| - " 'percentile_20': {'value': -2254.9817, 'units': 'gallon'},\n", |
298 |
| - " 'percentile_80': {'value': -1351.139, 'units': 'gallon'}},\n", |
299 |
| - " 'emissions': {'mean': {'value': -22517.4993, 'units': 'kgCO2e'},\n", |
300 |
| - " 'median': {'value': -21348.3478, 'units': 'kgCO2e'},\n", |
301 |
| - " 'percentile_20': {'value': -27751.9135, 'units': 'kgCO2e'},\n", |
302 |
| - " 'percentile_80': {'value': -16628.3804, 'units': 'kgCO2e'}},\n", |
303 |
| - " 'cost': {'mean': {'value': -7315.8491, 'units': '$'},\n", |
304 |
| - " 'median': {'value': -6935.9963, 'units': '$'},\n", |
305 |
| - " 'percentile_20': {'value': -9016.4902, 'units': '$'},\n", |
306 |
| - " 'percentile_80': {'value': -5402.497, 'units': '$'}}}}" |
| 273 | + "{'baseline': {'energy': {'mean': {'value': 1639.9717, 'unit': 'gallon'},\n", |
| 274 | + " 'median': {'value': 1592.8951, 'unit': 'gallon'},\n", |
| 275 | + " 'percentile_20': {'value': 1217.5114, 'unit': 'gallon'},\n", |
| 276 | + " 'percentile_80': {'value': 2014.3037, 'unit': 'gallon'}},\n", |
| 277 | + " 'emissions': {'mean': {'value': 20183.0257, 'unit': 'kgCO2e'},\n", |
| 278 | + " 'median': {'value': 19603.6575, 'unit': 'kgCO2e'},\n", |
| 279 | + " 'percentile_20': {'value': 14983.8342, 'unit': 'kgCO2e'},\n", |
| 280 | + " 'percentile_80': {'value': 24789.9057, 'unit': 'kgCO2e'}},\n", |
| 281 | + " 'cost': {'mean': {'value': 6557.3876, 'unit': '$'},\n", |
| 282 | + " 'median': {'value': 6369.1531, 'unit': '$'},\n", |
| 283 | + " 'percentile_20': {'value': 4868.1902, 'unit': '$'},\n", |
| 284 | + " 'percentile_80': {'value': 8054.1452, 'unit': '$'}}},\n", |
| 285 | + " 'upgrade': {'energy': {'mean': {'value': 73.1678, 'unit': 'gallon'},\n", |
| 286 | + " 'median': {'value': 0.0, 'unit': 'gallon'},\n", |
| 287 | + " 'percentile_20': {'value': 0.0, 'unit': 'gallon'},\n", |
| 288 | + " 'percentile_80': {'value': 161.4628, 'unit': 'gallon'}},\n", |
| 289 | + " 'emissions': {'mean': {'value': 900.471, 'unit': 'kgCO2e'},\n", |
| 290 | + " 'median': {'value': 0.0, 'unit': 'kgCO2e'},\n", |
| 291 | + " 'percentile_20': {'value': 0.0, 'unit': 'kgCO2e'},\n", |
| 292 | + " 'percentile_80': {'value': 1987.1118, 'unit': 'kgCO2e'}},\n", |
| 293 | + " 'cost': {'mean': {'value': 292.5596, 'unit': '$'},\n", |
| 294 | + " 'median': {'value': 0.0, 'unit': '$'},\n", |
| 295 | + " 'percentile_20': {'value': 0.0, 'unit': '$'},\n", |
| 296 | + " 'percentile_80': {'value': 645.605, 'unit': '$'}}},\n", |
| 297 | + " 'delta': {'energy': {'mean': {'value': -1566.8039, 'unit': 'gallon'},\n", |
| 298 | + " 'median': {'value': -1521.6893, 'unit': 'gallon'},\n", |
| 299 | + " 'percentile_20': {'value': -1945.3572, 'unit': 'gallon'},\n", |
| 300 | + " 'percentile_80': {'value': -1122.8551, 'unit': 'gallon'}},\n", |
| 301 | + " 'emissions': {'mean': {'value': -19282.5547, 'unit': 'kgCO2e'},\n", |
| 302 | + " 'median': {'value': -18727.3322, 'unit': 'kgCO2e'},\n", |
| 303 | + " 'percentile_20': {'value': -23941.3851, 'unit': 'kgCO2e'},\n", |
| 304 | + " 'percentile_80': {'value': -13818.9057, 'unit': 'kgCO2e'}},\n", |
| 305 | + " 'cost': {'mean': {'value': -6264.828, 'unit': '$'},\n", |
| 306 | + " 'median': {'value': -6084.4384, 'unit': '$'},\n", |
| 307 | + " 'percentile_20': {'value': -7778.4641, 'unit': '$'},\n", |
| 308 | + " 'percentile_80': {'value': -4489.7094, 'unit': '$'}}}}" |
307 | 309 | ]
|
308 | 310 | },
|
309 | 311 | "execution_count": 12,
|
|
366 | 368 | "source": [
|
367 | 369 | "def results_for_stat(results, metric, stat: str):\n",
|
368 | 370 | " \"\"\"A helper function to pull out subsets of the results.\"\"\"\n",
|
369 |
| - " return {\n", |
370 |
| - " k: results[k][metric][stat]\n", |
371 |
| - " for k in result_keys\n", |
372 |
| - " }" |
| 371 | + " return {k: results[k][metric][stat] for k in result_keys}" |
373 | 372 | ]
|
374 | 373 | },
|
375 | 374 | {
|
|
392 | 391 | {
|
393 | 392 | "data": {
|
394 | 393 | "text/plain": [
|
395 |
| - "{'baseline': {'value': 1896.4884, 'units': 'gallon'},\n", |
396 |
| - " 'upgrade': {'value': 66.8291, 'units': 'gallon'},\n", |
397 |
| - " 'delta': {'value': -1829.6594, 'units': 'gallon'}}" |
| 394 | + "{'baseline': {'value': 1639.9717, 'unit': 'gallon'},\n", |
| 395 | + " 'upgrade': {'value': 73.1678, 'unit': 'gallon'},\n", |
| 396 | + " 'delta': {'value': -1566.8039, 'unit': 'gallon'}}" |
398 | 397 | ]
|
399 | 398 | },
|
400 | 399 | "execution_count": 15,
|
|
444 | 443 | }
|
445 | 444 | ],
|
446 | 445 | "source": [
|
447 |
| - "round(mean_energy['upgrade']['value'] - (mean_energy['baseline']['value'] + mean_energy['delta']['value']), 2)" |
| 446 | + "round(\n", |
| 447 | + " mean_energy[\"upgrade\"][\"value\"]\n", |
| 448 | + " - (mean_energy[\"baseline\"][\"value\"] + mean_energy[\"delta\"][\"value\"]),\n", |
| 449 | + " 2,\n", |
| 450 | + ")" |
448 | 451 | ]
|
449 | 452 | },
|
450 | 453 | {
|
|
466 | 469 | {
|
467 | 470 | "data": {
|
468 | 471 | "text/plain": [
|
469 |
| - "{'baseline': {'value': 1835.3018, 'units': 'gallon'},\n", |
470 |
| - " 'upgrade': {'value': 0.0, 'units': 'gallon'},\n", |
471 |
| - " 'delta': {'value': -1734.66, 'units': 'gallon'}}" |
| 472 | + "{'baseline': {'value': 1592.8951, 'unit': 'gallon'},\n", |
| 473 | + " 'upgrade': {'value': 0.0, 'unit': 'gallon'},\n", |
| 474 | + " 'delta': {'value': -1521.6893, 'unit': 'gallon'}}" |
472 | 475 | ]
|
473 | 476 | },
|
474 | 477 | "execution_count": 17,
|
|
502 | 505 | {
|
503 | 506 | "data": {
|
504 | 507 | "text/plain": [
|
505 |
| - "{'value': 0.0, 'units': 'gallon'}" |
| 508 | + "{'value': 0.0, 'unit': 'gallon'}" |
506 | 509 | ]
|
507 | 510 | },
|
508 | 511 | "execution_count": 18,
|
|
523 | 526 | {
|
524 | 527 | "data": {
|
525 | 528 | "text/plain": [
|
526 |
| - "{'value': 127.0023, 'units': 'gallon'}" |
| 529 | + "{'value': 161.4628, 'unit': 'gallon'}" |
527 | 530 | ]
|
528 | 531 | },
|
529 | 532 | "execution_count": 19,
|
|
574 | 577 | {
|
575 | 578 | "data": {
|
576 | 579 | "text/plain": [
|
577 |
| - "{'baseline': {'value': 24494.8882, 'units': 'kgCO2e'},\n", |
578 |
| - " 'upgrade': {'value': 4827.1306, 'units': 'kgCO2e'},\n", |
579 |
| - " 'delta': {'value': -19006.6082, 'units': 'kgCO2e'}}" |
| 580 | + "{'baseline': {'value': 21423.6426, 'unit': 'kgCO2e'},\n", |
| 581 | + " 'upgrade': {'value': 4743.954, 'unit': 'kgCO2e'},\n", |
| 582 | + " 'delta': {'value': -16628.4887, 'unit': 'kgCO2e'}}" |
580 | 583 | ]
|
581 | 584 | },
|
582 | 585 | "execution_count": 22,
|
|
608 | 611 | {
|
609 | 612 | "data": {
|
610 | 613 | "text/plain": [
|
611 |
| - "-661.15" |
| 614 | + "-51.2" |
612 | 615 | ]
|
613 | 616 | },
|
614 | 617 | "execution_count": 23,
|
|
617 | 620 | }
|
618 | 621 | ],
|
619 | 622 | "source": [
|
620 |
| - "round(median_emissions['upgrade']['value'] - (median_emissions['baseline']['value'] + median_emissions['delta']['value']), 2)" |
| 623 | + "round(\n", |
| 624 | + " median_emissions[\"upgrade\"][\"value\"]\n", |
| 625 | + " - (median_emissions[\"baseline\"][\"value\"] + median_emissions[\"delta\"][\"value\"]),\n", |
| 626 | + " 2,\n", |
| 627 | + ")" |
621 | 628 | ]
|
622 | 629 | },
|
623 | 630 | {
|
|
643 | 650 | ],
|
644 | 651 | "metadata": {
|
645 | 652 | "kernelspec": {
|
646 |
| - "display_name": ".venv", |
| 653 | + "display_name": "Python 3 (ipykernel)", |
647 | 654 | "language": "python",
|
648 | 655 | "name": "python3"
|
649 | 656 | },
|
|
0 commit comments