Published December 20, 2019 | Version 1.0.0
Dataset Open

Spatial and temporal variation in the value of solar power across United States electricity markets

  • 1. MIT Energy Initiative

Description

This repository includes python scripts and input/output data associated with the following publication:

[1] Brown, P.R.; O'Sullivan, F. "Spatial and temporal variation in the value of solar power across United States Electricity Markets". Renewable & Sustainable Energy Reviews 2019. https://doi.org/10.1016/j.rser.2019.109594

Please cite reference [1] for full documentation if the contents of this repository are used for subsequent work.

Many of the scripts, data, and descriptive text in this repository are shared with the following publication:

[2] Brown, P.R.; O'Sullivan, F. "Shaping photovoltaic array output to align with changing wholesale electricity price profiles". Applied Energy 2019, 256, 113734. https://doi.org/10.1016/j.apenergy.2019.113734

All code is in python 3 and relies on a number of dependencies that can be installed using pip or conda.

Contents

  • pvvm/*.py : Python module with functions for modeling PV generation and calculating PV energy revenue, capacity value, and emissions offset.
  • notebooks/*.ipynb : Jupyter notebooks, including:
    • pvvm-vos-data.ipynb: Example scripts used to download and clean input LMP data, determine LMP node locations, assign nodes to capacity zones, download NSRDB input data, and reproduce some figures in [1]
    • pvvm-example-generation.ipynb: Example scripts demonstrating the use of the PV generation model and a sensitivity analysis of PV generator assumptions
    • pvvm-example-plots.ipynb: Example scripts demonstrating different plotting functions
    • validate-pv-monthly-eia.ipynb: Scripts and plots for comparing modeled PV generation with monthly generation reported in EIA forms 860 and 923, as discussed in SI Note 3 of [1]
    • validate-pv-hourly-pvdaq.ipynb: Scripts and plots for comparing modeled PV generation with hourly generation reported in NREL PVDAQ database, as discussed in SI Note 3 of [1]
    • pvvm-energyvalue.ipynb: Scripts for calculating the wholesale energy market revenues of PV and reproducing some figures in [1]
    • pvvm-capacityvalue.ipynb: Scripts for calculating the capacity credit and capacity revenues of PV and reproducing some figures in [1]
    • pvvm-emissionsvalue.ipynb: Scripts for calculating the emissions offset of PV and reproducing some figures in [1]
    • pvvm-breakeven.ipynb: Scripts for calculating the breakeven upfront cost and carbon price for PV and reproducing some figures in [1]
  • html/*.html : Static images of the above Jupyter notebooks for viewing without a python kernel
  • data/lmp/*.gz : Day-ahead nodal locational marginal prices (LMPs) and marginal costs of energy (MCE), congestion (MCC), and losses (MCL) for CAISO, ERCOT, MISO, NYISO, and ISONE.
    • At the time of publication of this repository, permission had not been received from PJM to republish their LMP data. If permission is received in the future, a new version of this repository will be linked here with the complete dataset.
  • results/*.csv.gz : Simulation results associated with [1], including modeled energy revenue, capacity credit and revenue, emissions offsets, and breakeven costs for PV systems at all LMP nodes

Data notes

Usage notes

  • Code is provided under the MIT License, as specified in the pvvm/LICENSE file and at the top of each *.py file. 
  • Updates to the code, if any, will be posted in the non-static repository at https://github.com/patrickbrown4/pvvm_vos. The code in the present repository has the following version-specific dependencies:
    • matplotlib: 3.0.3
    • numpy: 1.16.2
    • pandas: 0.24.2
    • pvlib: 0.6.1
    • scipy: 1.2.1
    • tqdm: 4.31.1
  • To use the NSRDB download functions, you will need to modify the "settings.py" file to insert a valid NSRDB API key, which can be requested from https://developer.nrel.gov/signup/. Locations can be specified by passing (latitude, longitude) floats to pvvm.data.downloadNSRDBfile(), or by passing a string googlemaps query to pvvm.io.queryNSRDBfile(). To use the googlemaps functionality, you will need to request a googlemaps API key (https://developers.google.com/maps/documentation/javascript/get-api-key) and insert it in the "settings.py" file.
  • Note that many of the ISO websites have changed in the time since the functions in the pvvm.data module were written and the LMP data used in the above papers were downloaded. As such, the pvvm.data.download_lmps() function no longer works for all ISOs and years. We provide this function to illustrate the general procedure used, and do not intend to maintain it or keep it up to date with the changing ISO websites. For up-to-date functions for accessing ISO data, the following repository (no connection to the present work) may be helpful: https://github.com/catalyst-cooperative/pudl.

 

Files

data.zip

Files (2.6 GB)

Name Size Download all
md5:8cc4cf3078a4d489513986dc1607f022
2.0 GB Preview Download
md5:a8b8e809b5ffa0a5745d85347f14d51d
35.6 MB Preview Download
md5:20a73699577125f94dda0bd2c61704bd
65.9 MB Preview Download
md5:5fb71a9635e5fa967a2fb9a55d05e90e
136.3 kB Preview Download
md5:2a8707d8754cc91344101eb2d7e170c7
490.0 MB Preview Download

Additional details

Related works

Is supplement to
Journal article: 10.1016/j.rser.2019.109594 (DOI)
References
Dataset: 10.5281/zenodo.3368397 (DOI)