聚合来自传感器的时间序列

2024-03-21

我有大约 500 个传感器,每个传感器大约每分钟发出一次值。可以假设传感器的值保持恒定,直到发出下一个值,从而创建时间序列。传感器在发送数据时并不同步(因此观察时间戳会有所不同),但所有数据都是集中收集并按传感器存储(以允许按传感器子集进行过滤)。

如何生成一个聚合时间序列来给出传感器数据的总和? n (需要创建超过 1 天的观测集的时间序列 - 因此需要考虑每天 24x60x500 个观测值)。计算还需要快速,最好在

示例 - 原始输入:

q)n:10
q)tbl:([]time:n?.z.t;sensor:n?3;val:n?100.0)
q)select from tbl
time         sensor val
----------------------------    
01:43:58.525 0      33.32978
04:35:12.181 0      78.75249
04:35:31.388 0      1.898088    
02:31:11.594 1      16.63539
07:16:40.320 1      52.34027
00:49:55.557 2      45.47007
01:18:57.918 2      42.46532
02:37:14.070 2      91.98683
03:48:43.055 2      41.855
06:34:32.414 2      9.840246

我正在寻找的输出应该显示相同的时间戳以及传感器之间的总和。如果传感器没有在匹配时间戳处定义的记录,则应使用其先前的值(这些记录仅暗示传感器输出更改的时间)。

预期输出,按时间排序

time         aggregatedvalue
----------------------------    
00:49:55.557   45.47007  / 0 (sensor 0) + 0 (sensor 1) + 45.47007 (sensor 2)
01:18:57.918   42.46532  / 0 (sensor 0) + 0 (sensor 1) + 42.46532 (new value on sensor 2)
01:43:58.525   75.7951   / 33.32978 + 0 + 42.46532
02:31:11.594   92.43049  / 33.32978 + 16.63539 + 42.46532
02:37:14.070   141.952   / 33.32978 + 16.63539 + 91.98683
03:48:43.055   91.82017  / 33.32978 + 16.63539 + 41.855
04:35:12.181   137.24288 / 78.75249 + 16.63539 + 41.855
04:35:31.388   60.388478 / 1.898088 + 16.63539 + 41.855   
06:34:32.414   28.373724 / 1.898088 + 16.63539 + 9.840246 
07:16:40.320   64.078604 / 1.898088 + 52.34027 + 9.840246

我假设记录按时间顺序进入,因此 tbl 将按时间排序。如果不是这种情况,请先按时间对表进行排序。

d 是传感器每次的最后价格的字典。下面的解决方案可能不是最优雅的,我可以想象有一种更高效的方法可用,不需要每个。

q)d:(`long$())!`float$()
q)f:{d[x]::y;sum d} 
q)update agg:f'[sensor;val] from tbl
time         sensor val      agg     
-------------------------------------
00:34:28.887 2      53.47096 53.47096
01:05:42.696 2      40.66642 40.66642
01:26:21.548 1      41.1597  81.82612
01:53:10.321 1      51.70911 92.37553
03:42:39.320 1      17.80839 58.47481
05:15:26.418 2      51.59796 69.40635
05:47:49.777 0      30.17723 99.58358
11:32:19.305 0      39.27524 108.6816
11:37:56.091 0      71.11716 140.5235
12:09:18.458 1      78.5033  201.2184

