Обработка данных OCO2 netCDF с помощью PythonPython

Программы на Python
Ответить
Гость
 Обработка данных OCO2 netCDF с помощью Python

Сообщение Гость »


Я пытаюсь обработать некоторые (150 ГБ) загруженные данные netCDF world OCO2, но возникли проблемы с кодом.

Цель состоит в том, чтобы обрезать файлы netCDF OCO2 для указанного региона (шейп-файла), фильтровать по флагу качества xco2 (двоичная фильтрация этой переменной для ' 0'), извлекаю только xco2 в качестве переменной и ежедневно усредняю ​​каждый файл, объединяя их, чтобы я мог вычислить среднемесячное значение и, если возможно, экспортировать их в виде файлов CSV. сильный>.

Это очень большая работа, и я уже рад, что мне удалось правильно загрузить файлы в пакетном режиме. Все они хранятся в одной папке со следующей структурой имен файлов:

oco2_LtCO2_yymmdd_Bbuild id_production date.nc4

Пример: oco2_LtCO2_220902_B11100Ar_230609082428s.nc4

Буду очень рад, если у кого-нибудь есть опыт обработки этих данных.

Я уже пробовал использовать различные онлайн-уроки, чтобы закрепить файл netCDF в шейп-файл, но, к сожалению, безуспешно. Частично получаю ошибки по библиотекам или просто не понимаю чужой код.

Это код Jupyter Notebook (Python), который я использую для расчета и построения среднемесячного значения одного файла:

# Анализ данных OCO-2 XCO2 %reload_ext автозагрузка %автоперезагрузка 2 %matplotlib встроенный импорт даты и времени импортировать matplotlib.pyplot как plt plt.style.use("seaborn-v0_8") импортировать CSV импортировать numpy как np импортировать ОС импортировать os.path импортировать панд как pd из IPython.core.display импортировать HTML из IPython.display импортируйте Clear_output из IPython.core.pylabtools импортировать figsize импортировать netCDF4 импортировать numpy как np из импорта oco_tools * импортировать xarray как xr file_dict = dict_oco2_xco2 file_dict # какой набор данных path_files = 'Путь к файлуXYZ' ## Выбор региона f = netCDF4.Dataset('File.nc4') печать (f.variables.keys()) # Загрузите файл netCDF f = xr.open_dataset('File.nc4') печать(f.attrs) # устанавливаем ограничивающую рамку #latMin = 45 #latMax = 45 #lonMin = -74 #lonMax = -73 латМин = -85 широтаМакс = 58 лонМин = -181 лонМакс = 181 oco2_aoi = OCO2(path_files+'/*.nc4', file_dict, latMin, latMax, lonMin, lonMax) t_unit_oco2 = "секунд с 1970-1-1 0:0:0" t_cal = u"грегорианский" # Преобразование единиц времени oco2 во время Python oco2_aoi.time_python = Convert_time(oco2_aoi.time, t_unit_oco2, t_cal) oco2_aoi.time_str = [datetime.datetime.fromisoformat(str(date)) для даты в oco2_aoi.time_python] # oco2_aoi.time[0] # секунд с 1970 года # oco2_aoi.time_python[0].strftime("%d/%m/%Y, %H:%M:%S") # oco2_aoi.time_str[0] ## Временная последовательность # построить таймсерию plt.figure(figsize=(16,9)) plt.subplot(1,2,1) plt.plot(oco2_aoi.time_str, oco2_aoi.xco2,'.') plt.ylabel('XCO2 (ppm)') plt.xlabel('Дата (месяцы)') plt.title('Уровни AOI XCO2 09.2022-06.2023 (OCO-2 XCO2)') #plt.savefig('Путь к файлу/file.png') ## Гистограмма plt.figure(figsize=(16,9)) plt.hist(oco2_aoi.xco2, 100,range=(380,435), плотность=True, альфа=0,5, label='XCO2 (ppm)') plt.title('AOI 09/2022-06/2023 Уровни CO2 (OCO-2 XCO2)') plt.ylabel('Общая сумма в %') plt.xlabel('XCO2 (ppm)') plt.legend(loc=0) #plt.savefig('Путь к файлу/file.png') print('Стандартное отклонение измерения' + str(np.std(oco2_aoi.xco2)) ) print('Ожидаемое стандартное отклонение на основе апостериорной ошибки' + str(np.mean(oco2_aoi.xco2_sigma)) ) ## Текущий средний временной ряд # Получайте данные каждые 3 дня и создайте среднее значение +/- 3 дня: # Определить диапазон данных для сглаживания (каждые 3 дня) из даты и времени импорта даты и времени даты = np.arange('2022-09', '2023-02', dtype='datetime64[3D]').astype(datetime) Лен(даты) # Используйте даты с шагом в 3 дня и теперь используйте фильтр +/- 3 дня для скользящего среднего: timeseries_oco2 = Running_mean(oco2_aoi.time_str, oco2_aoi.xco2, даты, 3) plt.figure(figsize=(16,9)) plt.errorbar(dates, timeseries_oco2.mean,yerr=timeseries_oco2.standard_error, label='OCO-2 XCO2 Mean') plt.ylabel('XCO2 (ppm)') plt.xlabel('Дата (месяцы)') plt.legend(loc=0) plt.title('Уровни CO2 AOI в 2022–2023 гг. (OCO-2 XCO2) +/- среднее значение за 3 дня') #plt.savefig('Путь к файлу/file.png') # Используйте даты с шагом в 3 дня и теперь используйте фильтр +/- 3 дня для скользящего среднего: timeseries_oco2_b = Running_mean(oco2_aoi.time_str, oco2_aoi.xco2, даты, 30) plt.figure(figsize=(16,9)) plt.errorbar(dates, timeseries_oco2_b.mean,yerr=timeseries_oco2_b.standard_error, label='OCO-2 XCO2 Mean') plt.ylabel('XCO2 (ppm)') plt.xlabel('Дата (месяцы)') plt.legend(loc=0) plt.title('Уровни CO2 AOI в 2022–2023 гг. (OCO-2 XCO2) в среднем за месяц') #plt.savefig('Путь к файлу/file.png') печать(timeseries_oco2_b.mean) # экспортируем строковую переменную в файл csv input_variable = timeseries_oco2_b.mean # Файл example.csv создается в текущем рабочем каталоге. с open('Example.csv', 'w', newline = '') как CSV-файл: имена полей = ['xco2'] my_writer = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter = ';') my_writer.writeheader() my_writer.writerow(input_variable) К сожалению, экспорт csv не работает, и я не могу закрепить свой файл в выделенной интересующей области (шейп-файле). Кроме того, мне нужно отфильтровать флаг качества (0) и повторить весь процесс для остальных файлов в папке.

Поначалу было бы желательно обрезать и фильтровать переменные, поскольку это значительно уменьшит размер файла.

Я благодарен за любые идеи и предложения!
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»