#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : scipy_demo.py
# @Software: PyCharm
'''
参考:
https://github.com/gnocchixyz/gnocchi/tree/3.1.4
模拟gnocchi聚合的思路进行聚合的demo
gnocchi聚合算法:
步骤1:对时间序列ts的索引ts.index用采样间隔进行分组得到indexes
步骤2:对分组后的索引indexes通过numpy.unique重计算得到uniqeIndexes
步骤3:调用ndimage.mean方法,进行如下操作
ndimage.mean(ts.value , labels=indexes, index=uniqueIndexes)
即可得到聚合结果aggregatedValues
步骤4: 将uniqueIndexes还原为datetime64[ns]类型的numpy数组
timestamps
步骤5: 重新用步骤3得到的aggregatedValues和步骤4得到的timestamps
构建新的时间序列,该时间序列即为最终聚合的时间序列newTimeSerie
步骤6:根据需要保存的点的个数n,进行切片处理,获取newTimeSerie[-n:]
作为最终保存的时间序列的结果
解释:
scipy.ndimage.measurements.mean(input, labels=None, index=None)[source]
功能:计算数组在labels处的平均值
参数:
input:数组,
labels:类似数组,可选的。对应每个元素有一个标签
标签数组的一些性状,或者。
所有共享相同label的区域的元素会被用于计算平均值。
index:需要计算的区域
返回值:列表
分析分组的算法:
(a // b) * b:这个操作的含义获取能够被b整除且最接近a的数
Gnocchi: 6、基于gnocchi的时间序列算法demo实现
最新推荐文章于 2020-06-09 21:57:34 发布