您的 720k 记录数据集相对较小,因此任何聚合都应该远低于一秒。如果您存储多天的数据,您可能需要考虑概述的一些技术(展开、分区等)here http://code.kx.com/wiki/JB%3aKdbplusForMortals/contents .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聚合来自传感器的时间序列 的相关文章

  • 使用 Gnuplot 进行时间序列的线性回归

    我是 Gnuplot 的忠实粉丝 我在学习过程中一直将它用于各种项目 最近我想使用 Gnuplot 来绘制一些时间序列图 例如减肥 锻炼结果 气体消耗等 因此我像这样缩放x轴 set xdata time set timefmt d m Y
  • 如何在 Q/KDB 中生成格式化的日期字符串?

    如何从 Q 日期类型生成 ISO 日期字符串 yyyy MM dd 我考虑过连接各个部分 但我什至无法获取日期 月份 例如d 2015 12 01 d month prints 2015 12 即不仅仅是月份 如果您计划大规模执行此操作 即
  • 如何在R中将向量或列切割成间隔[重复]

    这个问题在这里已经有答案了 我在数据框中有以下列 每行之间的差异为 0 012 s Time 0 0 012 0 024 0 036 0 048 0 060 0 072 0 084 0 096 0 108 我想提出从开始开始增加 0 030
  • pandas 六个月的日期范围

    所以 这是我的数据框 PatientNumber QT Answer Answerdate DiagnosisDate 1 1 transferring No 2017 03 03 2018 05 03 2 1 preparing food
  • 如何使用 python + NumPy / SciPy 计算滚动/移动平均值?

    numpy scipy 上似乎没有简单计算移动平均值的函数 导致复杂的解决方案 https stackoverflow com questions 12816011 weighted moving average with numpy co
  • 按日期字符串索引时间序列

    给定一个时间序列 s 使用日期时间索引 我希望能够通过日期字符串对时间序列进行索引 我是否误解了这应该如何运作 import pandas as pd url http ichart finance yahoo com table csvs
  • 分组时间序列(面板)数据的交叉验证

    我使用面板数据 随着时间的推移 我观察许多单位 例如人 对于每个单元 我都有相同固定时间间隔的记录 当将数据分为训练集和测试集时 我们需要确保这两个集是不相交的并且顺序的 即训练集中的最新记录应该在测试集中最早的记录之前 参见例如此博客文章
  • 如何在 Pandas 的时间序列图上绘制垂直线?

    如何绘制垂直线 vlines 在熊猫系列情节中 我正在使用 Pandas 绘制滚动平均值等 并且想用垂直线标记重要位置 是否可以使用vlines或类似的东西来完成这个 在这种情况下 x 轴是datetime plt axvline x po
  • 将毫秒时间戳解析为 R 中的时间

    我以前曾问过这个问题 但我找不到确切的答案 如果我有一个代表自午夜以来的毫秒数的数字 例如 34200577 我如何将其转换为 R 时间 在午夜构造一个 基线时间 添加给定的毫秒一旦转换为秒并解释为时间 R gt as POSIXct as
  • 如何绘制大时间序列(数千次给药次数/药物剂量)?

    我正在尝试绘制医院中如何开出单一药物的图解 在这个虚拟数据库中 我在 2017 年 1 月 1 日之后遇到了 1000 名患者 绘图的目的是了解该药物的给药模式 在接近入院 出院或患者住院期间是否更频繁 高剂量给药 Get random d
  • 如何在 Pyspark 中使用滑动窗口对时间序列数据进行数据转换

    我正在尝试根据时间序列数据的滑动窗口提取特征 在Scala中 似乎有一个sliding函数基于这个帖子 https stackoverflow com a 28863132 3089523 and 文档 http spark apache
  • 静态时序数据的数据库解决方案

    我们拥有一个庞大且不断增长的实验数据集 该数据集取自约 30 000 名受试者 对于每个主题 都有多个数据记录 在每个记录中 收集了多个生理数据时间序列 每个时间序列约 90 秒长 并以 250Hz 采样 我应该注意到 时间序列的任何给定实
  • 从时间序列生成日期特征

    我有一个数据框 其中包含如下列 Date temp data holiday day 01 01 2000 10000 0 1 02 01 2000 0 1 2 03 01 2000 2000 0 3 30 01 2000 200 0 30
  • 如何检测时间序列中的趋势是增加还是减少?

    我有几周的销售数据 xs weeks 1 2 3 4 ys Units Sold 1043 6582 5452 7571 从给定的序列中 我们可以看到 虽然从xs 2 到xs 3 有所下降 但总体趋势是增加的 如何检测小时间序列数据集中的趋
  • Bokeh 中的 TimeSeries 使用带索引的数据框

    我正在尝试使用 Bokeh 来绘制Pandas数据框带有DateTime包含年份和数字一的列 如果DateTime指定为x 行为是预期的 x 轴中的年份 但是 如果我使用set index转动DateTime列放入数据帧的索引中 然后仅指定
  • ggplot多个时间不等的时间序列

    我知道有一些与时间序列和多个数据帧相关的已回答问题 但我似乎无法弄清楚这一点 我想绘制 4 个不同压力传感器与时间的时间戳数据 pa 列 我有来自同一实验的 4 个带时间戳的压力读数 dfs 然而 由于传感器故障和数据中的其他信号 传感器收
  • KDB表的主键生成

    有没有办法在 KDB 中指定自动递增的主键列 即像传统的 RMDS 例如 Oracle 的序列 一样 不需要在此列中插入 它将自动填充每条新记录 表将自动具有一个名为 i 的隐藏 虚拟 递增列 q tab col1 a b c col2 1
  • 时间序列折线图与轴不同步

    本实验基于这个d3官方例子 http bost ocks org mike path 我想要实现的是可视化时间序列数据的最后 x 分钟 我有这个代码的副本jsfiddle http jsfiddle net 225dC 3 单击以添加新数据
  • 如何计算大型数据集的平均值

    我正在使用一个数据集 该数据集每天 24 小时每小时读取一次温度读数 已有 100 多年的历史 我想获得每天的平均温度以减少数据集的大小 标题看起来像这样 YR MO DA HR MN TEMP 1943 6 19 10 0 73 1943
  • 时间序列数据的键值存储?

    我一直在使用 SQL Server 存储数十万个对象的历史时间序列数据 每天观察大约 100 次 我发现查询 给我时间 t1 和时间 t2 之间对象 XYZ 的所有值 太慢 对于我的需要 慢超过一秒 我按时间戳和对象 ID 建立索引 我考虑

随机推荐