细说Greenplum时空数据分析

根据美国国家科学基金会的数据显示,物联网有望在2020年之前将500个智能设备与一万亿个传感器连接,我们将迎来一个万物皆“数”的大时代。而在物联网应用场景中,大数据作为核心有着举足轻重的地位。在这篇文章中,Pivotal的资深解决方案架构师陈义贤为我们解读了物联网中占主导地位的时间与空间数据的前世今生。

万物互联的世界

根据美国国家科学基金会的数据显示,物联网有望在2020年之前将500个智能设备与一万亿个传感器连接。2019年眼看就要来临,就是说在一年的时间内,物联网设备将会有大幅的增长。为什么会有这样的增长速度?因为5G时代的来临。在5G时代之中,网络延时将会大幅缩减,越来越多的机器设备、智能设备,都会连入网络世界之中。

万物互联的世界

我们会身处一个万物互联的时代,从人们过去只是用移动电话交流,到现在可以通过智能手机处理工作、支付交易、咨询信息、出门打车、叫外卖等等。随着科技的演进,在普通大众的家里也出现了多样的智能设备,小到智能开关,大到智能电视,还有扫地机器人。以前我给我母亲买了一个手持无线的吸尘器,结果她不喜欢,一直放到电池都坏了都未曾使用。前几天她看到我们家的小米扫地智能机器人觉得很有意思,也想要购买。

凡此种种,可以看到,大量设备、终端,正在通过生活的方方面面,金融、零售、医药、娱乐等等场景,无时无刻不在产生数据,而这些数据又通过网络不停的交互、连接,如何运用好这些数据?发挥数据的价值成为我们需要面对的问题。

工业物联网发展的现实意义

在日常工业生产中,各种传感器、电子信号接收设备、控制设备无处不在。过去的传统制造业中,这些设备主要是用于监控。如果大家稍微回想,脑海中可能会浮现这样的场景,几个人坐在一堆监视器和仪表盘面前,全神贯注的看着数据的波动。而在未来更多的情况是:只有一堆监视器和仪表盘,人不见了,这些监控数据会根据人工智能的处理自动完成控制,更加精准,且更加实时。

工业物联网

通过工业物联网的建设,可以进行更加优化的制造业供应链管理,企业利用物联网技术,能及时掌握原材料采购、库存、销售等信息,通过大数据分析还能预测原材料的价格趋向、供求关系等,有助于完善和优化供应链管理体系,提高供应链效率,降低成本。例如,空中客车通过在供应链体系中应用传感网络技术,构建了全球制造业中规模最大、效率最高的供应链体系。

采用工业物联网技术,进行生产过程工艺优化:工业物联网的实时多维度感知特性,提高了生产线的过程检测、实时参数采集、材料消耗监测的能力和水平,通过对数据的分析处理可以实现智能监测、智能控制、智能诊断、智能决策、智能维护,提高了生产力,降低能源消耗。像钢铁企业通过应用各种传感器和通信网络,在生产过程中实现了对加工产品的宽度、厚度、温度、碳含量等参数的实时监控,提高了产品质量,优化了生产流程。

物联网数据的主要特性

–海量性、多态性、关联性

  • 海量性:以秒级乃至毫秒级传回数据。其次,单个场景下可能就会涉及成千上万个传感器。在未来,人与智能设备之间无时无刻不在互联互通。

物联网数据的主要特性

  • 多态性:网络上传输了包括视频、音频、文本、日志等各种不同类型的数据,在这些数据中还包括温度、湿度、频率、海拔、化学成分等数据的不同维度。还有数据单位、精度不同,不同测量时间和测量条件测量结果不同,数据会呈现各种各样的多态性。
  • 关联性:关联性分为时间和空间上的关联性,以及实体不同维度之间的关联性。不同的关联性组合会产生丰富的语义。

Pivotal前瞻观点:

如何发挥物联网数据价值

首先,Pivotal把数据产品线定义为人类的大脑,我们从海量的原生数据中,提取我们真正感兴趣,并且有潜在价值的那些,把它们存储到Greenplum这个分布式数据库中。这就很像我们大脑中的记忆区,人脑不会记忆外界所有的信息数据,因为没有这个必要,而且浪费资源,我们只会记忆那些我们关注的,有意义的信息。这些信息可以转化为知识或者成为无法割舍的回忆。同理,Greenplum最擅长处理的是关系型数据,这些数据有着更多的内在关联和潜在规律,可以发掘提取价值。

