数据聚合(一)

在统计学中,聚合的定义指

使用基于多组观测结果的总结的统计替换多组观测结果 -- 来自 https://web.archive.org/web/20120112062156/http://www.r-bloggers.com/aggregation-and-restructuring-data-from-%E2%80%9Cr-in-action%E2%80%9D/

预期的功能及实现

实现一个由分钟到年的聚合系统。

一、根据下一级数据聚合

比如小时的数据由分钟聚合,天的数据由小时聚合,周、月的数据由天聚合,年的数据由月聚合。

要求:

  • 下级数据存在
  • 选择正确的下级数据。比如月数据就不能由周数据聚合,而只能从天来聚合。

好处:
可以减少计算量。

二、数据完整

由于要根据下一级数据聚合,所以每个级别的数据都不能少。所以需要

  • 能够检测(各个级别的)数据是否完整
  • 能够幂等地重跑数据
  • 自动检测到数据不完整后,能自动地重跑数据

时区问题

一般的聚合都是基于时间的,比如从分钟以下聚合为分钟,然后小时,天,周,月,年等,所以就会有时区存在。

写入与查询

写入数据库的时间要带上时区。因为 MySQL、MongoDB 等数据库会将写入的 datetime 转化为 UTC 时区再储存,所以如果写入的时间没有带时区,数据库就会认为写入时间是 UTC 时区,可能会与你预期的不一致。

同理,查询时也要带上时区,因为数据库默认没有时区的时间为 UTC 时区。

聚合结果的时间储存

由于当前级别的数据是根据下一级数据聚合的,所以需要储存级别--时间类型以及时间。

时间类型为

  1. minutely
  2. hourly
  3. daily
  4. weekly
  5. monthly
  6. yearly

聚合时间为时间段的起点,我们把它叫做 time_start

"date_type" : "minutely", "time_start" : ISODate("2018-01-21T05:01:00Z")
"date_type" : "minutely", "time_start" : ISODate("2018-01-21T05:02:00Z")
...
"date_type" : "minutely", "time_start" : ISODate("2018-01-21T05:59:00Z")
// 根据以上的分钟数据聚合成的小时数据
"date_type" : "hourly", "time_start" : ISODate("2018-01-21T05:00:00Z")

多时区

由于在不同时区的每天的定义是不同的:

北京时间 07月31日为 “07月30日16:00:00 UTC -- 07月31日16:00:00 UTC” 而东京则为 “07月30日15:00:00 UTC -- 07月31日15:00:00 UTC”。

我目前的想法是再给聚合加上时区参数,但在本文不讨论聚合包含多时区问题,因为能用到的地方比较少。

聚合时机

聚合时机为当下一级别的数据不再变化时。一般来说,过去的数据是不会再变化的,所以我们聚合过去的数据:当前分钟聚合上一分钟的数据,当前小时聚合上一小时的数据,每月一号计算上一月的数据。

如果存在特殊情况导致要等待的久一些:比如由于网络延迟导致数据来的慢一些。我们也要进行调整:比如当前分钟聚合5分钟前的数据。

原文地址:https://www.cnblogs.com/jay54520/p/8370629.html

时间: 2024-08-02 00:46:04

数据聚合(一)的相关文章

Python数据聚合和分组运算(1)-GroupBy Mechanics

