时间序列数据

概述

参考:

Time Series(时间序列) 在数学概念中,是按时间顺序索引(或列出或绘制)的一系列数据点。最常见的是,时间序列是在连续的相当间隔时间点上获取的序列。因此,它是一系列 Discrete Time(离散时间) 数据。

Time Series Data(时间序列数据,简称 series) 是在一段时间内通过重复 Measurement(测量) 而获得的观测值的集合;可以将这些观测值绘制于图形之上,它会有一个数据轴和一个时间轴。横轴(也叫 x 轴)代表时间,纵轴(也叫 y 轴)代表观测到的值。

时间序列数据无处不再,因为时间是所有可观察到的事务的组成部分。随着我们对世界的仪器化程度越来越高,传感器和系统不断地发出无休无止的时间序列数据流。这样的数据在各个行业中都有大量的应用。

时间序列数据可用于

  • 跟踪每小时、每日、或每周的天气数据
  • 跟踪应用程序的性能变化
  • 医疗设备可实时观察生命体征
  • 跟踪网络日志
  • ……等等等

时间序列数据示例

示例 1:天气情况

气象记录,经济指标和患者健康发展指标-均为时间序列数据。时间序列数据还可以是服务器指标,应用程序性能监视,网络数据,传感器数据,事件,点击次数和许多其他类型的分析数据。

请注意,如下图底部所示,时间是底部的轴。

示例 2:股票交易所

在下面的下一张图表中,请注意时间作为衡量股价变化的轴。在投资中,时间序列会跟踪数据点的移动,例如在指定时间段内的证券价格,并定期记录数据点。可以短期(例如,一个工作日内每小时的证券价格)或长期(例如五年内每个月的最后一天收盘价)进行跟踪)。

示例 3:群集监视

下面的群集监视示例描述了磁盘操作的写入和使用情况数据,这是 Network Operation Center 团队所熟悉的。请记住,监视数据是时间序列数据。

示例 4:健康监控

时间序列数据的另一个常见示例是患者健康监测,例如心电图(ECG),它可以监测心脏的活动以显示其是否正常工作。

示例 5:日志

除了按固定的时间间隔捕获之外,还可以随时捕获时间序列数据,无论时间间隔如何,例如在日志中。日志是事件,进程,消息以及软件应用程序与操作系统之间的通信的注册表。每个可执行文件都会生成一个日志文件,其中记录了所有活动。日志数据是分类和解决问题的重要上下文资源。例如,在联网中,事件日志有助于提供有关网络流量,使用情况和其他条件的信息。

示例 6:跟踪

跟踪(应用程序在执行过程中执行的子例程调用的列表)也是时间序列数据。在下面的跟踪图中的彩色带上,您可以看到时间序列数据的示例。跟踪的目的是跟踪程序的流程和数据进度。跟踪包含对应用程序的广泛,连续的视图,以查找程序或应用程序中的错误。

上面的示例包含两种不同类型的时间序列数据,如下所述。

时间序列数据的组成

Time Series(时间序列) 有时候简称为 Series。比如有这么几种描述:一系列的书、这一系列操作、等等。可以通过这种语境来理解 series(比如可以这么描述:这一系列数据)。

一条时间序列数据,通常由如下及部分组成:

  • Metrics(指标) # 用来描述要采集的数据指标。例如:检测各个城市的风力、系统内存已使用的字节数 等等。相当于关系型数据库中的表。
  • Sample(样本) # 针对监测对象的某项指标(由 Metric 和 Tag 定义)按特定时间间隔采集到的每个 Metric 值就是一个 Sample(样本)。类似关系型数据库中的一行。

Metrics(指标)

有的地方也称为 Metrics(度量)

Metrics 是用来描述要采集的数据指标。例如:检测各个城市的风力、系统内存已使用的字节数 等等。相当于关系型数据库中的表。

  • Labels(标签) # 用来描述 Metrics 的属性。例如: 哪个设备、模块、地点产生的风力。这些属性一般不随时间的变化而变化,仅供查询使用。
    • 有的地方也称为 Tags(标签)
    • 一个 Lable 一般由 LabelName 和 LabelValue 组成,一个 Metric 可以有多个 Label。例如: 城市=杭州,地区=西湖,扽等,这都是一个 Label

Sample(样本)

有的地方也称为 Data Point(数据点)

Sample(样本) 是针对监测对象的某项指标(由 Metric 和 Tag 定义)按照特定时间间隔采集到的每个 Metric 值。类似关系型数据库中的一行。

  • Value(值) # 用来描述指标的值。一般情况下存放的是会随着时间的变化而变化的数据。一个 Metric 可以支持多个 Value,也可以只有一个 Value。例如:Metrics 为风力,则该指标可以有两个 Value:方向和速度
    • 有的地方也称为 Field(字段)
  • Timesstamp(时间戳) # 指标的值产生的时间点。

