精华内容
下载资源
问答
  • UCR时序数据

    2019-05-07 23:05:35
    本资源为最新UCR时序数据集,包括128个时序数据时序数据是指时间序列数据。时间序列数据是同一统一指标按时间顺序记录的数据列。在同一数据列中的各个数据必须是同口径的,要求具有可比性。时序数据可以是时期数,...
  • 时序数据分析方法综述,很好的资料! 时序数据分析方法综述,很好的资料!
  • 时序数据等间隔处理

    2018-05-03 11:14:38
    利用三次样条插值对数据进行插值处理,得到等间隔数据
  • 神经网络是一种模拟生物学神经的机器学习模型,数据来源于输入层并流经具有各种激活阈值的节点。 递归神经网络是一种在输入被理解之前保持其内部记忆的神经网络,所以它们可以进行数据流中时间依赖的结构的学习。 ...
  • #资源达人分享计划#
  • 时序数据异常检测

    2019-02-15 10:33:47
    outlier detection for temporal data 的综述,时序数据异常检测
  • 在诸多时序数据分类算法中,有一类算法借助时序数据的局部特征对时序数据进行分类,它们取得了不错的分类结果,然而其时间复杂度以及分类精度依旧存在可见的提升空间.本文提出的微局部特征二分类算法,着眼于局部...
  • 本文将主要讲述如何使用BLiTZ(PyTorch贝叶斯深度学习库)来建立贝叶斯LSTM模型,以及如何在其上使用序列数据进行训练与推理。 原创文章 54获赞 109访问量 18万+ 关注 私信 展开阅读全文 作者:deephub
  • 时序数据数据预处理、特征提取代码。分段特征、统计特征、熵特征。
  • 个人写的综述,课程作业需要
  • 提出一种带有同步预测的时序数据融合算法,利用多分辨率分析特性对采集的原始数据进行预处理,挖掘反映人体生理状态的本质特征,进而采用同步预测机制在感知节点和汇聚节点处分别建立轻量级预测模型,消除网内冗余...
  • 海量时序数据的压缩存储方法研究,海量时序数据的压缩存储方法研究,海量时序数据的压缩存储方法研究,海量时序数据的压缩存储方法研究
  • 基因表达时序数据的HMM层次聚类.pdf
  • 一种时序数据局部相关对象聚类算法.pdf
  • MATLAB格式的几个常用多变量时序数据集,可以用于分类或者聚类研究。包括ArabicDigits、AUSLAN、CharacterTrajectories、CMUsubject16、ECG、JapaneseVowels、KickvsPunch、Libras、NetFlow、UWave、Wafer、...
  • 引入评价时序数据去噪效果的均方根变化量、互相关系数、信噪比及平滑度4项指标,分析了不同小波策略的去噪效果与指标间的关系。结果表明,不同于小波分解重构阶段,小波策略阶段的去噪均方根误差与4项指标存在正相关...
  • 基于k平面聚类的时序数据粒化和预测.pdf
  • 当前我国煤矿都安设了安全监控系统,但总体数据质量较差,产生的大量时序数据缺乏深入挖掘,满足不了煤矿安全生产的需要。本文利用数据融合方法,从数据级、特征级和决策级等三个层级对安全监测时序数据进行了分析处理,...
  • 时序数据治理是数据治理领域核心、打通IT与OT域数据链路,是工业物联网基石、大数据价值创造的关键、企业管理提升的发动机、是数字化转型的重要支撑。 工业企业在生产经营过程中,会运用物联网技术,采集大量的数据...

    来源:数据工匠俱乐部    作者:蔡春久

    前言

    时序数据治理是数据治理领域核心、打通IT与OT域数据链路,是工业物联网基石、大数据价值创造的关键、企业管理提升的发动机、是数字化转型的重要支撑。

    工业企业在生产经营过程中,会运用物联网技术,采集大量的数据并进行实时处理,这些数据都是时序的,而且具有显著的特点,比如带有时间戳、结构化、没有更新、数据源唯一等。

    时序数据处理应用于智慧城市、物联网、车联网、工业互联网领域的过程数据采集、过程控制,并与过程管理建立一个数据链路,属于工业数据治理的新兴领域。

    本文主要讲解时序数据的定义、典型特点、时序数据的应用场景、数采难点及时序数据工具等内容。

    一 时序数据的定义及作用

    时序数据是指时间序列数据。是按时间顺序记录的数据列,在同一数据列中的各个数据必须是同口径的,要求具有可比性。时序数据可以是时期数,也可以时点数。

    时序数据管理主要通过对时序数据的采集、处理和分析帮助企业实时监控企业的生产与经营过程。

    时序数据在应用上特点也很明显,比如数据往往只保留一定时长,需要做降频采样、插值、实时计算、聚合等操作,关心的是一段时间的趋势,而不是某一特定时间的值等。

    工业企业为了监测设备、生产线以及整个系统的运行状态,在各个关键点都配有传感器、采集各种数据。这些数据是周期或准周期产生的,有的采集频率高,有的采集频率低,这些采集的数据一般会发送至服务器,进行汇总并实时处理,对系统的运行做出实时监测或预警。

    时序数据常常被长期保存下来,用以做离线数据分析,例如在工业企业应用场景如下:

    1)分析故障,看主要的设备故障是什么;

    2)分析产能,看如何优化配置来提升生产效率;

    3)分析能耗,看如何降低生产成本;

    4)分析潜在的安全隐患,以降低故障时长。

    图片

     

    《数据治理:工业企业数字化转型之道》数据治理体系车轮图

    二 时序数据的十二大典型特点

    与各种信息管理系统的数据相比,工业领域的时序数据具有鲜明的特点。

    图片

    (1)数据是时序的,一定带有时间戳:联网的设备按照设定的周期,或受外部事件的触发,源源不断地产生数据,每个数据点是在哪个时间点产生的,这个时间对于数据的计算和分析十分重要,必须要记录。

    (2)数据是结构化的:网络爬虫的数据、微博、微信的海量数据都是非结构化的,可以是文字、图片、视频等。但物联网设备产生的数据往往是结构化的,而且是数值型的,比如智能电表采集的电流、电压就可以用4字节的标准的浮点数来表示。

    (3)数据极少有更新操作:联网设备产生的数据是机器日志数据,一般不容许而且也没有修改的必要。很少有场景,需要对采集的原始数据进行修改。但对于一个典型的信息化或互联网应用,记录是一定可以修改或删除的。

    (4)数据源是唯一的:一个物联网设备采集的数据与另外一个设备采集的数据是完全独立的。一台设备的数据一定是这台设备产生的,不可能是人工或其他设备产生的,也就是说一台设备的数据只有一个生产者,数据源是唯一的。

    (5)相对互联网应用,写多读少:对于互联网应用,一条数据记录,往往是一次写,很多次读。比如一条微博或一篇微信公众号文章,一次写,但有可能会有上百万人读。但物联网设备产生的数据不一样,对于产生的数据,一般是计算、分析程序自动读,而且计算、分析次数不多,只有分析事故等场景,人才会主动看原始数据。

    (6)用户关注的是一段时间的趋势:对于一条银行记录,或者一条微博、微信,对于它的用户而言,每一条都很重要。但对于物联网数据,每个数据点与数据点的变化并不大,一般是渐变的,大家关心的更多是一段时间,比如过去5分钟,过去1小时数据变化的趋势,一般对某一特定时间点的数据值并不关注。

    (7)数据是有保留期限的:采集的数据一般都有基于时长的保留策略,比如仅仅保留一天、一周、一个月、一年甚至更长时间,为节省存储空间,系统最好能自动删除。

    (8)数据的查询分析往往是基于时间段和某一组设备的:对于物联网数据,在做计算和分析时,一定是指定时间范围的,不会只针对一个时间点或者整个历史进行。而且往往需要根据分析的维度,对物联网设备的一个子集采集的数据进行分析,比如某个地理区域的设备,某个型号、某个批次的设备,某个厂商的设备。等等。

    (9)除存储查询外,往往需要实时分析计算操作:对于大部分互联网大数据应用,更多的是离线分析,即使有实时分析,但实时分析的要求并不高。比如用户画像,可以在积累一定的用户行为数据后进行。但是对于物联网应用,对数据的实时计算要求往往很高,因为需要根据计算结果进行实时报警,以避免事故的发生。

    (10)流量平稳、可预测:给定物联网数量、数据采集频次,就可以较为准确地估算出所需要的带宽和流量、每天新生成的数据大小。

    (11)数据处理的特殊性:与典型的互联网相比,还有不一样的数据处理需求。比如要检查某个具体时间的设备采集的某个量,但传感器实际采集的时间不是这个时间点,这时往往需要做插值处理。还有很多场景需要基于采集量进行复杂的数学函数计算。

    (12)数据量巨大:以智能电表为例,一台智能电表每隔15分钟采集一次数据,每天自动生成96条记录,全国就有接近5亿台智能电表,每天生成近500亿条记录。一台联网的汽车每隔10到15秒就采集一次数据发送到云端,一台汽车一天就很容易产生1000条记录。如果中国2亿辆车全部联网,那么每天将产生2000亿条记录。5年之内,物联网设备产生的数据将占世界数据总量的90%以上。

    三 通用大数据处理工具在时序数据场景的三大挑战

    从工具维度看,时序数据处理工具与传统时序数据库的差异很大。后者局限于车间级的可编程逻辑控制器,而非企业级。企业级的时序数据处理,首先是基于数据架构和数据模型的。

    数据架构决定哪些时序数据需要采集,如何处理,用于哪些业务场景,用于时序数据采集的规划与设计开发;数据模型用于解析时序数据的数据结构

    在物联网、车联网、工业互联网兴起之后,大家都想用通用的大数据平台来处理其中的数据。现在市场上流行的物联网、车联网等大数据平台几乎无一例外都是这类架构,但这套通用处理工具的效果如何?可以说有很多不足,主要表现在以下几个方面:

    数字化工厂产生的时序数据量是巨大的,处理它有相当的技术挑战。以数控机床加工生产为例,由于工业行业的要求,需要将包括报警在内的各种工况数据存储起来。假设企业每个厂区具有2000个监测点,5秒一个采集周期,全国一共200个厂区。这样粗略估算起来每年将产生惊人的几十万亿个数据点。假设每个点0.5KB,数据总量将达PB级别(如果每台服务器的硬盘容量是10TB,那么总共需要100多台服务器)。这些数据不仅要实时生成,写入存储,还要支持快速查询,实现可视化的展示,帮助管理者分析决策;并且也能够用来做大数据分析,发现深层次的问题,帮助企业节能减排,增加效益。这样看来,需要解决的关键技术问题如下。

    图片

    通用大数据处理工具在时序数据场景的挑战

    传统的数据采集体系面临着数据质量差、查询速度慢、缺少实时智能分析等问题。

    (1)高并发、高吞吐量的写入能力:如何支持每秒钟上千万数据点的写入,这是最关键的技术能力。

    (2)数据高速聚合:如何支持以秒级的速度对上亿数据进行分组聚合运算,如何能高效地在大数据量的基础上将满足条件的原始数据查询出来并聚合,要知道统计的原始值可能因为时间比较久远而不在内存中,因此这可能是一个非常耗时的操作。

    (3)降低存储成本:如何降低海量数据存储的成本,这需要时序数据库提供高压缩率。

    (4)多维度的查询能力:时序数据通常会有多个维度的标签来刻画一条数据,如何根据几个维度进行高效查询就是必须要解决的一个问题。

     

    展开全文
  • 随着工业物联网的快速发展,工业企业...时序数据管理主要通过对时序数据的采集、存储、查询、处理和分析帮助企业实时监控企业的生产与经营过程。 时序数据在应用上特点也很明显,比如数据往往只保留一定时长,需要做降

    目录

    1、工业时序数据的定义及作用

    2、工业时序数据的典型特点

    3、工业时序数据库与传统数据库的比较

    4、工业时序数据库基本要求

    4、工业时序数据处理面临的挑战

    5、时序数据处理工具(系统)需具备的功能

    7、时序数据处理流行工具

    8、工业时序数据的应用

    8.1 智慧工厂智能应急指挥和融合通信调度

    8.2 设备智能运维


    随着工业物联网的快速发展,工业企业在生产经营过程中会采集大量的数据,并进行实时处理,这些数据都是时序的,具有显著的特点,如带有时间戳、数据源唯一、结构化、少有或几乎没有更新等。

    1、工业时序数据的定义及作用

    时序数据是指按时间顺序记录的数据列。在同一数据列中的各个数据必须是同口径的,要求具有可比性。时序数据可以是时期数,也可以时点数。

    时序数据管理主要通过对时序数据的采集、存储、查询、处理和分析帮助企业实时监控企业的生产与经营过程。

    时序数据在应用上特点也很明显,比如数据往往只保留一定时长,需要做降频采样、插值、实时计算、聚合等操作,关心的是一段时间的趋势,而不是某一特定时间的值等。

    工业企业为了监测设备、生产线以及整个系统的运行状态,在各个关键点都配有传感器、采集各种数据。这些数据是周期或准周期产生的,采集频率高的或低的,采集的数据一般会发送至服务器,进行汇总并实时处理,对系统的运行做出实时监测或预警。

    工业时序数据常常被长期保存下来,用以做离线数据分析,具体应用包括:

    1. 分析故障,看主要的设备故障是什么;

    2. 分析产能,看如何优化配置来提升生产效率;

    3. 分析能耗,看如何降低生产成本;

    4. 分析潜在的安全隐患,以降低故障时长。

    2、工业时序数据的典型特点

    与各种信息管理系统的数据相比,工业时序数据具有鲜明的特点,具体如下表:

    表1 工业时序数据的典型特点
    序号特点描述
    1数据是时序的,一定带有时间戳联网设备按设定的周期或受外部事件触发,源源不断地产生数据,必须记录每个数据点是在哪个时间点产生的,以便对时序数据进行计算和分析。
    2数据是结构化的网络爬虫的数据、微博、微信的海量数据都是非结构化的,可以是文字、图片、视频等。但物联网设备产生的数据往往是结构化的,而且是数值型的,比如智能电表采集的电流、电压就可以用4字节的标准的浮点数来表示。
    3数据极少有更新操作联网设备产生的数据是机器日志数据,一般不容许而且也没有修改的必要。很少有场景,需要对采集的原始数据进行修改。但对于一个典型的信息化或互联网应用,记录是一定可以修改或删除的。
    4数据源是唯一的一个物联网设备采集的数据与另外一个设备采集的数据是完全独立的。一台设备的数据一定是这台设备产生的,不可能是人工或其他设备产生的,即一台设备的数据只有一个生产者,数据源是唯一的
    5数据写多读少对于互联网应用,一条数据记录往往是一次写,很多次读,如一条微博或一篇微信公众号文章,一次写,但有可能会有上百万人读。但对物联网设备产生的数据一般是计算、分析程序自动读,且计算、分析次数不多,只有分析事故等场景,才会主动看原始数据。
    6用户关注的是一段时间的趋势对于一条银行记录,或一条微博、微信,每一条对用户都很重要。但对于物联网数据,每个数据点与数据点的变化并不大,一般是渐变的,大家关心的更多是一段时间。如过去5分钟,过去1小时数据变化的趋势,一般对某一特定时间点的数据值并不关注。
    7数据有保留期限采集的数据一般都有基于时长的保留策略,如仅仅保留一天、一周、一个月、一年甚至更长时间,为节省存储空间,系统最好能自动删除。
    8数据的查询分析往往是基于时间段和某一组设备的对物联网数据的计算和分析,一定是指定时间范围的,不会只针对一个时间点或者整个历史进行。而且往往需要根据分析的维度,对物联网设备的一个子集采集的数据进行分析,如某个地理区域的设备,某个型号、某个批次的设备,某个厂商的设备,等等。
    9除存储查询外,往往需要实时分析计算操作对于大部分互联网大数据应用,更多的是离线分析,即使有实时分析,但实时分析的要求并不高,如用户画像可以在积累一定的用户行为数据后进行。但对于物联网应用,对数据的实时计算要求往往很高,因为需要根据计算结果进行实时报警,以避免事故的发生
    10流量平稳、可预测给定物联网数量、数据采集频次,就可以较为准确地估算出所需要的带宽和流量、每天新生成的数据大小。
    11数据处理的特殊性与典型的互联网相比,还有不一样的数据处理需求。如要检查某个具体时间点、设备采集的某个量,但传感器实际采集的时间不是这个时间点,这时往往需要做插值处理还有很多场景需要基于采集量进行复杂的数学函数计算
    12数据量巨大以智能电表为例,一台智能电表每隔15分钟采集一次数据,每天自动生成96条记录,全国就有接近5亿台智能电表,每天生成近500亿条记录。5年之内,物联网设备产生的数据将占世界数据总量的90%以上。

    3、工业时序数据库与传统数据库的比较

    表2 工业时序数据库与传统关系型数据库的对比

    比较项目

    时序数据管理系统

    关系型数据库

    数据类型

    处理随时间变化的数据,数据大部分为数值型数据,具有较强的时效性

    处理永久、稳定的数据,主要维护数据的完整性和一致性,难以满足有严格时间限制的应用需求

    表结构

    以时间序列对数据进行存储,存储数据在全局范围内唯一且固定

    以二维表格对数据进行存储和访问,表格可灵活扩展,表与表之间存在联系,并可自定义关系

    读写速度

    100 000 000(次/秒)

    3 000(次/秒)

    数据压缩

    有损压缩和无损压缩

    数据访问方式

    根据需求编写高效接口(API

    通常使用结构化查询语言(SQL

    支持最大测点规模

    单机支持1000万个测点

    单机不超过10万个测点

    4、工业时序数据库基本要求

    综合对于时序数据特点的分析,归纳总结对于时序数据库的基本要求[2]:

    1. 能够支撑高并发、高吞吐的写入:如上所说,时序数据具有典型的写多读少特征,其中95%-99%的操作都是写。在读和写上,首要权衡的是写的能力。由于其场景的特点,对于数据库的高并发、高吞吐写入能力有很高的要求。
    2. 交互级的聚合查询:交互级的查询延迟,并且是在数据基数(TB级)较大的情况下,也能够达到很低的查询延迟。
    3. 能够支撑海量数据存储:场景的特点决定了数据的量级,至少是TB的量级,甚至是PB级数据。
    4. 高可用:在线服务的场景下,对可用性要求也会很高。
    5. 分布式架构:写入和存储量的要求,底层若不是分布式架构基本达不到目标。
    图1 工业时序数据库基本要求

    4、工业时序数据处理面临的挑战

    传统时序数据库局限于车间级的可编程逻辑控制器,而非企业级。企业级的时序数据处理,首先是基于数据架构和数据模型的数据架构决定采集哪些时序数据(which),如何处理(how)用于哪些业务场景(where),用于时序数据采集的规划与设计开发数据模型用于解析时序数据的数据结构。

    数字化工厂产生的时序数据量是巨大的,时序数据处理面临相当的技术挑战。以数控机床加工生产为例,由于工业行业的要求,需要将包括报警在内的各种工况数据存储起来。假设企业每个厂区具有2000个监测点,5秒一个采集周期,全国一共200个厂区。这样粗略估算起来每年将产生惊人的几十万亿个数据点。假设每个点0.5KB,数据总量将达PB级别(如果每台服务器的硬盘容量是10TB,那么总共需要100多台服务器)。而且,数据不仅要快速写入存储,还要支持快速查询,实现可视化的展示,帮助管理者分析决策;并且也能够用来做大数据分析,发现深层次的问题,帮助企业节能减排,增加效益。因此,结合时序数据的特点,亟需解决的关键技术问题如下:

    1. 高并发、高吞吐量的写入能力:如何支持每秒钟上千万数据点的写入,这是最关键的技术能力。

    2. 数据高速聚合:如何支持以秒级的速度对上亿数据进行分组聚合运算?如何在大数据量的基础上,高效地查询并聚合满足条件的原始数据?(统计的原始值可能因为时间比较久远而不在内存中,因此这可能是一个非常耗时的操作)

    3. 提高压缩率,降低存储成本:如何降低海量数据存储的成本,这需要时序数据库提供高压缩率。

    4. 多维度的查询能力:时序数据通常会有多个维度的标签来刻画一条数据,如何根据几个维度进行高效查询是必须要解决的一个问题。

    图2 通用大数据处理工具在工业时序数据中面临的挑战

    5、时序数据处理工具(系统)需具备的功能

    图3 物联网平台与大数据平台的关系
    图4 覆盖端-边-管-云的全景式能力矩阵
    图5 时序数据流向图
    图6 数据采集到应用的端到端物联网平台

    时序数据处理应用于智慧城市、物联网、车联网、工业互联网领域的过程数据采集、过程控制,并与过程管理建立一个数据链路,属于工业数据治理的新兴领域。需具备如下功能:

    表3 工业时序数据处理工具(系统)需具备的功能
    序号功能描述
    1必须是高效的分布式系统工业互联网产生的数据量巨大,任何一台服务器都无法处理,因此时序数据处理系统必须是分布式的、水平扩展的。为降低成本,一个节点的处理性能必须是高效的,需要支持数据的快速写入和快速查询功能。
    2 必须是实时的处理系统对于工业互联网大数据的应用场景,则需要基于采集的数据做实时预警、决策,延时要控制在秒级以内。如果没有实时计算,则其商业价值就大打折扣。
    3需要运营商级别的高可靠服务工业互联网系统对接的往往是生产、经营系统,如果数据处理系统宕机,则会直接导致停产,无法对终端消费者正常提供服务。因此,时序数据处理系统必须是高可靠的,必须支持数据实时备份,必须支持异地容灾,必须支持软件、硬件在线升级,必须支持在线IDC机房迁移,否则服务一定有被中断的可能。
    4需要高效的缓存功能在绝大部分场景中,都需要能快速获取设备当前状态或其他信息,用以报警、大屏展示等。时充数据处理系统需要提供高效机制,让用户可以获取全部或符合过滤条件的部分设备的最新状态。
    5需要实时流式计算各种实时预警或预测已经不是简单地基于某一个阈值进行的,而是需要通过将一个或多个设备产生的数据流进行实时聚合计算(并且不只是基于一个时间点,而是基于一个时间窗口进行计算)。不仅如此,计算的需求也相当复杂,因场景而异,应容许用户自定义函数进行计算。
    6 需要支持数据订阅时序数据处理系统与通用大数据平台比较一致的地方是,同一组数据往往有很多应用都需要,因此,时序数据处理系统应该提供订阅功能:只要有新的数据更新,就应该实时提醒应用。而且这个订阅也应该是个性化的,容许应用设置过滤条件,比如只订阅某个物理量5分钟的平均值。
    7实时数据和历史数据的处理要合二为一实时数据被存储在缓存里,历史数据被存储在持久化存储介质里,而且可能依据时长,被存储在不同的存储介质里。时序数据处理系统应该隐藏背后的存储介质,给用户和应用呈现的是同一个接口和界面。无论是访问新采集的数据还是10年前的老数据,除输入的时间参数不同外,其余都应该是一样的。
    8需要保证数据能持续、稳定地写入

    对于物联网系统,数据流量往往是平稳的,因此数据写入所需要的资源往往是可以估算的。其中变化的是查询、分析,特别是即席查询,有可能耗费很多的系统资源,不可控。因此,时序数据处理系统必须保证分配足够的资源以确保数据能够写入系统而不被丢失。准确地说,时序数据处理系统必须是一个写优先系统

    9 需要支持灵活的多维度数据分析对于联网设备产生的数据,需要进行各种维度的统计分析,比如根据设备所处的地域进行分析,根据设备的型号、供应商进行分析,根据设备所使用的人员进行分析等。这些维度的分析是无法事先设计好的,而是在实际运营过程中,根据业务发展需求定下来的。因此,工业互联网大数据平台需要一个灵活的机制来增加某个维度的分析。
    10需要支持数据降频、插值、特殊函数计算等操作原始数据的采集可能频次较高,但在具体分析时,往往不需要对原始数据进行分析,而是需要对数据进行降频。时序数据处理系统需要提供高效的数据降频操作。不同设备采集数据的时间点是很难一致的,因此,分析一个特定时间点的值,往往需要插值才能解决,系统需要提供线性插值、设置固定值等多种插值策略。
    11需要支持即席分析和查询为提高数据分析师的工作效率,时序数据处理系统应该提供命令行工具或容许用户通过其他工具,执行SQL查询,而不是非要通过编程接口。并且查询分析结果可以很方便地被导出,以及被制作成各种图表。
    12需要提供灵活的数据管理策略

    一个大的系统,其中采集的数据种类繁多,而且除采集的原始数据外,还有大量的衍生数据。这些数据各自有不同的特点,有的采集频次高,有的要求保留时间长,有的需要保存多个副本以保证更高的安全性,有的需要能快速访问。因此,工业互联网大数据平台必须提供多种策略,让用户可以根据特点进行选择和配置,而且各种策略并存。

    13必须是开放的时序数据处理系统需要支持业界流行的标准,提供各种语言开发接口,包括C/C++、Java、Go、Python、RESTful等,也需要支持Spark、R、MATLAB等,方便集成各种机器学习、人工智能算法或其他应用,让大数据处理平台能够不断扩展,而不是成为一个数据孤岛。
    14必须支持异构环境大数据平台的搭建是一个长期工作,每个批次采购的服务器和存储设备都会不一样,时序数据处理系统必须支持各种档次、各种不同配置的服务器和存储设备并存。
    15需要支持边云协同时序数据处理系统要有一套灵活的机制将边缘计算节点的数据上传到云端,根据具体需要,可以将原始数据、加工计算后的数据,或仅仅符合过滤条件的数据同步到云端,并且同步可以随时取消,同步策略可以随时修改。
    16需要单一的后台管理系统单一的后台管理系统便于查看系统运行状态、管理集群、管理用户、管理各种系统资源等,而且能让系统与第三方IT运维监测平台无缝集成,便于统一管理和维护。
    17便于私有化部署出于安全及各种因素的考虑,部分企业希望时序数据处理系统采用私有化部署。而传统的企业往往没有很强的IT运维团队,因此在时序数据处理系统安装、部署上需要做到简单、快捷,可维护性强。

    7、时序数据处理流行工具

    在测点数量暴涨、数据采集频率不断提高的大数据时代,传统实时数据库暴露出以下问题:

    1. 没有水平扩展能力,数据量增加,只能依靠硬件的纵向扩展解决。

    2. 技术架构老旧,很多还是运行于Windows系统中的。

    3. 数据分析能力偏弱,不支持现在流行的各种数据分析接口

    4. 不支持云端部署,更不支持SaaS。

    5. 在传统的实时监控场景,由于对各种工业协议的支持比较完善,实时数据库还占有较牢固的市场地位,但是在工业大数据处理上,因为上述几个原因,几乎没有任何大数据平台采用它们。

    采集后的工业时序数据一般通过网络被送往服务器或云端进行处理。相对数据采集工具而言,数据处理工具比较统一,流行的时序数据处理工具主要包括:InfluxDB、Graphite、OpenTSDB、TimescaleDB、Apache IoTDB等,详细可参考DB-ENGINES[2]

    8、工业时序数据的应用

    8.1 智慧工厂智能应急指挥和融合通信调度

    采用数字化BIM+GIS+IIOT+AI+5G+算法技术,围绕监控、调度、通讯等多种功能合一的可视化调度方案。在突发事件预警、上报、响应、调度等各个环节实现及时有效的可视化指挥,满足突发事件现场实时图像传送和视频会商的快速响应需求。

    图7 应急指挥和融合通信调度

    8.2 设备智能运维

    物联网平台还可被应用于对海量设备终端的统一管理与运维,对设备的状态进行在线监测与诊断,并及时进行故障预警。还可以通过多维图表展示运维数据等。

    图8 设备智能运维

    参考文献

    [1] 什么是时序数据?如何治理?有哪些应用场景?终于有人讲明白了. https://blog.51cto.com/u_15127642/2774829.

    [2] 时间序列数据的存储和计算. https://zhuanlan.zhihu.com/p/32709932.

    [3] DB-engines排名.https://db-engines.com/en/ranking/time+series+dbms.

    展开全文
  • 时序数据处理应用于物联网、车联网、工业互联网领域的过程数据采集、过程控制,并与过程管理建立一个数据链路,属于工业数据治理的新兴领域。从工具维度看,时序数据处理工具与传统时序数据库的差异很...

    时序数据处理应用于物联网、车联网、工业互联网领域的过程数据采集、过程控制,并与过程管理建立一个数据链路,属于工业数据治理的新兴领域。从工具维度看,时序数据处理工具与传统时序数据库的差异很大。后者局限于车间级的可编程逻辑控制器,而非企业级。

    企业级的时序数据处理,首先是基于数据架构和数据模型的。

    数据架构决定哪些时序数据需要采集,如何处理,用于哪些业务场景,用于时序数据采集的规划与设计开发;数据模型用于解析时序数据的数据结构。

    本文选自《数据治理:工业企业数字化转型之道》一书,带你深入了解企业级时序数据处理。

    通用大数据处理工具的不足

    在物联网、车联网、工业互联网兴起之后,大家都想用通用的大数据平台来处理其中的数据。现在市场上流行的物联网、车联网等大数据平台几乎无一例外都是这类架构,但这套通用处理工具的效果如何?可以说有很多不足,主要表现在以下几个方面。

    1、开发效率低

    因为不是单一的软件,需要集成4个以上模块,很多模块都不是标准的POSIX或SQL接口,都有自己的开发工具、开发语言、配置等,需要一定的学习成本。而且由于数据会从一个模块流动到另外一个模块,数据的一致性容易受到破坏。同时,这些模块基本上都是开源软件,总会有各种漏洞,一旦被一个技术问题卡住,总要耗费工程师不少时间。总的来讲,企业需要搭建一支优秀的团队才能将这些模块顺利地组装起来,因此需要耗费较多的人力资源。

    2、运行效率低

    现有的这些开源软件主要用来处理互联网上的非结构化数据,但是通过物联网采集来的数据都是时序的、结构化的。用非结构化数据处理技术来处理结构化数据,无论是存储还是计算,消费的资源都大很多。

    3、运维成本高

    每个模块,无论是Kafka、HBase、HDFS还是Redis,都有自己的管理后台,都需要单独管理。在传统的信息系统中,数据库管理员只要学会管理MySQL或是Oracle就可以了,但现在数据库管理员需要学会管理、配置、优化很多模块,工作量大了很多。由于模块数过多,定位一个问题就变得更为复杂。比如,用户发现有一条采集的数据丢失了,至于是Kafka、HBase、Spark丢失的,还是应用程序丢失的,则无法迅速定位,往往需要花很长时间,只有将各模块的日志关联起来才能找到原因。而且模块越多,系统整体的稳定性就越低。

    4、产品推出慢、利润低

    由于源软件研发效率低,运维成本高,导致将产品推向市场的时间变长,让企业丧失商机。而且这些开源软件都在演化中,要同步使用最新的版本也需要耗费一定的人力。除互联网头部公司外,中小型公司在通用大数据平台上花费的人力资源成本一般都远超过专业公司的产品或服务费用。

    5、对于小数据量场景,私有化部署太重

    在物联网、车联网场景中,因为涉及生产经营数据的安全,很多还是采取私有化部署。而每个私有化部署,其处理的数据量有很大的区别,从几百台联网设备到数千万台联网设备不等。对于数据量小的场景,通用的大数据解决方案就显得过于臃肿,投入与产出不成正比。因此,有的平台提供商往往有两套方案,一套针对大数据场景,使用通用的大数据平台,一套针对小数据场景,使用MySQL或其他数据库。但这样会导致研发、维护成本提高。

     功能和特点 

    时序数据处理工具(系统)需要具备哪些功能?

    与通用的大数据处理工具相比,它具备什么样的特点呢?下面仔细分析一下。

    1、必须是高效的分布式系统。

    工业互联网产生的数据量巨大,比如,全国有5亿多台智能电表,每台智能电表每隔15分钟采集一次数据,全国的智能电表一天就会产生500多亿条记录。这么大的数据量,任何一台服务器都无法处理,因此时序数据处理系统必须是分布式的、水平扩展的。为降低成本,一个节点的处理性能必须是高效的,需要支持数据的快速写入和快速查询功能。

    2、必须是实时的处理系统

    对于互联网大数据的应用场景,大家所熟悉的都是用户画像、推荐系统、舆情分析等,这些场景并不需要数据计算具有实时性,批处理即可。但是对于工业互联网大数据的应用场景,则需要基于采集的数据做实时预警、决策,延时要控制在秒级以内。如果没有实时计算,则其商业价值就大打折扣。

    3、需要运营商级别的高可靠服务

    工业互联网系统对接的往往是生产、经营系统,如果数据处理系统宕机,则会直接导致停产,无法对终端消费者正常提供服务。因此,时序数据处理系统必须是高可靠的,必须支持数据实时备份,必须支持异地容灾,必须支持软件、硬件在线升级,必须支持在线IDC机房迁移,否则服务一定有被中断的可能。

    4、需要高效的缓存功能

    在绝大部分场景中,都需要能快速获取设备当前状态或其他信息,用以报警、大屏展示等。时充数据处理系统需要提供高效机制,让用户可以获取全部或符合过滤条件的部分设备的最新状态。

    5、需要实时流式计算

    各种实时预警或预测已经不是简单地基于某一个阈值进行的,而是需要通过将一个或多个设备产生的数据流进行实时聚合计算(并且不只是基于一个时间点,而是基于一个时间窗口进行计算)。不仅如此,计算的需求也相当复杂,因场景而异,应容许用户自定义函数进行计算。

    6、需要支持数据订阅

    时序数据处理系统与通用大数据平台比较一致的地方是,同一组数据往往有很多应用都需要,因此,时序数据处理系统应该提供订阅功能:只要有新的数据更新,就应该实时提醒应用。而且这个订阅也应该是个性化的,容许应用设置过滤条件,比如只订阅某个物理量5分钟的平均值。

    7、实时数据和历史数据的处理要合二为一

    实时数据被存储在缓存里,历史数据被存储在持久化存储介质里,而且可能依据时长,被存储在不同的存储介质里。时序数据处理系统应该隐藏背后的存储介质,给用户和应用呈现的是同一个接口和界面。无论是访问新采集的数据还是10年前的老数据,除输入的时间参数不同外,其余都应该是一样的。

    8、需要保证数据能持续、稳定地写入

    对于物联网系统,数据流量往往是平稳的,因此数据写入所需要的资源往往是可以估算的。其中变化的是查询、分析,特别是即席查询,有可能耗费很多的系统资源,不可控。因此,时序数据处理系统必须保证分配足够的资源以确保数据能够写入系统而不被丢失。准确地说,时序数据处理系统必须是一个写优先系统。

    9、需要支持灵活的多维度数据分析

    对于联网设备产生的数据,需要进行各种维度的统计分析,比如根据设备所处的地域进行分析,根据设备的型号、供应商进行分析,根据设备所使用的人员进行分析等。这些维度的分析是无法事先设计好的,而是在实际运营过程中,根据业务发展需求定下来的。因此,工业互联网大数据平台需要一个灵活的机制来增加某个维度的分析。

    10、需要支持数据降频、插值、特殊函数计算等操作

    原始数据的采集可能频次较高,但在具体分析时,往往不需要对原始数据进行分析,而是需要对数据进行降频。时序数据处理系统需要提供高效的数据降频操作。不同设备采集数据的时间点是很难一致的,因此,分析一个特定时间点的值,往往需要插值才能解决,系统需要提供线性插值、设置固定值等多种插值策略。

    11、需要支持即席分析和查询

    为提高数据分析师的工作效率,时序数据处理系统应该提供命令行工具或容许用户通过其他工具,执行SQL查询,而不是非要通过编程接口。并且查询分析结果可以很方便地被导出,以及被制作成各种图表。

    12、需要提供灵活的数据管理策略

    一个大的系统,其中采集的数据种类繁多,而且除采集的原始数据外,还有大量的衍生数据。这些数据各自有不同的特点,有的采集频次高,有的要求保留时间长,有的需要保存多个副本以保证更高的安全性,有的需要能快速访问。因此,工业互联网大数据平台必须提供多种策略,让用户可以根据特点进行选择和配置,而且各种策略并存。

    13、必须是开放的

    时序数据处理系统需要支持业界流行的标准,提供各种语言开发接口,包括C/C++、Java、Go、Python、RESTful等,也需要支持Spark、R、MATLAB等,方便集成各种机器学习、人工智能算法或其他应用,让大数据处理平台能够不断扩展,而不是成为一个数据孤岛。

    14、必须支持异构环境

    大数据平台的搭建是一个长期工作,每个批次采购的服务器和存储设备都会不一样,时序数据处理系统必须支持各种档次、各种不同配置的服务器和存储设备并存。

    15、需要支持边云协同

    时序数据处理系统要有一套灵活的机制将边缘计算节点的数据上传到云端,根据具体需要,可以将原始数据、加工计算后的数据,或仅仅符合过滤条件的数据同步到云端,并且同步可以随时取消,同步策略可以随时修改。

    16、需要单一的后台管理系统

    单的后台管理系统便于查看系统运行状态、管理集群、管理用户、管理各种系统资源等,而且能让系统与第三方IT运维监测平台无缝集成,便于统一管理和维护。

    17、便于私有化部署

    因为很多企业出于安全及各种因素的考虑,希望时序数据处理系统采用私有化部署。而传统的企业往往没有很强的IT运维团队,因此在时序数据处理系统安装、部署上需要做到简单、快捷,可维护性强。

    时序数据的采集

    时序数据的采集一般都是通过传感器自动进行的,包括光电、热敏、气敏、力敏、磁敏、声敏、湿敏、电量等不同类别的工业传感器。就某一个具体的物理量而言,数据采集是很容易的。但就整个系统而言,数据采集是相当复杂的,具体表现在以下几个方面。

    1、工业数据的协议不标准

    在现实场景中,往往会出现ModBus、OPC、CAN、ControlNet、Profibus、MQTT等各种类型的工业协议,而且各个自动化设备生产及集成商还会自己开发各种私有的工业协议,导致在实现工业协议的互联互通时出现极大的难度。很多开发人员在工业现场实施综合自动化等项目时,遇到的最大问题即是面对众多的工业协议,无法有效地进行解析和采集数据。


    2、通信方式不统一

    由于历史原因,采集的数据往往会通过局域网、蓝牙、Wi-Fi、2.5G、3G、4G等各种传输方式被传送到服务器中,导致各种通信方式并行存在,连接管理变得复杂。


    3、安全性考虑不足

    传统的工业系统都运行在局域网中,安全问题不是考虑的重点。若需要通过云端(特别是公有云)调度工业行业中核心的生产数据,又没有充分考虑安全问题,则很有可能造成难以弥补的损失。


    根据上述原因,企业在实际采集数据时,往往配有工业互联网网关盒子,该盒子支持各种物理接口、通信协议和工业标准协议,将不同协议进行转换,对数据进行安全加密,统一以MQTT(Message Queuing Telemetry Transport,ISO/IEC PRF 20922)协议或其他协议发往云端。

    对于数据采集部分,因为标准性不够,就不对具体工具做介绍了。

    时序数据处理工具

    采集后的数据一般通过网络被送往服务器或云端进行处理。相对数据采集工具而言,数据处理工具比较统一,下面对几个流行的工具进行介绍。

    1、以PI为代表的实时数据库

    从20世纪80年代起,就涌现一批实时数据库(时序数据库的一种),专门用于处理工业自动控制或流程制造行业的实时数据。其中美国OSIsoft公司的PI(Plant Information)实时数据库最典型,它提供成套的工具,包括实时写入、实时计算、存储、分析、可视化、报警等系列功能,GE、Simens、Honeywell都有类似产品。国内有庚顿、朗坤、麦杰、力控等产品。这些产品在一定程度上满足了工业数据处理的需求,但在测点数量暴涨、数据采集频率不断提高的大数据时代,传统实时数据库暴露出以下问题。

    ①没有水平扩展能力,数据量增加,只能依靠硬件的纵向扩展解决;

    ②技术架构老旧,很多还是运行于Windows系统中的;

    ③数据分析能力偏弱,不支持现在流行的各种数据分析接口;

    ④不支持云端部署,更不支持SaaS。

    在传统的实时监控场景,由于对各种工业协议的支持比较完善,实时数据库还占有较牢固的市场地位,但是在工业大数据处理上,因为上述几个原因,几乎没有任何大数据平台采用它们。

    2、InfluxDB

    它是美国InfluxData公司开发的产品,提供了数据存储、查询、分析、流式计算等系列功能。其单机版本采用MIT许可证,是开源且免费的(用GO语言开发),但其集群版本收费。目前,该款产品在全球时序数据库榜单上排名第一。在IT运维监测领域,该产品由于能与多个数据采集工具,以及可视化工具无缝对接,能够方便用户快速搭建一个监测系统,因此拥有相当大的市场份额。但在工业大数据领域,其优势不够明显,用户量还不大。

    InfluxDB存储采用Key-Value和LSM技术,支持多列数据写入,而且是Schemaless模式,无须预先定义数据表结构。同时,每条记录可以带有一组标签,便于数据流之间的聚合计算。对于小数据量,其性能表现不错。但对于历史数据查询,其性能欠佳,而且消耗的系统资源过多。相对其他NoSQL数据库产品而言,InfluxDB的数据压缩做得很好,能节省不少存储空间。

    同时,InfluxDB是一个独立的软件,不仅是一个数据库,还有流式计算、报警等功能,不依赖第三方,因此其安装部署、维护也相对简单。

    3、OpenTSDB

    这是一个Apache开源软件,是在HBase的基础上开发的,底层存储是HBase,但其依据时序数据的特点做了一些优化。其最大的好处就是建立在Hadoop体系上,各种工具链成熟,但这也是它最大的缺点,因为Hadoop不是为时序数据打造的,导致其性能很一般,而且需要依赖很多组件,安装部署相当复杂。

    OpenTSDB采用Schemaless模式,不用预先定义数据结构,因此写入灵活,但每个时间序列只能写入一个采集量,不支持多列写入。每个序列可以被打上多个标签,以方便聚合操作。总的来讲,OpenTSDB的性能无论是写入还是查询,都很一般,而且系统的稳定性欠佳。但吸引人的是,它支持集群部署和支持水平扩展。

    OpenTSDB只是单一的时序数据库,因此,要完整地处理时序数据,还需要搭配缓存、消息队列、流式计算等系列软件,使整个架构的设计和维护变得困难。

    4、TDengine

    这是来自中国的开源软件,由涛思数据研发推出。它不仅是一款时序数据库,而且还提供缓存、消息队列、数据订阅、流式计算等系列功能,是时序数据的全栈技术解决方案。而且它不依赖任何第三方软件,安装包只有1.5MB,使系统设计、安装、部署和维护都变得极为简单。

    TDengine充分利用了时序数据的特点,因此具有很强的优势,具体表现在5个方面:

    ①无论是插入,还是查询,性能都高出许多;

    ②因为性能超强,其所需要的计算资源不及其他软件的1/5;

    ③采用列式存储,对不同数据类型采取不同的压缩算法,所需要的存储资源不到其他软件的1/10;

    ④无须分库、分表,无实时数据与历史数据之分,管理成本为零;

    ⑤采用标准SQL语法,应用可以通过标准的JDBC、ODBC接口插入或查询数据,学习成本几乎为零。

    5、TimeScale

    这也是一家美国公司开发的产品,开源,采用的是Apache 2.0许可证。它是在流行的关系型数据库Postgres基础上开发的,因此接口与Postgres 完全兼容,而且支持各种复杂的SQL查询。因为底层存储没有充分利用时序数据的特点,所以其性能一般。它的社区版完全开源,不支持集群,但提供企业版和云服务版。

    该软件很受Postgres用户的欢迎,但其目前在IT运维监测、工业大数据处理这些领域,市场占有率还很有限。

    ▼ 扫码了解本书详情 ▼

    点击阅读原文,了解本书详情~

    展开全文
  • 时序数据-LSTM模型-实现用电量预测,里面包含数据和代码,代码讲解见:https://mtyjkh.blog.csdn.net/article/details/115612319
  • 时序数据挖掘概述,蒋涛,冯玉才,时间序列相似搜索由于其在许多领域广阔的应用前景,例如:DNA序列分析、金融数据分析、传感器网络监控、移动对象跟踪以及运动捕获
  • 时序数据处理之给股票收盘价添加时间戳对应数据文件
  • 时序数据的分析

    千次阅读 2018-12-23 21:20:51
    最近工作中遇到了时序预测问题,查询了部分博客找到部分特征工程的处理过程,感觉还可以分享一下: 参考地址:https://www.cnblogs.com/bradleon/p/6832867.html 原始数据的检测(波动,平稳性,周期,方差等)和...

    最近工作中遇到了时序预测问题,查询了部分博客找到部分特征工程的处理过程,感觉还可以分享一下:

    参考地址:https://www.cnblogs.com/bradleon/p/6832867.html

    原始数据的检测(波动,平稳性,周期,方差等)和时间序列的预测代码参考:https://blog.csdn.net/qq_33472765/article/details/85226361

    时间序列问题的特征工程(四个方向)参考:https://yq.aliyun.com/ziliao/417651


    本文的内容主要来源于博客:本人做了适当的注释和补充。
    https://www.analyticsvidhya.com/blog/2016/02/time-series-forecasting-codes-python/ 英文不错的读者可以前去阅读原文。

    在阅读本文之前 ,推荐先阅读:http://www.cnblogs.com/bradleon/p/6827109.html

    导读

    本文主要分为四个部分:

    1. 用pandas处理时序数据
    2. 怎样检查时序数据的稳定性
    3. 怎样让时序数据具有稳定性
    4. 时序数据的预测

    1. 用pandas导入和处理时序数据

    第一步:导入常用的库

    import pandas as pd
    import numpy as np
    import matplotlib.pylab as plt
    from matplotlib.pylab import rcParams
    #rcParams设定好画布的大小
    rcParams['figure.figsize'] = 15, 6

    第二步:导入时序数据
    数据文件可在github:
    http://github.com/aarshayj/Analytics_Vidhya/tree/master/Articles/Time_Series_Analysis 中下载

    data = pd.read_csv(path+"AirPassengers.csv")
    print data.head()
    print '\n Data types:'
    print data.dtypes

    运行结果如下:数据包括每个月对应的passenger的数目。
    可以看到data已经是一个DataFrame,包含两列Month和#Passengers,其中Month的类型是object,而index是0,1,2...
    filelist

    第三步:处理时序数据
    我们需要将Month的类型变为datetime,同时作为index。

    dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')
    #---其中parse_dates 表明选择数据中的哪个column作为date-time信息,
    #---index_col 告诉pandas以哪个column作为 index
    #--- date_parser 使用一个function(本文用lambda表达式代替),使一个string转换为一个datetime变量
    data = pd.read_csv('AirPassengers.csv', parse_dates=['Month'], index_col='Month',date_parser=dateparse)
    print data.head()
    print data.index

    结果如下:可以看到data的index已经变成datetime类型的Month了。
    filelist
    filelist

    2.怎样检查时序数据的稳定性(Stationarity)

    因为ARIMA模型要求数据是稳定的,所以这一步至关重要。

    1. 判断数据是稳定的常基于对于时间是常量的几个统计量:

    1. 常量的均值
    2. 常量的方差
    3. 与时间独立的自协方差

    用图像说明如下:

    1. 均值
      filelist
      X是时序数据的值,t是时间。可以看到左图,数据的均值对于时间轴来说是常量,即数据的均值不是时间的函数,所有它是稳定的;右图随着时间的推移,数据的值整体趋势是增加的,所有均值是时间的函数,数据具有趋势,所以是非稳定的。
    2. 方差
      filelist
      可以看到左图,数据的方差对于时间是常量,即数据的值域围绕着均值上下波动的振幅是固定的,所以左图数据是稳定的。而右图,数据的振幅在不同时间点不同,所以方差对于时间不是独立的,数据是非稳定的。但是左、右图的均值是一致的。
    3. 自协方差
      filelist
      一个时序数据的自协方差,就是它在不同两个时刻i,j的值的协方差。可以看到左图的自协方差于时间无关;而右图,随着时间的不同,数据的波动频率明显不同,导致它i,j取值不同,就会得到不同的协方差,因此是非稳定的。虽然右图在均值和方差上都是与时间无关的,但仍是非稳定数据。

    2. python判断时序数据稳定性

    有两种方法:
    1.Rolling statistic-- 即每个时间段内的平均的数据均值和标准差情况。

    1. Dickey-Fuller Test -- 这个比较复杂,大致意思就是在一定置信水平下,对于时序数据假设 Null hypothesis: 非稳定。
      if 通过检验值(statistic)< 临界值(critical value),则拒绝null hypothesis,即数据是稳定的;反之则是非稳定的。
    from statsmodels.tsa.stattools import adfuller
    def test_stationarity(timeseries):
        
        #这里以一年为一个窗口,每一个时间t的值由它前面12个月(包括自己)的均值代替,标准差同理。
        rolmean = pd.rolling_mean(timeseries,window=12)
        rolstd = pd.rolling_std(timeseries, window=12)
        
        #plot rolling statistics:
        fig = plt.figure()
        fig.add_subplot()
        orig = plt.plot(timeseries, color = 'blue',label='Original')
        mean = plt.plot(rolmean , color = 'red',label = 'rolling mean')
        std = plt.plot(rolstd, color = 'black', label= 'Rolling standard deviation')
        
        plt.legend(loc = 'best')
        plt.title('Rolling Mean & Standard Deviation')
        plt.show(block=False)
        
        
        #Dickey-Fuller test:
        
        print 'Results of Dickey-Fuller Test:'
        dftest = adfuller(timeseries,autolag = 'AIC')
        #dftest的输出前一项依次为检测值,p值,滞后数,使用的观测数,各个置信度下的临界值
        dfoutput = pd.Series(dftest[0:4],index = ['Test Statistic','p-value','#Lags Used','Number of Observations Used'])
        for key,value in dftest[4].items():
            dfoutput['Critical value (%s)' %key] = value
        
        print dfoutput
        
    ts = data['#Passengers']
    test_stationarity(ts)

    结果如下:


    可以看到,数据的rolling均值/标准差具有越来越大的趋势,是不稳定的。
    且DF-test可以明确的指出,在任何置信度下,数据都不是稳定的。

    3. 让时序数据变成稳定的方法

    让数据变得不稳定的原因主要有俩:

    1. 趋势(trend)-数据随着时间变化。比如说升高或者降低。
    2. 季节性(seasonality)-数据在特定的时间段内变动。比如说节假日,或者活动导致数据的异常。

    由于原数据值域范围比较大,为了缩小值域,同时保留其他信息,常用的方法是对数化,取log。

    ts_log = np.log(ts)
    1. 检测和去除趋势
      通常有三种方法:

      • 聚合 : 将时间轴缩短,以一段时间内星期/月/年的均值作为数据值。使不同时间段内的值差距缩小。
      • 平滑: 以一个滑动窗口内的均值代替原来的值,为了使值之间的差距缩小
      • 多项式过滤:用一个回归模型来拟合现有数据,使得数据更平滑。

    本文主要使用平滑方法

    Moving Average--移动平均

    moving_avg = pd.rolling_mean(ts_log,12)
    plt.plot(ts_log ,color = 'blue')
    plt.plot(moving_avg, color='red')


    可以看出moving_average要比原值平滑许多。

    然后作差:

    ts_log_moving_avg_diff = ts_log-moving_avg
    ts_log_moving_avg_diff.dropna(inplace = True)
    test_stationarity(ts_log_moving_avg_diff)



    可以看到,做了处理之后的数据基本上没有了随时间变化的趋势,DFtest的结果告诉我们在95%的置信度下,数据是稳定的。

    上面的方法是将所有的时间平等看待,而在许多情况下,可以认为越近的时刻越重要。所以引入指数加权移动平均-- Exponentially-weighted moving average.(pandas中通过ewma()函数提供了此功能。)

    # halflife的值决定了衰减因子alpha:  alpha = 1 - exp(log(0.5) / halflife)
    expweighted_avg = pd.ewma(ts_log,halflife=12)
    ts_log_ewma_diff = ts_log - expweighted_avg
    test_stationarity(ts_log_ewma_diff)



    可以看到相比普通的Moving Average,新的数据平均标准差更小了。而且DFtest可以得到结论:数据在99%的置信度上是稳定的。

    1. 检测和去除季节性
      有两种方法:

      • 1 差分化: 以特定滞后数目的时刻的值的作差
      • 2 分解: 对趋势和季节性分别建模在移除它们

    Differencing--差分

    ts_log_diff = ts_log - ts_log.shift()
    ts_log_diff.dropna(inplace=True)
    test_stationarity(ts_log_diff)


    如图,可以看出相比MA方法,Differencing方法处理后的数据的均值和方差的在时间轴上的振幅明显缩小了。DFtest的结论是在90%的置信度下,数据是稳定的。

    3.Decomposing-分解

    #分解(decomposing) 可以用来把时序数据中的趋势和周期性数据都分离出来:
    from statsmodels.tsa.seasonal import seasonal_decompose
    def decompose(timeseries):
        
        # 返回包含三个部分 trend(趋势部分) , seasonal(季节性部分) 和residual (残留部分)
        decomposition = seasonal_decompose(timeseries)
        
        trend = decomposition.trend
        seasonal = decomposition.seasonal
        residual = decomposition.resid
        
        plt.subplot(411)
        plt.plot(ts_log, label='Original')
        plt.legend(loc='best')
        plt.subplot(412)
        plt.plot(trend, label='Trend')
        plt.legend(loc='best')
        plt.subplot(413)
        plt.plot(seasonal,label='Seasonality')
        plt.legend(loc='best')
        plt.subplot(414)
        plt.plot(residual, label='Residuals')
        plt.legend(loc='best')
        plt.tight_layout()
        
        return trend , seasonal, residual


    如图可以明显的看到,将original数据 拆分成了三份。Trend数据具有明显的趋势性,Seasonality数据具有明显的周期性,Residuals是剩余的部分,可以认为是去除了趋势和季节性数据之后,稳定的数据,是我们所需要的。

    #消除了trend 和seasonal之后,只对residual部分作为想要的时序数据进行处理
    trend , seasonal, residual = decompose(ts_log)
    residual.dropna(inplace=True)
    test_stationarity(residual)



    如图所示,数据的均值和方差趋于常数,几乎无波动(看上去比之前的陡峭,但是要注意他的值域只有[-0.05,0.05]之间),所以直观上可以认为是稳定的数据。另外DFtest的结果显示,Statistic值原小于1%时的Critical value,所以在99%的置信度下,数据是稳定的。

    4. 对时序数据进行预测

    假设经过处理,已经得到了稳定时序数据。接下来,我们使用ARIMA模型
    对数据已经预测。ARIMA的介绍可以见本目录下的另一篇文章。

    step1: 通过ACF,PACF进行ARIMA(p,d,q)的p,q参数估计

    由前文Differencing部分已知,一阶差分后数据已经稳定,所以d=1。
    所以用一阶差分化的ts_log_diff = ts_log - ts_log.shift() 作为输入。
    等价于

    yt=Yt−Yt−1

    作为输入。

    先画出ACF,PACF的图像,代码如下:

    #ACF and PACF plots:
    from statsmodels.tsa.stattools import acf, pacf
    lag_acf = acf(ts_log_diff, nlags=20)
    lag_pacf = pacf(ts_log_diff, nlags=20, method='ols')
    #Plot ACF: 
    plt.subplot(121) 
    plt.plot(lag_acf)
    plt.axhline(y=0,linestyle='--',color='gray')
    plt.axhline(y=-1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')
    plt.axhline(y=1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')
    plt.title('Autocorrelation Function')
    
    #Plot PACF:
    plt.subplot(122)
    plt.plot(lag_pacf)
    plt.axhline(y=0,linestyle='--',color='gray')
    plt.axhline(y=-1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')
    plt.axhline(y=1.96/np.sqrt(len(ts_log_diff)),linestyle='--',color='gray')
    plt.title('Partial Autocorrelation Function')
    plt.tight_layout()


    图中,上下两条灰线之间是置信区间,p的值就是ACF第一次穿过上置信区间时的横轴值。q的值就是PACF第一次穿过上置信区间的横轴值。所以从图中可以得到p=2,q=2。

    step2: 得到参数估计值p,d,q之后,生成模型ARIMA(p,d,q)
    为了突出差别,用三种参数取值的三个模型作为对比。
    模型1:AR模型(ARIMA(2,1,0))

    from statsmodels.tsa.arima_model import ARIMA
    model = ARIMA(ts_log, order=(2, 1, 0))  
    results_AR = model.fit(disp=-1)  
    plt.plot(ts_log_diff)
    plt.plot(results_AR.fittedvalues, color='red')
    plt.title('RSS: %.4f'% sum((results_AR.fittedvalues-ts_log_diff)**2))


    图中,蓝线是输入值,红线是模型的拟合值,RSS的累计平方误差。

    模型2:MA模型(ARIMA(0,1,2))

    model = ARIMA(ts_log, order=(0, 1, 2))  
    results_MA = model.fit(disp=-1)  
    plt.plot(ts_log_diff)
    plt.plot(results_MA.fittedvalues, color='red')
    plt.title('RSS: %.4f'% sum((results_MA.fittedvalues-ts_log_diff)**2))

    模型3:ARIMA模型(ARIMA(2,1,2))

    model = ARIMA(ts_log, order=(2, 1, 2))  
    results_ARIMA = model.fit(disp=-1)  
    plt.plot(ts_log_diff)
    plt.plot(results_ARIMA.fittedvalues, color='red')
    plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvalues-ts_log_diff)**2))


    由RSS,可知模型3--ARIMA(2,1,2)的拟合度最好,所以我们确定了最终的预测模型。

    step3: 将模型代入原数据进行预测
    因为上面的模型的拟合值是对原数据进行稳定化之后的输入数据的拟合,所以需要对拟合值进行相应处理的逆操作,使得它回到与原数据一致的尺度。

    
    #ARIMA拟合的其实是一阶差分ts_log_diff,predictions_ARIMA_diff[i]是第i个月与i-1个月的ts_log的差值。
    #由于差分化有一阶滞后,所以第一个月的数据是空的,
    predictions_ARIMA_diff = pd.Series(results_ARIMA.fittedvalues, copy=True)
    print predictions_ARIMA_diff.head()
    #累加现有的diff,得到每个值与第一个月的差分(同log底的情况下)。
    #即predictions_ARIMA_diff_cumsum[i] 是第i个月与第1个月的ts_log的差值。
    predictions_ARIMA_diff_cumsum = predictions_ARIMA_diff.cumsum()
    #先ts_log_diff => ts_log=>ts_log => ts 
    #先以ts_log的第一个值作为基数,复制给所有值,然后每个时刻的值累加与第一个月对应的差值(这样就解决了,第一个月diff数据为空的问题了)
    #然后得到了predictions_ARIMA_log => predictions_ARIMA
    predictions_ARIMA_log = pd.Series(ts_log.ix[0], index=ts_log.index)
    predictions_ARIMA_log = predictions_ARIMA_log.add(predictions_ARIMA_diff_cumsum,fill_value=0)
    predictions_ARIMA = np.exp(predictions_ARIMA_log)
    plt.figure()
    plt.plot(ts)
    plt.plot(predictions_ARIMA)
    plt.title('RMSE: %.4f'% np.sqrt(sum((predictions_ARIMA-ts)**2)/len(ts)))

    5.总结

    前面一篇文章,总结了ARIMA建模的步骤。
    (1). 获取被观测系统时间序列数据;
    (2). 对数据绘图,观测是否为平稳时间序列;对于非平稳时间序列要先进行d阶差分运算,化为平稳时间序列;
    (3). 经过第二步处理,已经得到平稳时间序列。要对平稳时间序列分别求得其自相关系数ACF 和偏自相关系数PACF,通过对自相关图和偏自相关图的分析,得到最佳的阶层 p 和阶数 q
    (4). 由以上得到的d、q、p,得到ARIMA模型。然后开始对得到的模型进行模型检验。
    具体例子会在另一篇文章中给出。

    本文结合一个例子,说明python如何解决:
    1.判断一个时序数据是否是稳定。对应步骤(1)

    1. 怎样让时序数据稳定化。对应步骤(2)
    2. 使用ARIMA模型进行时序数据预测。对应步骤(3,4)

    另外对data science感兴趣的同学可以关注这个网站,干货还挺多的。
    https://www.analyticsvidhya.com/blog/

    展开全文
  • 时序数据全称是时间序列(TimeSeries)数据,是按照时间顺序索引的一系列数据点。最常见的是在连续的等时间间隔时间点上获取的序列,因此,它是一系列离散数据[1]。 时序数据几乎无处不在,在目前单向的时间流中.
  • 时序数据的特点

    千次阅读 2020-12-22 11:22:52
    1.时序数据的特点以及大数据背景下的可优化空间?  ​  大数据时代已经到来了很多年,大数据解决方案基本成熟, Hadoop集群处理方案基本成为了一个处理大数据的最佳实践。他所处理的数据包含结构化,半结构化,非...
  • 基于HBase的金融时序数据存储系统,刘博伟,黄瑞章,金融时序数据具有高并发,时间序列化,数据总量大等特点,在存储金融时序数据时,会遇到高并发事务处理,存储热点,数据存储分散等问��

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,654
精华内容 57,061
关键字:

时序数据