前言 Python的pandas包提供的数据聚合与分组运算功能很强大,也很灵活.<Python for Data Analysis>这本书第9章详细的介绍了这方面的用法,但是有些细节不常用就容易忘记,遂打算把书中这部分内容总结在博客里,以便复习查看.根据书中的章节,这部分知识包括以下四部分: 1.GroupBy Mechanics(groupby技术) 2.Data Aggregation(数据聚合) 3.Group-wise Operation and Transformation(分组级运

运维 2.0 时代:数据聚合和分组

运维 2.0 时代:数据聚合和分组 from http://www.cnblogs.com/oneapm/p/4962111.html 运维 2.0 是指,从技术运维升级为服务运维,向公司提供可依赖的专业服务.运维 2.0 强调服务交付能力,而不是技术能力,需求可依赖.懂业务.服务化的专业运维. 为了了解运维 2.0 时代的监控方式,我们不妨从以前的监控手段说起.首先来了解一下 Zabbix ,通过 Zabbix 能够监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员

Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4节 透视表和交叉表 第5节 时间序列 第6节 日期的规范.频率以及移动 第7节 时区处理 第8节 时期及算术运算 第9节 重采样及频率转换 第10节 时间序列绘图 groupby 技术 一.实验简介 Python 数据分析(二)需要同学们先行学完 Python 数据分析(一)的课程. 对数据集进行分

数据聚合

我这里的聚合指的是将数据汇总起来,比如一天的数据汇总成一条,然后汇总成一周.一月.逻辑就是这样,比较简单. 下面说说我遇到的问题. 时区问题 时区的处理方式可以参考我的另一篇文章--时区问题. 这里直接说处理方式. 查询.储存数据时,时间要带上时区或者不带时区但确定是 UTC 时间 不要缩小储存时间的长度 第一点不做说明了,说说第二点.之前我将一天的数据聚合到一条记录里面,根据平常的逻辑,将统计时间设置为 "%Y-%m-%d" 的形式.我们平时表示是哪天,不就是这样说吗?“今天是 20

Mongodb中数据聚合之基本聚合函数count、distinct、group

在之前的文章<Mongodb中数据聚合之MapReduce>中,我们提到过Mongodb中进行数据聚合操作的一种方式--MapReduce,但是在大多数日常使用过程中,我们并不需要使用MapReduce来进行操作,不然有点杀鸡用牛刀的感觉,在这边文章中,我们就简单说说用自带的聚合函数进行数据聚合操作的实现. Mongodb中自带的基本聚合函数有三种:count.distinct和group.下面我们分别来讲述一下这三个基本聚合函数. (1)count 作用:简单统计集合中符合某种条件的文档数量

Mongodb中数据聚合之聚合管道aggregate

在之前的两篇文章<Mongodb中数据聚合之基本聚合函数count.distinct.group>和<Mongodb中数据聚合之MapReduce>中,我们已经对数据聚合提供了两种实现方式,今天,在这篇文章中,我们讲讲在Mongodb中的另外一种数据聚合实现方式--聚合管道aggregate. 面对着广大用户对数据统计的需求,Mongodb从2.2版本之后便引入了新的功能聚合框架(aggregation framework),它是数据聚合的新框架,这个概念类似于数据处理中的管道.每

Python 数据分析—第九章 数据聚合与分组运算

打算从后往前来做笔记 第九章 数据聚合与分组运算 分组 #生成数据,五行四列 df = pd.DataFrame({'key1':['a','a','b','b','a'], 'key2':['one','two','one','two','one'], 'data1':np.random.randn(5), 'data2':np.random.randn(5)}) df #可以按照key1分组计算data1的平均值 df.loc[:,'data1'].groupby(df.loc[:,'key

数据聚合与分组运算

一.GroupBy技术 分组运算的过程可以由拆分-应用-合并描述. 利用df.groupby()进行分组操作 1.对分组进行迭代 GroupBy对象支持迭代,可以产生一组二元元组(由分组名(可能为组合)和数据块组成).对分出的数据片段可以做任何操作,例如将其做成一个字典.groupby默认是在axis=0上进行分组的,通过设置可以在任何其他轴上进行分组,例如还可以根据dtypes对列进行分组. 2.选取一个或一组列 对于由DataFrame产生的GroupBy对象,如果用一个或一组列名对其进行索

Config 多账户多区域数据聚合

聚合器是一种 AWS Config 资源类型,用于从以下内容收集 AWS Config 配置和合规性数据: 多个账户和多个区域. 单个账户和多个区域. AWS Organizations 中的组织和该组织中的所有账户. 使用聚合器查看在 AWS Config 中记录的资源配置和合规性数据. 有关概念的更多信息,请参阅“概念”主题中的多账户多区域数据聚合部分. 要从源账户和区域收集您的 AWS Config 数据,请从以下操作开始: 添加聚合器以从多个账户和区域聚合 AWS Config 配置和合