in integrations/python-client/nexuscli/nexuscli.py [0:0]
def time_series(datasets, bounding_box, start_datetime, end_datetime, spark=True):
"""
Send a request to NEXUS to calculate a time series.
__datasets__ Sequence (max length 2) of the name of the dataset(s)
__bounding_box__ Bounding box for area of interest as a `shapely.geometry.polygon.Polygon`
__start_datetime__ Start time as a `datetime.datetime`
__end_datetime__ End time as a `datetime.datetime`
__spark__ Optionally use spark. Default: `False`
__return__ List of `nexuscli.nexuscli.TimeSeries` namedtuples
"""
if isinstance(datasets, str):
datasets = [datasets]
assert 0 < len(datasets) <= 2, "datasets must be a sequence of 1 or 2 items"
params = {
'ds': ','.join(datasets),
'b': ','.join(str(b) for b in bounding_box.bounds),
'startTime': start_datetime.strftime(ISO_FORMAT),
'endTime': end_datetime.strftime(ISO_FORMAT),
}
if spark:
url = "{}/timeSeriesSpark?".format(target)
params['spark'] = "mesos,16,32"
else:
url = "{}/stats?".format(target)
response = session.get(url, params=params)
response.raise_for_status()
response = response.json()
data = np.array(response['data']).flatten()
assert len(data) > 0, "No data found in {} between {} and {} for Datasets {}.".format(bounding_box.wkt,
start_datetime.strftime(
ISO_FORMAT),
end_datetime.strftime(
ISO_FORMAT),
datasets)
time_series_result = []
for i in range(0, len(response['meta'])):
key_to_index = {k: x for x, k in enumerate(data[0].keys())}
time_series_data = np.array([tuple(each.values()) for each in [entry for entry in data if entry['ds'] == i]])
if len(time_series_data) > 0:
if 'iso_time' in key_to_index:
time_series_result.append(
TimeSeries(
dataset=response['meta'][i]['shortName'],
time=np.array([datetime.strptime(t, PYTHON32_ISO_FORMAT) for t in
time_series_data[:, key_to_index['iso_time']]]),
mean=np.array(time_series_data[:, key_to_index['mean']], dtype=float),
standard_deviation=np.array(time_series_data[:, key_to_index['std']], dtype=float),
count=np.array(time_series_data[:, key_to_index['cnt']], dtype=int),
minimum=np.array(time_series_data[:, key_to_index['min']], dtype=float),
maximum=np.array(time_series_data[:, key_to_index['max']], dtype=float),
)
)
else:
time_series_result.append(
TimeSeries(
dataset=response['meta'][i]['shortName'],
time=np.array([datetime.utcfromtimestamp(int(t)).replace(tzinfo=UTC) for t in
time_series_data[:, key_to_index['time']]]),
mean=np.array(time_series_data[:, key_to_index['mean']], dtype=float),
standard_deviation=np.array(time_series_data[:, key_to_index['std']], dtype=float),
count=np.array(time_series_data[:, key_to_index['cnt']], dtype=int),
minimum=np.array(time_series_data[:, key_to_index['min']], dtype=float),
maximum=np.array(time_series_data[:, key_to_index['max']], dtype=float),
)
)
return time_series_result