时间序列数据的特色

  • 并不总是需要修改旧数据
  • 大部分时间都是写入数据
  • 写入数据都是顺序添加的,大多数时候,数据到达的先后都以时间排序
  • 基本不会写入很早之前的数据
  • 删除操作一般为区块删除,选定开始的历史时间并指定后续的区块。很受单独删除某个时间或者分开的随机时间的数据
  • 数据量并发写入非常大

时间序列数据类型

时间序列数据可以分为两种类型:

  1. 以固定的时间间隔收集度量(度量标准)
  2. 以不规则的时间间隔(事件)收集测量结果

在上面的“时间序列数据示例”部分中:

  • 示例 3(集群监视)和示例 4(运行状况监视)描述了 指标
  • 示例 5(日志)和 6(跟踪)描述了 事件

因为事件以不规则的间隔发生,所以事件是不可预测的,因此无法建模或预测,因为预测假设过去发生的任何事情都可以很好地指示将来发生的事情。

线性与非线性时间序列数据

线性时间序列是这样一个序列:对于每个数据点 X t,该数据点都可以视为过去或将来的值或差异的线性组合。非线性时间序列是由非线性动力学方程生成的。它们具有无法通过线性过程建模的特征:时变方差,不对称循环,更高矩的结构,阈值和中断。使用线性和非线性时间序列数据时,有一些重要的注意事项:

  • 如果回归方程不遵循线性模型的规则,则它必须是非线性模型。
  • 非线性回归可以拟合各种曲线。
  • 两种模型的定义特征是功能形式。

识别时间序列数据

时间序列数据 的独特之处在于它具有自然的时间顺序:观察数据的顺序很重要。时间序列数据与常规数据的主要区别在于,随着时间的推移,您总是会提出有关它的问题。确定您正在使用的数据集是否为时间序列的一种通常简单的方法是查看您的坐标轴是否为时间。

时间序列注意事项

不变性 –由于时间序列数据按时间顺序排列,因此几乎总是将其记录在新条目中,因此,它应该是不变的且只能追加(附加到现有数据中)。它通常不会更改,而是按照事件发生的顺序进行处理。此属性将时间序列数据与通常是可变的关系数据区分开来,并存储在进行在线事务处理的关系数据库中,在此关系数据库中,行随着事务的运行而更新,或多或少随机地进行更新;例如,以一个现有客户的订单为例,更新客户表以添加已购买的项目,还更新库存表以显示它们不再可供出售。

时间序列数据是有序的,这使得它在数据空间中是唯一的,因为它经常显示出序列依赖性。当某个时间点的数据点的统计值在另一时间统计地依赖于另一个数据点时,就会发生串行依赖性(有关此主题的详细说明,请阅读“时间序列数据中的自相关”)。

尽管没有时间以外的事件存在,但也有一些时间与时间无关的事件。时间序列数据不仅涉及按时间顺序发生的事情,还涉及将时间添加为轴时其价值增加的事件。时间序列数据有时会以较高的粒度级别存在,频率通常为微秒或什至纳秒。有了 时间序列数据,随时间变化就是一切。

时间序列数据的不同形式 –时间序列数据并不总是数字的-它可以是 int64,float64,bool 或 string。

时间序列数据与横截面和面板数据

要确定您的数据是否为时间序列数据,请确定在数据集中确定唯一记录所需的条件。

  • 如果您只需要一个时间戳,则可能是时间序列数据。
  • 如果您需要除时间戳之外的其他内容,则可能是横截面数据。
  • 如果您需要时间戳以及其他内容(例如 ID),则可能是面板数据。

回顾以下三种数据类型中的每一种的定义(以及它们之间的区别),上述含义将变得更加清楚:

时间序列数据定义

时间序列数据是单个受试者 (实体)在 不同时间间隔 (通常在度量标准情况下等距间隔,或在事件情况下等距间隔 )下的观察值(行为) 的集合 。

例如:每年第一天(多个时间间隔)收集的纽约市(单个实体)的最高温度,湿度和风(所有三种行为)

时间作为轴的相关性使时间序列数据有别于其他类型的数据。

横截面数据定义

横截面数据是 在单个时间点多个主题(实体,例如不同的个人或群体) 的观察(行为) 的集合 。

例如:2015 年 1 月 1 日在纽约市,SFO,波士顿,芝加哥(多个实体)的最高温度,湿度和风(所有三种行为)(单个实例)

在横断面研究中,观察结果没有自然的顺序(例如,通过参考他们各自的教育水平来解释人们的工资,可以以任何顺序输入个人的数据)。

例如:一组给定时间的 50 只股票的收盘价,特定商店中某个给定产品的库存清单以及一类学生在给定考试中获得的成绩列表。

面板数据(纵向数据)的定义

面板数据通常被称为横截面时间序列数据,因为它是上述类型的组合(即, 在多个情况下针对多个对象的观测值的集合)。

面板数据或纵向数据是 涉及随时间进行测量的多维 数据。面板数据包含对同一公司或个人在多个时间段内获得的多种现象的观察结果。使用面板数据的研究称为纵向研究或面板研究。

