Я пытаюсь понять, как визуализировать некоторые данные датчика.У меня есть данные, которые собираются каждые 5 минут для нескольких устройств и хранятся в структуре JSON, которая выглядит примерно так (обратите внимание, что я не могу контролировать структуру данных):
[
{
"group": { "id": "01234" },
"measures": {
"measures": {
"...device 1 uuid...": {
"metric.name.here": {
"mean": [
["2019-04-17T14:30:00+00:00", 300, 1],
["2019-04-17T14:35:00+00:00", 300, 2],
...
]
}
},
"...device 2 uuid...": {
"metric.name.here": {
"mean": [
["2019-04-17T14:30:00+00:00", 300, 0],
["2019-04-17T14:35:00+00:00", 300, 1],
...
]
}
}
}
}
}
]
Каждый кортеж формы["2019-04-17T14:30:00+00:00", 300, 0]
- это [timestamp, granularity, value]
.Устройства сгруппированы по идентификатору проекта.Внутри любой группы я хочу взять данные для нескольких устройств и суммировать их вместе.Например, для приведенных выше примеров данных я хочу, чтобы окончательная серия выглядела следующим образом:
["2019-04-17T14:30:00+00:00", 300, 1],
["2019-04-17T14:35:00+00:00", 300, 3],
Ряды не обязательно имеют одинаковую длину.
Наконец, я хочу объединить эти измерения вежечасные выборки.
Я могу получить отдельные серии следующим образом:
with open('data.json') as fd:
data = pd.read_json(fd)
for i, group in enumerate(data.group):
project = group['project_id']
instances = data.measures[i]['measures']
series_for_group = []
for instance in instances.keys():
measures = instances[instance][metric][aggregate]
# build an index from the timestamps
index = pd.DatetimeIndex(measure[0] for measure in measures)
# extract values from the data and link it to the index
series = pd.Series((measure[2] for measure in measures),
index=index)
series_for_group.append(series)
В нижней части внешнего цикла for
у меня есть массив объектов pandas.core.series.Series
, представляющих различныенаборы измерений, связанных с текущей группой.Я надеялся, что смогу просто сложить их вместе, как в total = sum(series_for_group)
, но это приведет к неверным данным.
Я даже правильно читаю в этих данных?Это первый раз, когда я работал с Пандами;Я не уверен, если (а) создать индекс, а затем (б) заполнить данные, правильная процедура здесь.
Как бы я успешно суммировал эти серии вместе?
Как мне пересчитать эти данные с интервалом в 1 час?Если посмотреть на этот вопрос , то это выглядит так, как будто методы .groupby
и .agg
представляют интерес, но из этого примера не ясно, как задать размер интервала.
Обновление 1
Может быть, я могу использовать concat
и groupby
?Например:
final = pd.concat(all_series).groupby(level=0).sum()