Source code for prereise.gather.solardata.nsrdb.naive
import numpy as np
import pandas as pd
from tqdm import tqdm
from prereise.gather.solardata.helpers import get_plant_id_unique_location
from prereise.gather.solardata.nsrdb.nrel_api import NrelApi
[docs]def retrieve_data(solar_plant, email, api_key, year="2016"):
"""Retrieve irradiance data from NSRDB and calculate the power output
using a simple normalization.
:param pandas.DataFrame solar_plant: plant data frame.
:param str email: email used to `sign up <https://developer.nrel.gov/signup/>`_.
:param str api_key: API key.
:param str year: year.
:return: (*pandas.DataFrame*) -- data frame with *'Pout'*, *'plant_id'*,
*'ts'* and *'ts_id'* as columns. Values are power output for a 1MW generator.
"""
# Identify unique location
coord = get_plant_id_unique_location(solar_plant)
api = NrelApi(email, api_key)
data = pd.DataFrame({"Pout": [], "plant_id": [], "ts": [], "ts_id": []})
for key in tqdm(coord.keys(), total=len(coord)):
lat, lon = key[1], key[0]
data_loc = api.get_psm3_at(
lat, lon, attributes="ghi", year=year, leap_day=True
).data_resource
ghi = data_loc.GHI.values
data_loc = pd.DataFrame({"Pout": ghi})
data_loc["Pout"] /= max(ghi)
data_loc["ts_id"] = range(1, len(ghi) + 1)
data_loc["ts"] = pd.date_range(start=year, end=str(int(year) + 1), freq="H")[
:-1
]
for i in coord[key]:
data_site = data_loc.copy()
data_site["plant_id"] = i
data = data.append(data_site, ignore_index=True, sort=False)
data["plant_id"] = data["plant_id"].astype(np.int32)
data["ts_id"] = data["ts_id"].astype(np.int32)
data.sort_values(by=["ts_id", "plant_id"], inplace=True)
data.reset_index(inplace=True, drop=True)
return data