物联网数据处理

其次,和人脑相同,Pivotal提供GPText产品,它类似于人脑中的语言区,可以帮助我们实现文本检索、语义分析、情感分析等场景。而PostGIS类似于人脑中的空间识别区,可以帮助我们处理空间与地理的信息。在这些之上,我们还构建了思维区,通过Madlib、Pivotal R、Python,在库内借助GP的大规模分布式处理引擎,我们可以针对全量的数据进行深度学习、神经网络等相关的数据科学的工作。

时序数据的处理

下面是一张图表描述了北京及其周边城市的PM2.5相关数据的展现,这是一个标准的时间序列数据。也就是按时间间隔排列的一组数据,这个时间间隔单位可以是日、月、年,甚至小时、分钟、秒。这些数据可以表示各种各样的含义,如经济领域中每年的GDP、商品销量、股市走势,都构成了时间序列。

时间序列数据

通过时间序列分析,从中发现事物的变化规律;或从动态的角度描述某一现象和其它现象之间的内在关系及其变化规律,从而尽可能多地从中提取出所需要的准确信息,并将这些知识和信息用于预测,从而提前做好准备,或者通过干预影响未来的发展趋势。

时间序列分析的主要目的就是为了达到以下四种用途:

  • 系统描述:根据对系统的观测得到的时间数据,用曲线弥合方法对系统进行客观描述。
  • 系统分析:当观测值取自两个变量以上的时候,可以研究在一个变量变化时对另一变量产生影响以及作用的机理。
  • 预测未来:通过弥合时间序列,预测该时间序列的未来值。
  • 决策控制:通过调整输入的变量,使系统发展过程保持在一个目标值之上。

时间序列的变化受到诸多因素的影响,有长期性或决定性因素,其中呈现某种趋势或规律性;有些则是短期因素,起非决定性作用,使其呈现出不规则运动。分析时间序列变动规律时,我们不会一一对照,因此会对这些因素进行归类整理。以下是四种归类情况:

时间序列数据的组成因素

  • 趋势性:趋势性就是指时间推移朝着一个方向逐渐上升、下降或平滑移动的过程,这个变化是长期因素所导致的结果。
  • 周期性:是指时间序列会表现为循环于趋势线上方或者下方一些点的序列,并持续一段时间有规则的变动,这种因素是具有周期性的。
  • 季节性变化:时间序列数据会按照季节性呈现一定的波动变化。
  • 不规则变化:因为偶然因素以及不可控的随机变动,产生的在经济周期、趋势性和周期性之外的一些变化,就是不规则变化。

时间序列分解方法

根据时间序列组成因素分析,我们可以了解这些组成因素是可以按照一定的算法和方式进行分解的。我们在这里会给时间序列明确定义四个维度:

  • 长期趋势T:是时间序列数据变化中相对稳定的那部分,往往是长期稳定的上涨或下跌,这种数据一般可以通过移动平均或者线性回归的方式进行弥合,因此是可预测的部分。
  • Ÿ季节性变动S:在传统的时间序列分解方式中,一般用于长期的宏观经济指标之中,测量方式一般是季度,呈现季节性变动。在日常接触较多数据运营场景里,受制于季节性的长时间跨度,几乎没有对应使用场景,因此我们将周变化、或我们日常交通的早、晚高峰、晚高峰的日变化,都会归于广义上的季节性变化。
  • 循环变动C:与季节性变动类似,但呈现方式为隐性。季节变化有明确的周期,比如一年四季或者按周或者按日,但循环变动是隐性周期,需要通过各种算法进行弥合、计算出的周期性规律。
  • 随机变动I:顾名思义,它是一种不可预测的变量。

时间序列分解的成功与否,取决于两个因素:

1. 数据序列本身是隐藏着规律的,不可预测的部分只是其中的一小部分;

2. 分解的方法要合适,尤其是周期的判断要准确。因此,这个方法非常考验使用者的经验和直觉。其实除了难以预测与控制的随机波动,时间序列数据基本都是有章可循的,我们会把主要精力放在时间序列的长期趋势与循环变动的研究上。

时间序列处理模型——ARIMA

为什么ARIMA模型是我们为大家介绍的第一个模型?因为它很简单——只需要去判断内生变量,而不需要借助其他外在变量,因此不需要做数据关联性分析。但它的缺点也很明显,只能去预测稳定性的数据或有规律的数据,或者通过差分化后,能够稳定下来的数据。另外一点是他只能预测线性数据,而不能捕捉非线性数据。所以股票数据就不建议大家用ARIMA模型分析,股票数据会强烈受政策或小概率事件影响,波动性非常大,因此ARIMA模型在这个场景中不适用。

ARIMA模型的全称叫做自回归移动平均模型,全称是(ARIMA,Autoregressive Integrated Moving Average Model)。也记作ARIMA(p,d,q),是统计模型(statisticmodel)中最常见的一种用来进行时间序列 预测的模型。

d–代表时序数据需要进行几阶差分化,才是稳定的,也叫Integrated项。

p–代表预测模型中采用的时序数据本身的滞后数(lags) ,也叫做AR/Auto-Regressive项

q–代表预测模型中采用的预测误差的滞后数(lags),也叫做MA/Moving Average项

除了ARIMA模型之外,时间序列数据的处理手段还有: 时下非常热门的RNN循环神经网络、 为了避免长期依赖问题的RNN的变种模型LSTM网络模型、以及隐马尔可夫模型与NASA的卡尔曼滤波器等等。

ARIMA其实是两种模型的组合,AR自回归模型与MA移动平均模型。AR模型是用自身做回归变量的过程, 通过时间序列过去时点的线性组合加上白噪声即可预测当前时点,它是随机游走的一个简单扩展。MA模型和AR其实很类似,但它并非是历史时序值的线性组合,而是历史白噪声的线性组合。

再看中间会有一个I,I代表差分,ARIMA有P、D、Q的参数,这个D其实就代表具体是用哪些差分去进行差分数据的。ARIMA模型的核心是通过确定P、D、Q的值,通过模型的算法,对未来数据进行相应预测。

以国际原油期货价格数据为例的时序分析

国际原油期货价格

以上是1986年1月到2018年11月国际石油价格数据。数据的细粒度其实是天,我们以月平均值进行数据展现的可视化。上文说到ARIMA模型和股票不适合预测,而原油价格本身也不适合预测,因为原油价格除了受经济指数影响外,受政治因素波动的可能性可能会更高,政治因素的走势基本上都是灰天鹅现象,无法进行预测。而这次选取原油价格数据,原因只是因为数据容易获得,因此只作为范例示意。

当然如果只是一堆数据,大家很容易看得头疼而且理不出头绪,但现在我们有了很多数据可视化工具,借助这些工具,我们能更加直观的了解我们的数据,同时逐渐培养我们的数据敏感性,这种能力的提升,对我们今后的职业生涯与财务生活都会产生巨大的好处。 

进行油价预测的四个步骤

原油价格预测在GP里的执行过程分以下四步:首先在GP里创建原油价格表,将数据导入到表中。然后用Madlib的ARIMA模型的相关函数对该模型进行训练,产生P、D、Q的值。接下来再通过检查P、D、Q的值看模型是否准确。最后再通过该模型对未来油价走势进行相应预测。

ARIMA训练

当模型训练结束后,在GP中我们即可通过Madlib调用另外一个函数,对训练出来的数据进行相应预测,然后结束。大家应该发现了我们一直没有提怎么确定P、D、Q的值。P、D、Q值的确定,在R语言以及Python中有一个自动化的函数,可以通过函数自动的训练、获取,但在Madlib里没有加入。这种情况下,怎么办呢?实际上这个问题很容易解决,如果有一些Madlib还未包含的机器学习的函数,那么我们可以通过Pivotal R或者Python写一个简单的自定义函数,直接调用Python与R语言中的函数即可。

可以看到plr自定义函数中只是调用R语言中的auto.arima这个函数,通过它的执行我们即可很方便的取到P、D、Q的值。这就是为什么我们刚才选取了2、3、1。

通过方才的执行,整个机器学习训练的过程就完成了,简单快捷,门槛较低。这是我们训练出来的拟合结果,最大误差大概是0.6%,误差率不高。再次强调,原油价格其实不应该用这种方式进行预测,该结果只为大家做示范使用。

空间数据的处理

地理空间分析接口

空间数据就是一组描述物体在空间位置上的一些坐标,或者是物体在三维空间里、二维平面中所呈现的一种状态,我们将这些信息用特殊的表示方式存储在指定的存储单元里,就是空间数据。空间数据包括像点线面、多边形、周长、面积、交叉、距离、经纬度等非常常见的数据,还有栅格数据,就是我们地图里经常会用到的数据。

当空间数据被存储之后,如何去使用呢?为大家举一个国内某运营商真实案例。

PostGIS

我们都知道地球是弧形的,在大尺度下计算两个地点间的距离不能直接把经纬度信息进行差值计算得到结果。数字6378137是地球的半径,我们需要通过地球的半径计算出两点之间的弧线长度。

如果不采用GIS函数,我们需要套用一个非常复杂的算法,但如果用了GIS函数后,处理方式会非常简单。在这个案例中,原本客户的数据量有几十亿,当进行关联处理的时候,这个函数需要跑一个多小时,改造成GIS存储后,直接调用GIS函数计算,只需要不到十分钟,就可以得到想要的结果了。下面的函数则更加简单,通过两张表的关联,去判断一个人是否在某个基站的覆盖范围内。其中一张表也是有几十亿的数据规模,所以这函数执行也会花一个小时以上。同样,在GIS函数改造之后,整个执行校率大幅提升,几分钟就完成了。

使用PostGIS

GIS数据如何存储?我们在原表上可以建一列新的geom字段,这个字段其实就是用经纬度的信息进行拼装而成的,同样, PostGIS也提供了相应的函数,只要通过AddGeometryColumn函数把经纬度信息拼装进字段里就OK了,使用起来也非常方便。

实际上,通过GIS数据还可以构建自己的PostGIS地图应用,例如百度地图等,它提供了相应的开源工具,我们可以直接调用工具引擎。如果要自己去搭建,大家可以去网上下载像SHP格式的地图数据,下载后装完PostGIS这个服务器上就会有SHP2PGSQL工具,可以把刚才下载的SHP的文件转换成SQL,然后用PSQL调用这个SQL执行后,数据就会被录入到GP之中。

一旦录入后,大家可以选取自己习惯的一些开发工具使用,我用的是QGIS开发工具,这个工具很实用,可以简单通过它去连接GP数据库,然后进行地图应用开发。一旦开发结束后,可以使用如MapServer等工具进行网络服务发布。整个过程非常便利。

PostGIS搭建的地图服务

(https://gadm.org/download_country_v3.html)

实时区域人流计算分析

上图即是根据以上方法搭建出的地图服务。这是国内某运营商的案例,它主要基于基站的数据进行景区人流热点展示。在旅游高峰,通过实时的景区人流量监控,及时采取手段,如加派警力,进行人流疏导,避免由于人流拥堵造成的意外事件,从而提升政府管理能力。这也是上海发生外滩踩踏事件后,各级运营商配合政府普遍开发的应用。显而易见,如果采用GP加PostGIS,整个开发过程会非常简单、易用,并且提供海量数据的高速处理能力。

Pivotal在物联网数据处理方向的应用场景

1. 极端天气下的公共安全:

NICT是日本的情报通信研究机构,类似于研究院,这里使用到的物联网数据主要包括各种传感器数据,如相控阵天气雷达、交通数据、空气质量等数据,还有历史的工程科学数据、地图地理位置数据、社交数据,进行综合运用的案例。

极端气候下的公关安全

从局部暴雨的相关数据中,我们会发现各种影响和灾害事件,如航班延误与取消,人员疏散流程,以及次生灾害,如是否会在灾害事件后产生相关的疫情,是否因为大量的人员流动造成交通事故,都是案例中发现的关联点。

在国内也有类似案例。国内的保险公司与气象部门、防疫部门合作,通过气象数据与灾害数据,实时对投保人发布预警。如南方夏天经常会发生暴雨,造成积水损毁车辆的问题。如果可以及时根据气象数据的分析结果、结合发生过水淹地区的位置信息,就可以为处于该位置的车主推送信息,警示车主将车辆移动到附近安全位置,从而避免车损,减少保险公司理赔。

2. 大规模车辆管理:

这个案例涉及到国外一家货运公司,该公司有约20万辆货车,该公司车辆管理方式20年保持不变,很多内容都是通过人工处理,数据有孤岛效应,没有集中数据管理。还有基于政府决策变化,在这个案例中,公司货车的强制报废年限为20年。

这些所有决策都未经数据优化,而在此过程中我们运用数据分析则会节省大量的成本。该公司通过物联网化布局后,在车辆上使用大量的传感器,通过网络进行互联。经过3G、4G网络,以及未来的5G网络,这些传感器的数据在未来很有可能将流向边缘计算、通过ARM芯片进行本地处理,其余数据经过加工后传到数据中心。

大规模车辆管理

该公司在收集数据后是如何运用这些数据呢?首先通过kafka的消息传输机制,大部分数据直接传输到了数据中心,部分需要实时处理的数据会在Pivotal GemFire上的内存网格中进行实时计算,提供给实时监控和数据处理应用。此外,其他数据都会导入到Greenplum数据库中进行处理与分析。通过这个架构,该公司实现了预见性维护、零件寿命估算及批量采购等能力,从而节约了成本,以及通过车辆的使用、维护、维修等数据进行汽车寿命预测,避免了20年一刀切的现象。

3. 公园设施的预见性维护:

该案例非常适合ARIMA模型处理,整个发动机引擎运作非常有规律性,比如老化周期以及温度升高周期,其规律都有迹可循。其实,预见性维护机器学习方式以及处理场景一直存在,但面临一些困境:设备输出的资料过多,信息以毫秒级数据返回,因此每天都会有大量数据累积,如果用传统的单台服务器去用Python或者R语言去处理的话,性能完全不能满足用户要求,而且训练的过程会非常漫长。如果是采用采样数据的方式,它的拟合度又会比较低,所以现在我们会有这种分布式的技术,从而是可以通过一个集群去处理海量的数据,通过GP的分布式技术之后,整个预见性维护成为一种可以成熟运用的常规应用场景。

过山车故障预测

在这个案例中,过山车引擎的运行数据每0.1秒就会采集一次,而传感器的数据每毫秒都会产生。长期以往,累积了大量的数据。

发现电机日志中的特有异常

使用ARIMA模型训练这些数据,探索引擎运转数据中的规律性,从而在引擎发生故障之前几天就可以进行预见性的维护,避免引擎突然发生故障产生事故。

Q&A

与同行业相对比,Pivotal的物联网有什么更特殊的优势?

我们经常会说Pivotal Greenplum数据库,其实不只是一个数据库,而是一个生态,或者是一个平台。我们可以看到在Greenplum中,可以通过使用GPText,进行文本搜索、语义识别;可以通过PostGIS处理地理空间数据;也可以通过Madlib、R语言、Python等进行库内机器学习和数据科学应用,这些都无需经过数据采样,都可在GP分布式数据库内进行综合性处理。从而达到节约成本、更快响应的目的。

自回归移动平均模型有怎么样的现实指导意义呢?

我们刚刚通过应用场景介绍就回答了这个问题,例如预见性维护,就比较适合ARIMA模型进行处理。但如果是股票交易,我们可能更多是需要去使用RNN神经网络或者BP网络进行相应的预测。

这些模型都在GP上运行吗?

Madlib目前提供了50多种常用模型,此外,这些模型还可以通过像Pivotal R或者Python扩展,使用非常比较方便,而且借用GP底层的MPP的引擎,可以针对全量数据进行高速、并行的计算,也是它的一个优势。

PostGIS是否对于距离计算很有帮助呢?   

距离计算一定是很有帮助的,我们只是需要通过简单的函数去判断两点之间的距离,就可以实现。

Madlib可以用来做深度学习吗?

显然是可以的。当然Madlib目前支持的深度学习的算法是有限的,大家有兴趣可以从官网去看一下目前Madlib已经支持了哪些算法。如果不在这些算法之内的话,你还可以用Python或者R直接在库内调用,非常方便。

海量实时的传感器数据是如何处理的?

传感器数据,我们刚才有一个案例提到,像kafka,在一些用户的生产环境中,会通过kafka消息的中间件把数据实时的传到我刚才提到的GimFire或者GP中,这个过程中它的数据吞吐满足了绝大多数用户的需求,这点大家不用担心。

GP能否取代专门的时序数据库?

GP是不能取代专门的时序数据库的,因为专业的时序数据库整个底层的数据存储的方式经过特殊设计,这和传统的数据库是完全不一样的,时序数据库为高并发持续写入优化,不需要考虑数据更新的问题。专业的时序数据库只适合部分特殊的场景使用,并不适合通用性的数据分析场景,更加无法实现Greenplum平台这种对数据的综合性应用。

基于GP10的版本的GIS可以迁移到GP里吗?

目前而言不可以。当前Pivotal官网下到的PostGIS的版本是专门针对GP发布的版本,但如果用户有需要,GP5.0的版本以及6.0的版本的发布都会更新,集成到GP之中。

图数据处理有内置模式吗?

图数据处理您指的是图分析吗?如果是图分析的话,其实Madlib里已经集成了这些算法,也是可以在库内进行执行的。

关注微信公众号

VMware 中国研发中心