美文网首页Python全栈工程师
25.4-时间窗口函数实现

25.4-时间窗口函数实现

作者: BeautifulSoulpy | 来源:发表于2019-10-21 20:59 被阅读0次

如果人生面对的最大苦难只是死亡,那还有什么可以害怕的呢?人生中没有解决不了的事,也没有无法面对的事。

滑动窗口

时间窗口分析

概念:很多数据,例如日志,都是和时间相关的,都是按照时间顺序产生的。产生的数据分析的时候,要按照时间求值;
interval 表示每一次求值的时间间隔
width 时间窗口宽度,指的一次求值的时间窗口宽度

当 width > interval
当 width = interval

当 width < interval 数据求值没有重叠

时序数据

运维环境中,日志、监控等产生的数据都是与实践相关的数据,按照时间先后产生并记录下来的数据,索引一般按照时间对数据进行分析;


窗口函数实现

攒一个数据,实现多少秒处理一次;

# 生成器;

import random #产生随机数;
import time  # 休息一会
import datetime # 时间

def source(seconds=1):
    while True:
        yield {'datetime':datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=8))),'value':random.randint(1,100)}
        time.sleep(seconds)
               
s = source()
# collecting date
items = [next(s) for _ in range(3)]
print(items)

def avg_handler(iterable):
    return sum(map(lambda item:item['value'],iterable)) / len(iterable)

ret = avg_handler(items)
print('{:.2f}'.format(ret))
#--------------------------------------------------------------------
[{'datetime': datetime.datetime(2019, 10, 21, 20, 42, 31, 313003, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800))), 'value': 30}, {'datetime': datetime.datetime(2019, 10, 21, 20, 42, 32, 313114, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800))), 'value': 87}, {'datetime': datetime.datetime(2019, 10, 21, 20, 42, 33, 313352, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800))), 'value': 21}]
46.00


# 窗口函数实现;
def window(iterator,handler,width:int,interval:int):
    buf = []
    start =datetime.datetime.strptime('19700101 00:00:01 +0800','%Y%m%d %H:%M:%S %z')
    current =datetime.datetime.strptime('19700101 00:00:01 +0800','%Y%m%d %H:%M:%S %z')
    delta = width - interval
    
    while True:
        data = next(iterator)
        if data:
            buf.append(data)
            current =data['datetime']
        print(current,start)
        
        if (current - start).total_seconds() > interval:
            print('~~~~~~~~~~~~~')
            ret = handler(buf)
            print('{:.2f}'.format(ret))
            start = current
            
            # clean old_date
            buf = [x for x in buf if x['datetime'] > current - dalta ]
            
window(s,avg_handler,10,5)    
# ------------------------------------------------------------------------












相关文章

  • 25.4-时间窗口函数实现

    如果人生面对的最大苦难只是死亡,那还有什么可以害怕的呢?人生中没有解决不了的事,也没有无法面对的事。 滑动窗口 时...

  • SQL中的窗口函数

    简介 窗口函数也叫OLAP函数,一般用于聚合函数无法实现的高级操作。 语法 常见的窗口函数 1、聚合函数(sum、...

  • 【案例实操】数据分析必知必会的窗口函数

    01、什么是窗口函数? 1、定义 理解窗口函数,顾名思义,这是一个可以在滑动窗口上实现各种统计操作的函数。一个滑动...

  • Mysql窗口函数

    参考: MySQL 8.0窗口函数:用非常规思维简易实现SQL需求 数分面试-SQL篇 一、mysql窗口函数简介...

  • Java_接口与抽象类的小程序

    1.代码: 用输入输出语句表示窗口的创建主函数: 窗口:抽象函数与接口的实现 定义抽象类(窗口主要的操作) 定义接...

  • OpenGL绘制正方形

    实现绘制正方形,主要分为创建Main函数、设置窗口、设置显示函数、设置渲染属性、按键监听函数等五个步骤来实现 第一...

  • JavaScript - 函数防抖debounce

    函数防抖: 事件频繁触发时,不执行函数。频繁触发停止后,设置时间窗口,如果时间窗口内没有再次触发,函数执行一次。如...

  • Hive常用函数

    一、窗口函数 1、窗口函数基础结构 窗口函数 = 分析函数 + over函数分析函数:sum ( )、max ( ...

  • 窗口函数(OVER 子句)

    窗口函数简介 数据准备 问题描述 解答 窗口函数简介 窗口函数是 SQL 中一类特别的函数。 和聚合函数相似,窗口...

  • OpenGL学习之路(1.0) 通过OpenGL 绘制三角形

    效果 案例实现 实现绘制三角形,主要分为创建Main函数、设置窗口、设置显示函数、设置渲染属性等四个步骤来实现 首...

网友评论

    本文标题:25.4-时间窗口函数实现

    本文链接:https://www.haomeiwen.com/subject/otdxvctx.html