Рассчитать гистограмму в среде сэмплирования xarray - PullRequest
0 голосов
/ 16 марта 2019

У меня вопрос относительно очень гибкого расчета гистограмм.

Предположим, у вас есть 30 различных наборов данных (скажем, результаты модели), и вы хотите сравнить гистограммы каждого набора данных.Наборы данных могут быть 1D (время) или 2D (x, y) или 3D (x, y, t).Ниже приведен пример одиночного набора 3D-данных за 1 месяц:

In [2]: a = xarray.open_dataset("ECMWF_ERA-40_subset.nc")
In [3]: a
Out[3]:
<xarray.Dataset>
Dimensions:    (latitude: 73, longitude: 144, time: 62)
Coordinates:
  * longitude  (longitude) float32 0.0 2.5 5.0 7.5 ... 350.0 352.5 355.0 357.5
  * latitude   (latitude) float32 90.0 87.5 85.0 82.5 ... -85.0 -87.5 -90.0
  * time       (time) datetime64[ns] 2002-07-01T12:00:00 ... 2002-07-31T18:00:00
Data variables:
    tcw        (time, latitude, longitude) float32 ...
    tcwv       (time, latitude, longitude) float32 ...
    lsp        (time, latitude, longitude) float32 ...
    cp         (time, latitude, longitude) float32 ...

Давайте далее предположим, что мой код предназначен для обработки очень гибких настроек, касающихся временной агрегации и пространственной агрегации.Т.е. я могу контролировать временную агрегацию вычисляемых гистограмм: ежемесячно, ежедневно, сезонно, ежемесячно в течение многих лет и т. Д. Чтобы иметь такую ​​гибкость во временной агрегации, я до сих пор использовал метод xarray.resample или xarray.grouby, которыйможно настроить для собственных функций:

In [8]: a.resample({'time': 'W'}).mean(dim="time")
Out[8]:
<xarray.Dataset>
Dimensions:    (latitude: 73, longitude: 144, time: 5)
Coordinates:
  * time       (time) datetime64[ns] 2002-07-07 2002-07-14 ... 2002-08-04
  * longitude  (longitude) float32 0.0 2.5 5.0 7.5 ... 350.0 352.5 355.0 357.5
  * latitude   (latitude) float32 90.0 87.5 85.0 82.5 ... -85.0 -87.5 -90.0
Data variables:
    tcw        (time, latitude, longitude) float32 10.668642 ... 0.2204895
    tcwv       (time, latitude, longitude) float32 10.589867 ... 0.21552403
    lsp        (time, latitude, longitude) float32 0.00013404127 ... 6.614067e-05
    cp         (time, latitude, longitude) float32 0.0 0.0 0.0 ... 0.0 0.0 0.0

Мне интересно, как гибко визуализировать гистограммы для всех наборов данных и для всех временных отметок (в моем случае 4 разные недели каждая размером x=144, y=73t~15).Какой бы быстрый путь?

Почему я задаю вопрос?

  1. Одна из возможностей - открыть первый набор данных, вырезать первую неделю, вычислить гистограмму и построить ее;открыть следующий набор данных, вырезать первую неделю, вычислить гистограмму и построить ее ... Это делается до последнего набора данных, а затем все файлы закрываются.Затем вторая неделя анализируется для всех наборов данных.Для меня это кажется странным, потому что я не знаю, как выбрать первую неделю без использования функции повторной выборки xarray или pandas.Обратите внимание на гибкость: это может быть также первый извлеченный день или первый месяц или каждый час дня (00UTC, 01UTC, 02UTC, групповой метод).

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

    a.resample({'time':'W'}).apply(histogram)
    

    , но это будет означать, что я должен сохранить результат гистограммы в файле netcdf.Как это можно сделать и действительно ли это быстрее?Более того, на втором шаге мне еще предстоит визуализировать результат, который я предвижу проблематичным, весь гистограммный график python или R обрезается, чтобы получить весь набор данных в качестве входных данных, а не только готовые данные гистограммы.

...