例如:每年第一天(多个时间间隔)在纽约市,SFO,波士顿,芝加哥(多个实体)的最高温度,湿度和风(所有三种行为)。

三种数据类型之间的差异

基于以上定义和示例,让我们回顾一下三种数据类型之间的区别:

  1. 时间序列 是一组在时间上单个实体的观察-例如日收盘价超过一年为一个单一的金融安全,或测量过一个小时的过程,每分钟一个病人的心脏速率。
  2. 一个 横截面 是在单一时间的一组多个实体的意见-例如,今天的收盘价为每个 S&P 500 指数公司,或同一过程的开始的 100 例患者的心脏速率。
  3. 如果您的数据是在两个维度上组织的,例如 500 家公司一年内的每日收盘价,那么您将拥有 面板 数据。

如何理解和使用时间序列数据

跨多个领域的各种目的收集,存储,可视化和分析时间序列数据 :

  1. 在数据挖掘,模式识别和机器学习中,时间序列分析用于聚类,分类,按内容查询,异常检测和预测。
  2. 在信号处理,控制工程和通信工程中,时间序列数据用于信号检测和估计。
  3. 在统计,计量经济学,定量金融,地震学,气象学和地球物理学中,时间序列分析用于预测。

可以在不同类型的图表中可视化时间序列数据 , 以促进见解提取,趋势分析和异常检测。时间序列可视化和仪表板工具包括 InfluxDB UI 和 Grafana。

时间序列数据用于时间序列分析(历史或实时)和时间序列预测中,以检测和预测模式-本质上是观察随时间的变化。以下是每个内容的简要概述。

时间序列分析方法

时间序列分析是使用统计方法来分析时间序列数据并提取有意义的统计信息和有关数据的特征。时间序列分析有助于确定趋势,周期和季节性变化,以帮助预测未来事件。与时间序列分析相关的因素包括平稳性,季节性和自相关。

时间序列分析对于查看给定变量随时间的变化很有用(而时间本身,在时间序列数据中通常是自变量)。时间序列分析还可以用于检查与所选数据点关联的更改与同一时间段内其他变量的移动相比如何。

了解有关时间序列分析方法的更多信息,包括频谱分析,小波分析,自相关和互相关。

时间序列预测方法

时间序列预测使用有关历史值和相关模式的信息来预测未来的活动。

时间序列的预测方法包括:

  • 趋势分析
  • 周期性波动分析
  • 季节性模式分析

与所有预测方法一样,不能保证成功。机器学习通常用于此目的。它的经典前身也是:误差,趋势,季节性预测(ETS),自回归综合移动平均线(ARIMA)和 Holt-Winters

为了提前“看清事物”,时间序列建模(基于时间序列数据的预测方法)涉及处理基于时间的数据(年,日,小时,分钟),以获取可为决策提供依据的隐藏见解。当您具有序列相关的数据时,时间序列模型是非常有用的模型。大多数企业使用时间序列数据来分析明年的销售预测,网站流量,竞争性定位等等。

了解有关时间序列预测方法的更多信息,包括分解模型,基于平滑的模型以及包括季节性的模型。

如何存储时间序列数据

时间序列数据通常被大量摄取,并且需要专门设计的数据库来处理其规模。使时间序列数据与其他数据工作负载有很大不同的属性是数据生命周期管理,汇总和许多记录的大范围扫描。这就是为什么最好将时间序列数据存储在 专门用于处理带有时间戳的度量标准和事件或度量的 时间序列数据库中的原因。

了解有关时间序列数据存储的更多信息,以及有关存储,收集和分析时间序列数据的最佳方法的更多信息。

时间序列数据库

Time Series Database(时序列数据库,简称 TSDB),简单理解为一个优化后用来处理时间序列数据的软件,并且数据中的数组是由时间进行索引的。

时间序列数据库的特点

  • 大部分时间都是写入操作。
  • 写入操作几乎是顺序添加,大多数时候数据到达后都以时间排序。
  • 写操作很少写入很久之前的数据,也很少更新数据。大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库。
  • 删除操作一般为区块删除,选定开始的历史时间并指定后续的区块。很少单独删除某个时间或者分开的随机时间的数据。
  • 基本数据大,一般超过内存大小。一般选取的只是其一小部分且没有规律,缓存几乎不起任何作用。
  • 读操作是十分典型的升序或者降序的顺序读。
  • 高并发的读操作十分常见。

常见的时间序列数据库

TSDB 项目官网
influxDBhttps://influxdata.com/
RRDtoolhttp://oss.oetiker.ch/rrdtool/
Graphitehttp://graphiteapp.org/
OpenTSDBhttp://opentsdb.net/
Kdb+http://kx.com/
Druidhttp://druid.io/
KairosDBhttp://kairosdb.github.io/
PrometheusPrometheus

最后修改 March 25, 2025: clearup (feb59d93)