Прочитать файл NetCDF в Python - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь прочитать файл NetCDF из библиотеки климатических данных IRI / LDEO (dust_pm25_sconc10_mon), но у меня проблема с чтением этого файла.Когда я выбираю переменные, которые составляют базу данных (долгота (X), широта (Y) и время (T)), выходные данные из X и Y представляют собой последовательность с количеством наблюдений (1, 2, ..., 139например).То есть значения долготы и широты не экспортируются корректно.

Кто-нибудь может мне помочь с этой проблемой?Я уже пытался прочитать этот файл с помощью R, Python и Qgis, и во всех этих трёх выходах X и Y одинаковы.

Мои коды ниже (Python).

Спасибо всем большое.

from netCDF4 import Dataset as dt

filestr = 'dust_pm25_sconc10_mon.nc'

ncfile = dt(filestr, 'r')

print(ncfile.variables)

lat = ncfile.variables['Y'][:]
lat

lon = ncfile.variables['X'][:]
lon

time = ncfile.variables['T'][:]
time

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Файл примера на http://iridl.ldeo.columbia.edu/home/.nasa_roses_a19/.Dust_model/.dust_mon_avg/.dust_pm25_sconc10_mon/datafiles.html, который вы связали в своем комментарии к ответу SpghttCd, сформирован некорректно.С одной стороны, массивы X и Y не имеют атрибутов единиц, соответствующих таким измерениям, но вместо этого оба имеют значение «единицы».И, как уже отмечалось, значения в массивах не выглядят действительными в любом случае.Кроме того, все значения в массиве dust_pm25_sconc10_mon в этом файле, по-видимому, равны NaN.

С другой стороны, пример набора данных в http://iridl.ldeo.columbia.edu/home/.nasa_roses_a19/.Dust_model/.RegDustModelProjected/.dust_pm25_sconc10/datafiles.html, на который ссылается SpghttCd, содержит информацию об атрибутах хороших единиц ("deg_east" и"Степени_Северности" соответственно).Кроме того, фактические значения в массивах X и Y выглядят хорошо.У меня не было проблем с построением графика переменной dust_pm25_sconc10 в этом наборе данных (с использованием Panoply) и просмотром данных, сопоставленных с соответствующим регионом.

Комментарии SpghttCd относительно масштабирования и смещений здесь не применимы, так как долгота и широта ввторой хороший файл имеет действительные значения lon и lat.

0 голосов
/ 22 апреля 2019

Редактировать:

Этот файл имеет три независимые переменные, X, Y и T. И значения X и Y намеренно переходят от 1 к len(X) и len (Y) соответственно.

Посмотрите описание файла: http://iridl.ldeo.columbia.edu/home/.nasa_roses_a19/.Dust_model/.dust_mon_avg/.dust_pm25_sconc10_mon/

Независимые переменные (сетки)
Время
сетка: / T (месяцы с 1960-01-01), упорядоченные (март 1979 г.) к (март 2010 г.) на 1,0 N = 373 балла: сетка
долгота
сетка: / X (без единиц) упорядочено (от 1,0) до (191,0) на 1,0 N = 191 пункт: сетка
Широта
сетка: / Y (без единиц) упорядочено (1,0) к (139,0) на 1,0 N = 139 баллов: сетка

Конечно, это может иметь значение для долготы, но для широты это нонсенс.К сожалению, я не нашел подсказки, какую область на этой планете должен описать этот набор данных.

Однако я также не нашел каких-либо данных в единственной зависимой переменной dust_pm25_sconc10_mon - она ​​пуста.

PS: просто в качестве примера:
Этот набор данных здесь http://iridl.ldeo.columbia.edu/home/.nasa_roses_a19/.Dust_model/.RegDustModelProjected/.dust_pm25_sconc10/datafiles.html
выглядит гораздо более разумным ...

Само описание гораздо более многообещающе:

Независимые переменные (сетки)
Время (время)
Сетка: / T (дней с 2009-01-02 00:00) заказано (0130-0430 2 января 2009 г.) по (2230 1 апреля 2010 г. - 0130 2 апреля 2010 г.) по 0,125 N = 3640 пунктов: сетка
долгота
Сетка: / X (градус-восток) упорядочен (от 19,6875 Вт) до (54,6875E) на 0,625 N = 120 баллов: сетка
Широта
сетка: / Y (градус-север) упорядочен (0,3125N) до (39,6875N) на 0,625 N = 64 балла: сетка

И ее зависимая переменная dust_pm25_sconc10 также не пуста.


Я действительно пыталсянайти этот файл на сайте йоВы упомянули, но это бесполезно.Поэтому, не зная об этом, я должен предположить:

netcdf-файлы предоставляют возможность сохранять пространство данных путем масштабирования и сдвига значений любой переменной, так что они могут быть сохранены, например, как int вместо * 1073.*.
Вы можете просто проверить, есть ли атрибуты add_offset, отличные от 0 и scale_factor, отличные от 1.

Для получения дополнительной информации об этой концепции вы можете обратиться к https://www.unidata.ucar.edu/software/netcdf/workshops/2010/bestpractices/Packing.html.

Хотя в приведенной выше ссылке указано, что интерфейс java для netcdf действительно применяет эти атрибуты автоматически, библиотека netcdf4-python этого не делает.Поэтому, если вы хотите остаться с этим пакетом, вы должны изменить масштаб и -сместить данные обратно к исходным значениям, как описано.

Однако вы также можете попробовать xarray, библиотеку, которая реализуетn-мерная структура данных файлов netcdf и, насколько я знаю, эта библиотека выполняет автоматическое масштабирование и смещение в соответствии с правилами, описанными выше.
http://xarray.pydata.org/en/stable/

...