cfgrib не может распознать переменную данных
Отказ от ответственности: я новичок в Python и борюсь с наборами климатических данных. Я изо всех сил рылся в сети, чтобы найти решение, но безуспешно. Надеюсь, я предоставил достаточно информации!
Источник данных: http://edc.occ-data.org/nexrad/mosaic/#data-updates
- Использование MRMS_PrecipRate_00.00_20010101-120000.grib2, который является первым файлом в наборе данных 2001 года.
Проблема: атрибут PrecipRate, который, как мне известно, присутствует в файле Grib, не распознан, что приводит к значениям данных na. Я подтвердил, что эти данные есть, используя библиотеку pygrib, но мне это нужно для работы с cgrib, поэтому я могу использовать функцию open_mfdataset.
import xarray as xr
ds = xr.open_dataset('MRMS_PrecipRate_00.00_20010101-120000.grib2', engine = 'cfgrib')
print(ds)
<xarray.Dataset>
Dimensions: (latitude: 3500, longitude: 7000)
Coordinates:
time datetime64[ns] 2001-01-01T12:00:00
step timedelta64[ns] 00:00:00
surface float64 0.0
* latitude (latitude) float64 54.99 54.98 54.98 54.97 ... 20.03 20.02 20.01
* longitude (longitude) float64 230.0 230.0 230.0 ... 300.0 300.0 300.0
valid_time datetime64[ns] 2001-01-01T12:00:00
Data variables:
unknown (latitude, longitude) float32 ...
Attributes:
GRIB_edition: 2
GRIB_centre: 161
GRIB_centreDescription: 161
GRIB_subCentre: 0
Conventions: CF-1.7
institution: 161
history: 2021-05-04T13:11 GRIB to CDM+CF via cfgrib-0.9.9...
print(ds['unknown'].values)
[[nan nan nan ... nan nan nan]
[nan nan nan ... nan nan nan]
[nan nan nan ... nan nan nan]
...
[nan nan nan ... nan nan nan]
[nan nan nan ... nan nan nan]
[nan nan nan ... nan nan nan]]
И просто чтобы показать, что данные действительно есть:
from metpy.units import units
import pygrib
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
grbs = pygrib.open('MRMS_PrecipRate_00.00_20010101-120000.grib2')
grb = grbs[1]
prcp = grb.values
prcp = units('mm/hr') * prcp
# plt.imshow(prcp.to('in/hr'))
# plt.colorbar()
lats, lons = grb.latlons()
map_crs = ccrs.LambertConformal(central_longitude=-100,
central_latitude = 35,
standard_parallels=(30, 60))
data_crs = ccrs.PlateCarree()
fig = plt.figure(1, figsize=(14,12))
ax = plt.subplot(projection = map_crs)
fig.subplots_adjust(hspace=0, wspace=0, top=0.925, left=0.1)
im = ax.contourf(lons, lats, prcp.to('in/hr'), transform=data_crs,
cmap = 'Greens')
ax.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax.add_feature(cfeature.STATES.with_scale('50m'))
cb=plt.colorbar(im, shrink = 0.7, label='precipitation (in/hr)')
ax.set_extent([-85, -74, 34, 40.5], data_crs)
plt.show()
1 ответ
Это частый сбой при работе с данными grib. Для извлечения данных гриба требуются таблицы гриба. В этих таблицах идентификаторы параметров объяснены и сопоставлены с их именами.
Итак, что вам нужно сделать, это связаться с издателем / поставщиком файлов grib и запросить соответствующие таблицы grib. Я предполагаю, что pygrib использует общедоступные таблицы ncep grib.
Дополнительно рекомендую использовать xarray в сочетании с cfgrib . Он основан на мощной библиотеке ECCODES от ECMWF. Здесь вам нужно установить дополнительный
ECCODES_DEFINTION_PATH
куда хранились грибы таблицы. Возможно, эккоды по умолчанию содержат нужные таблицы гриба. В противном случае свяжитесь с поставщиком файлов grib.