Skip to content

Add NASA POWER to iotools #2500

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 19 commits into
base: main
Choose a base branch
from

Conversation

IoannisSifnaios
Copy link
Contributor

@IoannisSifnaios IoannisSifnaios commented Jul 15, 2025

  • I am familiar with the contributing guidelines
  • Tests added
  • Updates entries in docs/sphinx/source/reference for API changes.
  • Adds description and name entries in the appropriate "what's new" file in docs/sphinx/source/whatsnew for all changes. Includes link to the GitHub Issue with :issue:`num` or this Pull Request with :pull:`num`. Includes contributor name and/or GitHub username (link with :ghuser:`user`).
  • New code is fully documented. Includes numpydoc compliant docstrings, examples, and comments where necessary.
  • Pull request is nearly complete and ready for detailed review.
  • Maintainer: Appropriate GitHub Labels (including remote-data) and Milestone are assigned to the Pull Request and linked Issue.

This PR adds a function to get irradiance and weather data from NASA POWER. read_the_docs_link

@IoannisSifnaios IoannisSifnaios added this to the v0.13.1 milestone Jul 15, 2025
@IoannisSifnaios
Copy link
Contributor Author

@AdamRJensen could you give some first feedback on this?

Also, should there also be a read_nasa_power function or not?

@AdamRJensen
Copy link
Member

Also, should there also be a read_nasa_power function or not?

I suggest just adding a get_nasa_power function for now. If there is a need for a read function, we can always add that later.

Copy link
Member

@AdamRJensen AdamRJensen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Initial review

@IoannisSifnaios IoannisSifnaios marked this pull request as ready for review July 16, 2025 13:49
Copy link
Member

@kandersolar kandersolar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few comments, overall looks pretty good to me! Seems like the API is a little slow but not terrible: 16 seconds for a year of data.

Comment on lines +57 to +59
community: str
Can be one of the following depending on which parameters are of
interest. The default is ``'re'``. Note that in many cases this choice
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
community: str
Can be one of the following depending on which parameters are of
interest. The default is ``'re'``. Note that in many cases this choice
community: str, default 're'
Can be one of the following depending on which parameters are of
interest. Note that in many cases this choice

Comment on lines +76 to +79
map_variables: bool, optional
When true, renames columns of the Dataframe to pvlib variable names
where applicable. See variable :const:`VARIABLE_MAP`.
The default is `True`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
map_variables: bool, optional
When true, renames columns of the Dataframe to pvlib variable names
where applicable. See variable :const:`VARIABLE_MAP`.
The default is `True`.
map_variables: bool, default True
When true, renames columns of the Dataframe to pvlib variable names
where applicable. See variable :const:`VARIABLE_MAP`.

Comment on lines +22 to +23

def test_get_nasa_power(data_index, ghi_series):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def test_get_nasa_power(data_index, ghi_series):
@pytest.mark.remote_data
@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY)
def test_get_nasa_power(data_index, ghi_series):

All test functions that access internet APIs should have these two decorators :)

And add from tests.conftest import RERUNS, RERUNS_DELAY at the top of the file.

* ``ALLSKY_SFC_SW_DIFF``: Diffuse Horizontal Irradiance (DHI) [Wm⁻²]
* ``ALLSKY_SFC_SW_DNI``: Direct Normal Irradiance (DNI) [Wm⁻²]
* ``T2M``: Air temperature at 2 m [C]
* ``WS10M``: Wind speed at 10 m [m/s]
Copy link
Member

@kandersolar kandersolar Jul 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest using pvlib names here and in the default parameter list. As a user, I don't want to have to mentally translate ALLSKY_SFC_SW_DWN into ghi when reading these docs.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kandersolar to clarify: are you suggesting that the pvlib function accept values like 'ghi' in place of 'ALLSKY_SFC_SW_DIFF'?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pvlib function currently accepts both of those and I am not suggesting changing that. The suggestion is for the default values to use pvlib names instead of NASA POWER names, to (IMHO) make the docstring a little clearer.

hourly_data = data['properties']['parameter']
df = pd.DataFrame(hourly_data)
df.index = pd.to_datetime(df.index, format='%Y%m%d%H').tz_localize('UTC')
df = df.replace(-999, np.nan)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

perhaps worth using meta['fill_value'] instead of hardcoding -999, in case they change it someday?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants