Reading MERRA data¶
This Example show how to read the MERRA atmospheric data and to show the structure of the MERRA data
Workflow:
- Initialize MERRA data file
- Take a look at the variables
- Preload data in the region
- Get timeseries for a specific location
- Introduction of standard loaders
In [1]:
Copied!
import reskit as rk
import reskit as rk
Initialize a MERRA data file¶
- In this case, rk._TEST_DATA_["weather_data"] points to a netCDF4 file on your machine with climate model weather datasets
- If rk._TEST_DATA_["weather_data"] points to a folder, all netCDF4 files in that folder will be scanned
In [2]:
Copied!
print(rk.TEST_DATA["merra-like"])
print(rk.TEST_DATA["merra-like"])
/home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like
In [3]:
Copied!
# The 'bounds' input limits the spatial domain of the weath data which is loaded into memory
# - given as: [low-lat, low-lon, high-lat, high-lon]
# The files scanned will be listed, unless verbose=False is specified
src = rk.weather.MerraSource(rk.TEST_DATA["merra-like"], bounds=[5, 49, 7, 52])
# The 'bounds' input limits the spatial domain of the weath data which is loaded into memory
# - given as: [low-lat, low-lon, high-lat, high-lon]
# The files scanned will be listed, unless verbose=False is specified
src = rk.weather.MerraSource(rk.TEST_DATA["merra-like"], bounds=[5, 49, 7, 52])
/home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.PS.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.SWGDN.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.T10M.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.T2M.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.T2MDEW.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.U10M.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.U2M.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.U50M.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.V10M.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.V2M.nc4 /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/_test/data/merra-like/MERRA_tavg1_2d.2015.Europe.V50M.nc4
In [4]:
Copied!
# See all of the variables in this file...
src.variables
# See all of the variables in this file...
src.variables
Out[4]:
| name | units | path | shape | |
|---|---|---|---|---|
| time | time | minutes since 2015-01-01 00:30:00 | /home/docs/checkouts/readthedocs.org/user_buil... | (71,) |
| lon | longitude | degrees_east | /home/docs/checkouts/readthedocs.org/user_buil... | (5,) |
| lat | latitude | degrees_north | /home/docs/checkouts/readthedocs.org/user_buil... | (7,) |
| PS | surface_pressure | Pa | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| SWGDN | surface_incoming_shortwave_flux | W m-2 | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| T10M | 10-meter_air_temperature | K | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| T2M | 2-meter_air_temperature | K | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| T2MDEW | dew_point_temperature_at_2_m | K | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| U10M | 10-meter_eastward_wind | m s-1 | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| U2M | 2-meter_eastward_wind | m s-1 | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| U50M | eastward_wind_at_50_meters | m s-1 | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| V10M | 10-meter_northward_wind | m s-1 | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| V2M | 2-meter_northward_wind | m s-1 | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
| V50M | northward_wind_at_50_meters | m s-1 | /home/docs/checkouts/readthedocs.org/user_buil... | (71, 7, 5) |
Preload the data in this region¶
In [5]:
Copied!
# Load a specific variable
src.load("U50M", name="wind_speed")
# Load a specific variable
src.load("U50M", name="wind_speed")
Get the time series for a specific location¶
In [6]:
Copied!
# Get a time series for a single location
# Locations are given as (Lon, lat)
t = src.get("wind_speed", locations=(6.0, 50.0))
t.head()
# Get a time series for a single location
# Locations are given as (Lon, lat)
t = src.get("wind_speed", locations=(6.0, 50.0))
t.head()
Out[6]:
2015-01-01 00:30:00+00:00 3.564828 2015-01-01 01:30:00+00:00 3.401189 2015-01-01 02:30:00+00:00 3.127785 2015-01-01 03:30:00+00:00 2.838547 2015-01-01 04:30:00+00:00 2.414742 Name: (6.0, 50.0), dtype: float32
In [7]:
Copied!
# Get a time series for multiple locations
t = src.get("wind_speed", locations=[(5.5, 50.0), (6.0, 50.0), (6.7, 50.0)])
t.head()
# Get a time series for multiple locations
t = src.get("wind_speed", locations=[(5.5, 50.0), (6.0, 50.0), (6.7, 50.0)])
t.head()
Out[7]:
| (5.5, 50.0) | (6.0, 50.0) | (6.7, 50.0) | |
|---|---|---|---|
| 2015-01-01 00:30:00+00:00 | 2.886117 | 3.564828 | 3.810922 |
| 2015-01-01 01:30:00+00:00 | 2.529118 | 3.401189 | 3.825017 |
| 2015-01-01 02:30:00+00:00 | 2.138527 | 3.127785 | 3.693214 |
| 2015-01-01 03:30:00+00:00 | 1.761887 | 2.838547 | 3.489914 |
| 2015-01-01 04:30:00+00:00 | 1.258858 | 2.414742 | 3.195015 |
In [8]:
Copied!
# Get a time series for a single location, but interpolate the surrounding MERRA points the specified location(s)
# Options are:
# 'bilinear' -> Uses linear interpolation. Requires the surrounding 4 index points
# 'cubic' -> Uses cubic interpolation. Requires the surrounding 16 index points
t = src.get("wind_speed", (6.0, 50.0), interpolation="bilinear")
t.head()
# Get a time series for a single location, but interpolate the surrounding MERRA points the specified location(s)
# Options are:
# 'bilinear' -> Uses linear interpolation. Requires the surrounding 4 index points
# 'cubic' -> Uses cubic interpolation. Requires the surrounding 16 index points
t = src.get("wind_speed", (6.0, 50.0), interpolation="bilinear")
t.head()
Out[8]:
2015-01-01 00:30:00+00:00 3.293344 2015-01-01 01:30:00+00:00 3.052360 2015-01-01 02:30:00+00:00 2.732082 2015-01-01 03:30:00+00:00 2.407883 2015-01-01 04:30:00+00:00 1.952389 Name: (6.0, 50.0), dtype: float64
Standard Loaders¶
Many weather sources have similar (but nevertheless slightly different) variables which often need to be transformed into a standard unit. Therefore RESKit configures each weather source with numerous available 'standard loader' functions
In [9]:
Copied!
src.list_standard_variables()
src.list_standard_variables()
sload_elevated_wind_direction sload_elevated_wind_speed sload_global_horizontal_irradiance sload_surface_air_temperature sload_surface_dew_temperature sload_surface_pressure sload_surface_wind_direction sload_surface_wind_speed sload_wind_direction_at_10m sload_wind_direction_at_2m sload_wind_direction_at_50m sload_wind_speed_at_10m sload_wind_speed_at_2m sload_wind_speed_at_50m
In [10]:
Copied!
# Load, for example, "surface air temperature", which will always be output in degrees-Celcius
src.sload_surface_air_temperature()
# Load, for example, "surface air temperature", which will always be output in degrees-Celcius
src.sload_surface_air_temperature()
In [11]:
Copied!
# Access the data using the same name
t = src.get("surface_air_temperature", (6.0, 50.0), interpolation="bilinear")
t.head()
# Access the data using the same name
t = src.get("surface_air_temperature", (6.0, 50.0), interpolation="bilinear")
t.head()
Out[11]:
2015-01-01 00:30:00+00:00 -2.400848 2015-01-01 01:30:00+00:00 -2.561975 2015-01-01 02:30:00+00:00 -2.745178 2015-01-01 03:30:00+00:00 -2.974139 2015-01-01 04:30:00+00:00 -3.179675 Name: (6.0, 50.0), dtype: float64