6.1 传感器数据与分析
从前几章中我们已经了解到,只要把配备传感器的设备连接到网络,就能把所有的信息采集到物联网服务之中(图6.1)。
从工业角度而言,给工厂中的生产流水线和流通的产品打上电子标签,就能够对其进行高效管理。此外,只要给产品的各个部位植入传感器,产品出库后通过这些传感器获取产品的运行情况,就能够自动记录人们使用这些产品所进行的活动。更有一些高级的传感器,其具备如下机制:预知故障,或者通知人们应该在什么时候进行维护。
纵观身边生活的各个角落,装备有大量传感器的便携设备,例如跟我们眼下的生活息息相关的智能手机,已经实现了对海量信息的搜集。除此之外,还出现了一些可以帮助用户进行健康管理的产品,这些产品通过将要在第7 章提到的可穿戴设备(穿着在身上的设备)来定期采集与用户健康相关的信息,实现对其健康状况的管理。
其他还包括家电产品、汽车、住宅等,这些围绕人们生活的东西都渐渐装备了传感器,我们正在进入一个在任何情况下都会产生数据、采集数据的时代。
这些应用了传感器的服务能预防制造的机器出现故障,减少用户因机器故障而耽误的工作时间。此外,用户还可能获得一些前所未有的新体验,例如预测自己身体将要发生的变化,对疾病防范于未然,等等。
但是,光是采集传感器和设备发来的数据,那就只不过是将一堆庞大的数据聚在一起而已,很难直接应用这些数据。为了实现服务,需要从采集到的数据中分析出有价值的数据。只有通过对数据进行分析,才有可能掌握机器的运转情况,找出其中蕴含的趋势,提前检测出今后可能会发生的异常情况。这样才能把整个物联网服务从一个单纯的采集数据的行为升华到一项创造附加价值的服务。
分析的种类
根据目的来分析传感器采集到的数据,能够给服务创造出其需要的附加价值。问题是,该如何进行分析呢?
我们在第1 章解释过统计分析和机器学习这两种分析方法,那么本章中就再来具体看一下这两种方法。
如果不谈传感器数据的类别,只按分析目的来区分,分析大体上可分为3 种:基于采集的“可视化”分析,基于统计分析和机器学习等高级分析技术的“发现”分析和“预测”分析(图6.2)。
可视化分析
可视化分析指的是对积累的数据进行加工,根据需求通过采集和图表形式把数据的内容加工成人眼能看懂的形式。可视化分析和很多人经历过的那些处理一样,都是用电子制表软件计算数据,并将其做成图表,好让数值一目了然。换成物联网就是把存在数据库里面的传感器数据取出来,用电子制表软件按时间顺序读取并制成图表。
发现分析
接下来要讲的是发现分析。发现分析就是在可视化所使用的采集分析的基础上,再通过统计分析和机器学习等高级的方法来发现数据的趋势、规律和结构等。通过此方法能从数据中提取出那些人类无法从图表中看出的、隐藏在数据中的规律和趋势。打个比方,假设物联网用到了很多种类的传感器,在这种情况下,人类很难发现这些不同种类的传感器数据之间存在的关联性,但是通过发现分析就能够找出这些关联性。
预测分析
再下面是预测分析。预测分析即从过去积累的数据中找出数据固有的趋势和规律,以掌握今后可能会发生的状况,知晓未来。对过去积累的数据进行分析后,一旦获取新的数据集,就能够推测出这些数据表现了怎样的状况。
下面一起来理解一下这3 种分析的内容以及相关的知识。
6.2 可视化
采集分析
采集分析就是把数据加工,以人类能够直观理解的形式来表现数据。采集分析是最简单的一种分析方法,但其顺序和之后要讲的高级的分析方法是共通的,一般情况下都需要进行如图6.3 所示的处理流程。
数据采集
就如字面意思那样,数据采集就是采集用来分析的数据,并将这些数据以文件的形式保存到数据库,或是先在内存上展开,再把数据保存在用于处理数据的环境之中。因为大多数情况下,分析对象都是那些过去积累的旧数据,所以这里需要利用数据库来保存采集到的数据。如果数据量很庞大,也会利用Hadoop 等基础架构来存储数据。
首先根据需求利用SQL 或搜索工具来获取这些数据,再将这些数据读取到电子制表软件中,将其转化成CSVA 格式,最后用R 语言等统计分析软件进行处理。
预处理
预处理,就是把“数据采集”采集到的数据中没用的多余数据剪切掉。除此之外还包括对数据实施一些处理,将其加工成有意义的数据,有时预处理还会创造出对象数据(如连接多个数据等)(图6.4)。
如果要分析的数据是传感器数据,那么就会有海量的传感器数据需要分析,因为物联网服务在源源不断地送来传感器数据。然而,在大多数情况下我们想利用的只是其中极少的一部分数据。因此在已经确定数据用途的前提下,可以在采集的同时一并进行预处理,这样就可以减少数据库中存储的无用数据的数量,节约数据使用量。不过处理完的数据很难再还原成原始数据,所以不确定某些数据对分析是否有帮助时,就必须慎重判断是否应该对其执行预处理。
由此,为了在数据产生时能马上对其进行处理,并实时获取处理完毕的数据,就需要像CEP 这样的用于数据处理的基础技术。关于这个CEP,后文将会讲解。
采集
采集指的是以数值数据为基础,计算如总数、平均值、方差、分位点(包含中位数)等统计数值。大家应该已经了解,多数情况下,当数据被以表形式存储在数据库中时,人们会采用SQL 来执行这些处理。SQL 里含有计算平均值和总数的命令。虽然也可以生成一个程序来进行采集处理,不过对大多数程序员来说执行采集这件事本身就不怎么困难。但是,在用程序计算的时候有可能因为编程问题,或是语言特有的规格问题而导致计算误差,所以希望大家利用统计分析软件R 语言以及其他语言提供的数值计算库来进行计算。
此外,电子制表软件中附带的数据透视表功能也是人们非常熟悉的一个用于执行采集分析的手段(图6.5)。在数据透视表中,可以通过把属性数据当作采集对象,来给行标题和列标题指定一个数值数据,这样一来就可以分别按照属性对统计值(如总数、平均值、方差等)进行分组并计算。除此之外,数据透视表还能执行很多处理,如基于属性对数据加以过滤等,因此对交互进行各种各样的采集而言,这无疑是一种非常优秀的工具。又因为它可以在GUI 基础上执行采集处理,所以也是一款适合新手用户练手的工具。
以制图举例
统计结果的表示方法多种多样,有单纯用表形式来表示的,也有用平均值或方差这样的指标来表示的,通常可以利用如图6.6 所示的这些图表来表示数据。
希望大家灵活应用这些表格,做到看一眼就能掌握不同种类的数据蕴含的内容。
我们来看一个可视化的例子(图6.7)。
● 获取家庭用电量的变化情况,用图表表示每日用电量的趋势,以及每个星期的每一天的平均用电量,或每个时间段的平均用电量,从而获悉家庭的用电状况
上面这个分析就属于可视化。
除了上述图表以外,随着工具和库的发展,还出现了新型图表。下面就来看一下其中能应用于统计的几个图表。
网络图
如图6.8 所示,网络图是一张由一个个节点(树节)和连接节点的路径(树枝)构成的图。。
近年来出现了Cytoscape 和Gephi 这样易于使用的工具,这些工具的出现促进了网络图的普及与应用。网络图的普遍应用实现了SNS 等社交媒体上用户之间的联系状况,顾客和销售代表的交涉状况,以及公司商品之间存在的捆绑销售关系的可视化。它能有效表明数据之间存在的联系。
地理图
随着工具和服务的发展,迅速得到应用普及的除了网络图之外还有地理图。地理图是一种将数据描绘(分配)在地图上并实现数据可视化的图形(图6.9)。
如今像智能手机和汽车等各种各样的终端上都配备GPS,如果能把这些采集到的信息直接绘制在地图上来观察,想必会更直观地捕捉到一些用表形式无法察觉到的、地理上的因果关系。具有代表性的例子就是当今无人不知的Google 地图。Google 地图不光是一张地图,通过使用API,用户还能够用图钉在地图上的任意一个场所做标记,画线,或者用多边形来描画任意图形。这样一来,用户就可以把有关地理信息的数据绘制在地图上,在任何地方用任意的比例尺来浏览地图数据。
除了像Google 地图这种通过Web 提供的地理图服务以外,还有QGISA 提供的OSS(The Office of Strategic Services,运营支撑系统)桌面工具,这类工具也在逐渐得到普及。此外,除了使用服务和工具以外,还可以通过D3.js 这样的JavaScript 的SVG 图像处理库来根据地形数据描画地图,这在过去可是很难办到的事情。
综上所述,随着社会的发展,现在即使没有高级知识,也能轻松地运用地理图来进行分析。
如今这些用于可视化的工具也在逐步普及。今后随着传感器数据的多样化,人们将会追求更高级的可视化技术,好更直观地捕捉传感器所采集到的数据。另外,就像为了“发现”而分析一样,使用高级分析方法之前,还有一个步骤,那就是利用可视化获取数据的质量和大体倾向。对于高级分析来说,这是一个不可或缺的基础(图6.10)。
6.3 高级分析
接下来要讲的用于“发现”和“预测”的分析都是前面介绍的“可视化”工序的后续步骤。这两种分析方法适用于统计分析和机器学习,也就是高级分析。
高级分析围绕统计分析和机器学习,准备了形形色色的分析方法和算法。大家需要解决像下面这样的问题:用哪种方法进行分析,为了分析要创造出什么样的数据。因此我们就需要跟进行可视化时一样,事先进行采集分析,掌握数据的大体倾向。
如果能够理解数据的特征,实际上也就意味着能够利用分析方法来获取高级的知识。下面将为大家讲解有关高级分析的一些基础知识。
6.3.1 高级分析的基础
机器学习可以说是高级分析的典型代表。机器学习领域汇集了众多技术,这些技术用于让计算机基于大量数据来学习数据的倾向并作出某些判断。机器学习的算法可以根据输入的数据类型分为“监督学习”和“非监督学习”两种。
监督学习和非监督学习
当用机器学习的算法让计算机学习数据倾向时,算法会根据用于学习的数据中是否含有“正确答案”的数据而有所不同。打个比方,假设现在要从传感器数据来判断分析设备的故障情况和建筑物的损坏情况等异常状况(图6.11)。如果采用监督学习的算法,就需要输入过去实际发生异常状况时的数据,即需要明确地输入“异常”的数据。说白了,算法要学习“正确答案”和“不正确答案”之间存在的差异。
相对而言,非监督学习不区分输入的数据是否存在异常,也就是说,非监督学习算法会学习数据整体的倾向,在整体中找出倾向不同的数据,将其判断为“异常值”。
对于想要还原场景的情况,需要基于是否有当时的数据这一点来判断是采用监督学习还是非监督学习。特别是对于那些极少发生的异常情况,如果不能准备正确答案,就需要考虑采用非监督学习。另外,如果无法预测以后会发生什么异常状况,那么使用非监督学习来建立平常状态的模型,就能检测出和平常状态不同的状态(即异常)。
如果确定了想要发现的异常的种类,也采集到了足够的数据,那么采用监督学习会更加精确地检测出异常情况。
分析方法的种类
那么在理解了监督学习和非监督学习的基础上,接下来就以聚类和类别分类等为切入点来了解一下这些分析方法。
根据其用法,分析方法可以分为几种。其中,图6.12 所示的3 种方法的使用频率特别高,接下来将详细讲解这3 种方法。
聚类分析
聚类分析,其目的是基于样本(样本数据)具有的特征,把相似的样本分成多个组(聚类)。具体的聚类算法包括K-means 算法、自组织映射、层次聚类等。这些方法能够根据数据的特征找到并整合具有同样特征的数据。
这里我们用实际例子来看一下。假设为了基于某学校班级的期末考试结果来制定今后的教育方针,需要把学生们按各自擅长的领域分成几个聚类。在此假设把数学和语文的得分视为学生的特征,把学生分成两个聚类。这时候数学和语文的分数就成了表示学生特征的数值。这里用某些数值来表示了某种数据的特征,这些数值就叫作特征量。如果将K-means 算法这样的分类算法用于这些特征量,就能根据这些特征量来把学生分成不同的聚类,如图6.13 所示。
K-means 算法就是针对数据的分布来事先指定要把数据分成多少个块,即分成多少个聚类,由此来机械性地生成数据块的一种算法。
拿这个示例来看,数据被分成了几个数学分数较高的理科学生的群(理科聚类),以及语文分数较高的文科学生的群(文科聚类)。聚类的数量是可以随便定的,如果分成3 个聚类,那么还能够像图6.14 这样,新生成一个含有均衡型学生的聚类。
为了用平面坐标表示,这次的示例只取了数学和语文两个科目作为特征,除此之外再增加自然科学和社会等特征时,也是采用同样的分类方法。不过如果胡乱增加一堆特征,就不容易分析算出的组具有什么样的含义了。而且聚类数也一样,聚类数过多,组和组之间倾向的差距就会相应地变小,同样很难看出组的特征。
下面再来看一个聚类的示例,这次是把聚类应用到设备数据的分析中的情况。假设我们要给使用自己公司的应用程序的用户发送宣传邮件(图6.15)。
既然要发送用于宣传的邮件,那么为了让用户认真查看邮件内容,还需要注意发送邮件的时间。这样一来,我们考虑根据用户平日里经常使用智能手机的时段(用户的活跃时段)来发送宣传邮件。
在一定期间内,按照用户和时间段,分别记录下用户使用自己公司的应用程序的次数。然后从这段期间内挑出一天,算出这一天中每个时间段每个用户使用应用程序的平均次数。再将算出的平均次数作为每个用户的特征执行聚类,把常在夜晚使用的用户分到“夜晚型”用户聚类,把常在白天使用的用户分到“白天型”用户聚类等,这样就可以按照用户使用应用程序的时间段来分类了。
另外,还可以把以上特征分成工作日和节假日来计算,提取“只在节假日使用”的用户层。在分析分类的数量时,其中的一个重要的讨论项目就是在事前设置特征量。
综上所述,以往想要分析设备的使用形态都需要采用调查问卷等形式,直接听取用户的意见,用人力进行分析。而如今人们能够通过聚类分析来分析大量数据,更简单地调查用户的生活倾向。
类别分类
类别分类分析的目的在于把数据分成两组或者更多组。虽然有人可能会感觉它跟聚类分析很相似,但类别分析用在已经明确想好了要分类的对象,基于过去的数据来分出对象组和非对象组的场合。类别分类算法包括线性判别式分析、决策树分析、支持向量机(SVM)等。特别是支持向量机还被用于图像识别算法,即识别某张图像上都拍摄了什么内容。
博客文章的分类就是一种类别分类(图6.16)。博客可以把文章按照话题内容分类,这样一来,对特定种类的话题有兴趣的用户就能很方便地找到自己关心的内容。
靠人来搜集过去与娱乐话题相关的博客,这样搜集到的博客文章就是例文,换句话说就是训练数据的素材,用于向类别分类的算法教授何为“娱乐分类”。把这些博客中出现的词语的种类和频率等信息当作“娱乐分类”的数据,让类别分类的算法学习。同理,靠人来搜集非娱乐博客的文章,同样也可以分析出这些文章中出现的词语的种类和频率等信息,将这些信息作为“非娱乐种类”的数据让类别分类的算法学习。
对类别分类算法而言,通过像这样反复地学习,就会生成一个叫作模型的分类规则,此时就生成了“娱乐分类”和“非娱乐分类”的学习结果模型。通过把新生成的博客文章和这个模型相对照,就能识别出这篇博客是属于“娱乐分类”还是属于“非娱乐分类”。
维度压缩
维度压缩也叫“维度约简”或“降维”,即对于大型数据中的大量数据,尽全力留下其中的重要信息并压缩冗余的信息,借此来缩小数据量的分析方法。维度压缩包括主成分分析、因子分析、多维尺度法等。很多时候设备发来的传感器信息太多,或是要分析从无数台设备发来的海量信息时,还会出现很多不需要的信息,即对于获取结果来说没有什么用的信息。此时,通过进行维度压缩,就能切去不需要的信息,把数据转化成一种更易于分析的形式。
这里举一个简单的例子来说明维度压缩,即假设我们要采集采用了主成分分析的问卷数据(图6.17)。
问卷数据偶尔会重复问相同的问题。例如在做一个关于购买意向的调查时,分5 次进行问卷调查,如果问题中包含“重视价格”和“喜欢折扣”这两项,那么这两项的答案很可能都指的是同一个方向,如果对这两个相似问题分别保留答案,那么不止数据量会增加,在之后的分析过程中变量还会增多,这样一来就可能加深理解上的难度。
因此,我们对像以上这样的数据使用主成分分析,尽可能采集那些结果相似的变量,用新的变量重新构成数据,然后从这些新构成的数据中抽出采集程度(贡献率)高的变量,这样一来就能够把数据量削减到数据本来持有的信息量对应的维度。
但是采集到的指标到底具有什么样的含义,这点还需分析者来作出判断,因为没有一个绝对正确的解析方法,所以偶尔解析起来会非常困难,所以不能随随便便地就使用这些指标。
执行分析的环境
前文介绍了一些在发现分析中使用的机器学习的基础知识和应用示例,通过灵活应用这些手法,可以从数据中发现一些复杂的因果关系,即仅凭可视化无法获悉的因果关系。
这些分析手法在大多数情况下都是用编程语言的库,以及专用的分析工具来执行的(图6.18)。
说到编程语言,近来Python 和R 语言尤其引人注目。这两种语言包含很多有关分析的库,用很简单的描述就能执行很多分析。
而专业的分析工具,例如Weka 和KNIME 等工具能基于GUI 执行分析,这类工具叫作数据挖掘工具。数据挖掘工具能够借助图标和箭头指向的方向来查看数据处理的流程,因此其特点在于即便是新手也很容易上手。
这些工具一般都被用作桌面工具,其处理能力决定于使用此工具的机器的能力。因此如果想大规模地实现高级的分析时,就需要用于与分布式处理基础架构联动地执行机器学习的Mahout,或是Jubatus 这样的框架。关于Jubatus,后文将会讲解。
数据分析是靠试错法逐步进行的,刚开始需要尝试各种各样的分析方法来进行试错,因此推荐大家首先用桌面工具找到要分析的“范围”再进行系统化。
6.3.2 用分析算法来发现和预测
可视化分析是通过采集分析来理解数据具有的倾向,分析结果呈现为统计量和图表的形式,数据被视为无机的数值。也可以说它是一种从高处俯视数据,捕捉数据表面倾向的分析。
相对而言,发现分析则以从数据中提取更复杂的倾向、规则、结构等信息为目的。因此发现分析采用高级的分析手法,不用数值来表现分析结果,而是用像数学公式和规律这样的“模型”来表现倾向。
通过检测发现因果关系
假如我们想知道造成机器故障的原因所在,就需要将传感器采集到的数据加以灵活应用,如机器运转时的温度、压力、振动等。
采集机器在正常运转时,以及发生故障时这两种状态下的数据,用统计学的“检测”来明确这两种数据间有哪些因素倾向不同,这就是最简单的分析(图6.19)。通过检测所有因素,有助于找到发生故障时的原因所在。
此外,通过灵活应用这些统计方法和统计知识,就能比采集分析更能发现复杂的倾向,这正是发现分析的特点所在。
6.3.3 预测
发现分析的目的是从数据中找出复杂的倾向和因果关系,并将其转化成人类的知识。相对地,预测分析则是基于找出的规律和构造来推测今后会发生的事。
预测分析并没有特定的方法,既有像回归分析这样预测数量的分析,也有像类别分类这样,在给出了未知样本的情况下进行分类的分析。特别是机器学习使用的方法都是一些在基于过去的数据进行学习的基础上,来预测和判断新数据的方法,所以一般来说,这些方法不仅能发现知识,还能进行预测。
在此就以预测分析中最热门的回归分析为例为大家讲解,来加深一下对预测分析的理解。
回归分析
这里先举一个回归分析的例子,假设存在某个变量y,用变量x 能将y 表示为“y = a×x + b”这样的等式,如果能根据实际测量数据求出等式中的系数,那么在给出新的x 值时就能够预测y 的值,这就是回归分析。在此我们把像y 这样作为预测对象的变量称为因变量,像x 这样用于预测y 的变量称为自变量。
在回归分析中,为了完成等式,需要基于实际测量的数据来推导出等式中的系数,具有代表性的方法包括“最小二乘法”。在此假设用此等式表示线性回归分析,要求出系数a 和系数b。线性回归分析就是假设进行回归分析的数据是一次函数,也就是说数据像直线图那样分布在一条直线上。
首先把过去给出的x 和y 的组合(测量值)绘制成图表,而线性回归分析中的最小二乘法就可以看作是在这张图表中画一条直线,这条直线表示的是和测量值最接近的值(图6.20)。因为这条直线表示的是预测值,所以为了将测量值和预测值的误差降到最小,需要调整直线的倾斜度a 和截距b 来决定直线的形状。这样一来,就能构建一个对于过去的数据来说误差最小的模型“a×x + b”。
为了让大家更容易理解,这个示意图采用了平面图,因此只用了一种变量x,但实际上即使有多种x 也能够执行回归分析。当有若干个输入变量时, 对于n 个输入变量x1、x2、x3……xn 而言, 定义y =a1×x1 + a2×x2 +……an×xn + b,就可以求出每个变量的系数。前面说的针对一个输入变量x 得出预测值y 的这种回归分析叫作“一元回归分析”,而基于多个输入变量得出预测值的叫作“多元回归分析”。
让我们通过用以提高传感器的测量精确度的校准,来看一下回归分析的应用示例。
通过回归分析校准传感器
回归分析还被用于传感器校准,关于传感器校准在3.4.6 节已经有所介绍。
不管多么均一地制造传感器,在制造过程中总是会发生个体上的差异,测定值也就会包含误差。含有误差的实际的测量值和想测量的真实数值之间存在着一定的关系,而校准就是一项导出两者间关系的操作。
要进行回归分析,首先要获取准确的样本y,并用传感器测量样本y 的状态,从而获取测量值x。通过重复数次这样的操作,我们就能够得到x 与y 的数个组合,如图6.21 所示。基于这些组合来应用最小二乘法,就可以得到一个数值公式。假设得到了y = a×x 这样的等式,就能推出来一个对于测量值x 而言大致准确的y 值。
在实际进行校准时,数据分布结果不一定会恰好是一条直线。因此当结果较为偏离直线时,就要考虑采用二次方程等非线形的数值公式,或是其他可用的理论公式。
基于各种各样的因素来预测交通量
说到以预测为目的来分析,那肯定要举交通量预测这个例子(图6.22)。通过传感器来持续数月地采集某条道路每天和每个时间段的交通量,再基于星期、时间段、天气等因素来分析今后的交通量,从而实现对道路拥堵信息的预测。同理,我们还能够对家庭和办公室大楼的用电量进行预测。
此外,如果把前面在发现分析中获得的知识应用到预测未来上,那么前面的发现型示例也是一样,只要能将其灵活应用,就可以用于预测未来。举个例子,假设我们基于过去积累下来的机器运转时的机体内压力数据,算出了机器正常运转时的平均压力和方差(离散程度)。然后假设在运转机器的过程中,机器的运转温度又超出了过去压力离散的范围。此时,机器就会发出警报来通知我们产生了某种异常状况,警告我们机器产生了故障或是有人在用非正常的使用方法操作机器。
6.4 分析所需要的要素
除了前面提到过的分析手法,分析还需要用到数据库和分布式处理基础架构等各种各样的中间件和处理基础架构。第2 章从批处理和流处理的角度出发介绍过这类处理基础架构。本节将以数据分析为切入点,为大家介绍分析需要何种基础架构,具体会用到什么样的框架。
6.4.1 数据分析的基础架构
首先把数据分析的基础架构分为4 项来看,这4 项分别是采集、积累、加工、分析。
采集
在采集要分析的数据时,采集对象的性质决定了需要哪种基础架构。举个例子,如果采集对象已经存储在数据库上,那么只要使用SQL单独提取所需数据即可。
如果采集对象是服务器或设备输出的日志数据,且已经积累了海量日志文件,那么就需要用到多种功能,例如只采集需要的日志数据的功能,只从日志提取需要的部分的功能,把结果输出到操作环境中的功能等。虽然可以把这些一连串的处理交给程序开发来解决,不过最近还出现了像Apache Flume 和Fluentd 这样的框架,使用这些框架可以将日志的采集、加工、输出等一连串过程作为一整个流程来处理。
此外,如果要采集的数据是传感器发来的信息,就需要像第2 章介绍的那样,构建物联网服务的前端服务器,以采集传感器和设备发来的信息。
积累
在数据积累中,虽然有些把数据作为文本文件来保存的,但大多数情况下,为了方便地管理和提取数据,一般都会采用数据库来积累数据。虽然笼统地称为数据库,但除了用传统的表格形式来保存数据的关系数据库以外,还出现了各种各样的数据库,例如键值存储数据库、分布式文档存储数据库、能保存要素和关系信息的图形数据库(图6.23)。
近年来,出于保存大型数据和图像、语音等非结构化数据的目的,也有人在使用Hadoop 的HDFSA。HDFS 能将多台机器的存储空间虚拟地集中在一起,从而构建一个容量巨大的存储空间。
另外,通过应用MapReduce 功能,还能对积累的数据进行分布式处理。利用Hadoop 的好处就是能够利用一个叫作Apache Mahout 的机器学习库,这个库能在Hadoop 的MapReduce 上实现机器学习,因此Hadoop 被认为是一个兼备积累、加工、分析这3 种功能的、非常有用的基础架构。
加工
在加工过程中,需要根据各自的分析目的,从已积累的通用数据中提取出所需数据,去除那些额外和缺损的数据,除了对数据施加必要的运算等处理以外,还需要一个基础架构,以生成汇集分析用数据的数据集。对于小型数据,可以用电子制表软件和程序来进行加工,但在处理像传感器数据这样的大型数据时,就需要根据数据性质来准备一个可扩展的基础架构。
上述内容中提到的Hadoop 有一项功能叫作MapReduce,利用MapReduce 可以通过应用并分散机器资源来处理数据。另外,磁盘输入输出等问题往往容易成为处理大型数据时的瓶颈,借助该功能还能大幅减少磁盘输入输出所需的处理时间。
分析
用于执行分析的环境包括前面介绍过的统计分析语言和数据挖掘工具。要进行这些分析,就需要具备用于计算的庞大的内存和运算能力。但在经过预处理阶段加工后,数据量就会被削减,很多分析的尺寸甚至能达到用普通的桌面工具也能处理的程度。
然而随着基础架构技术的发展,日志和传感器数据也成为了高级分析的对象。分析数据的大型化现象无可避免地日益增多,还有无法使用上述工具来执行分析的情况。在这种情况下,就需要专门为分析准备一个基础架构。
前面介绍的在Hadoop 上运转的机器学习库Apache Mahout 就是一个例子。能使用的分析方法虽然有限,但通过应用分布式处理就能缩放大型分析。
除此之外,近来Apache Spark 也备受瞩目。在使用Hadoop 特有的分布式处理方式MapReduce 时,每当执行一组处理就会发生磁盘输入输出操作。因此在执行像机器学习这样需要反复进行处理的分析算法时,处理时间往往会很久。针对这点,正如第2 章介绍的那样,ApacheSpark 通过应用内存中缓存下来的内容来实现反复处理的高速化。可想而知,这样一来就能大幅提高分析处理速度,从今以后,大型高级分析的道路会更加宽阔。
以上基于“采集”“积累”“加工”和“分析”这4 道工序解释了分析基础架构。下面将在这些基础架构技术中挑出两种单独的技术来介绍,这两种技术与日后传感器数据的分析间有着紧密的联系,所以其重要性会越来越高。
● CEP:这是一种流数据处理基础架构,作为一种将改变上述四道工序的创新思路,它采用“不积累数据而是对其进行实时处理”的方法来进行事件处理
● Jubatus:这是一种少有的基础架构,它能够高速且大规模地实现分析,尤其是高级分析
6.4.2 CEP
CEP 是Complex Event Processing(复合事件处理)的简称,这门技术用于实时地处理事件中产生的数据。因此CEP 跟传感器一样,都被用作处理基础架构,来处理一些随时可能发来的大量数据。CEP 是兼备3个部分的框架,这3 个部分即用于接收各种形式的数据的“输入适配部分”,实际处理数据的“处理引擎部分”,以及将处理结果分配给各种各样的系统和基础架构的“输出适配部分”(图6.24)
因为CEP 是通过在内存上进行处理来实现实时处理的,所以不擅长像机器学习那样的大规模复杂运算。然而它能够缓存一定的数据来进行处理,它实现的服务是以往那些先累积后处理式的系统无法企及的。在统计和模式识别这种处理中,它能极为高速地输出结果。又因为它不堆积数据,而是立即处理,所以不需要给高速数据准备用于积累的大规模基础架构,这也是CEP 的一个独有优势。随着传感器数据的增多,以及实时性需求的增加,今后CEP 可能会是日益重要的技术之一。
CEP 包括作为开源软件被开发出来的Esper 及供应商产品。
CEP的应用实例
CEP 开始得到人们关注是因为有人将其用在金融领域中的算法交易上。股票交易这个领域对实时性要求高,在股价有变动时,需要瞬间做出交易,来买卖股票。当股价的变动满足事先定好的规则时,CEP 就会进行处理,即瞬间判断出该变动,并做出相应的交易。就是说,当发生某个事件且这个事件满足某种特定的规则时,CEP 会进行事件驱动型处理,来调用与该事件相对应的操作。
此外还有其他围绕传感器数据的应用性尝试。比如在桥梁上安装传感器来获取桥梁各部分的振动等数据,用系统实时接收这些信息,并且事先规定一个正常时的状态。这样一来,在发生异于正常状态的状况时系统就会发出警报,帮助及早发现桥梁的异常情况。今后这种技术很有可能会与传感器结合起来,应用到故障检测方面。
6.4.3 Jubatus
Jubatus 是一个用于实现发现和预测等高级分析的框架,还是一个如同CEP 一样具备实时处理能力的新型分析基础架构。
通常的分析方法会将积累的数据一并输入来进行学习,即采用“批量式”处理方式。因此数据规模越大,对需要学习的资源的要求也就越高,搞不好就会陷入所有数据都无法使用的窘境。而且既然要一并进行学习,当然也就会花很多时间在处理上,众所周知,我们需要花掉一大把时间在事前学习上。
Jubatus的在线学习
对于前面提到的问题,Jubatus 采取了“在线学习”这种增量式学习方式,即使不将数据一并输入,也能够在接收到每个数据时进行学习(图6.25)。这样一来,数据一产生就会被输入,还可以即时更新模型。也就是说,不需要准备一个基础架构来积累学习数据,也不需要考虑为了学习要额外花费多少时间。
因为在线学习不适用于现有的所有算法,所以Jubatus 也无法实现现有的分析,不过Jubatus 能处理的分析数量会逐渐增多,其应用范围也会逐渐增大。
Jubatus的向外扩展性质
Jubatus 的另一个特征就是能够通过分布式处理来实现“向外扩展式”的资源扩展。
对于通常的系统而言,处理的数据规模越大,就越需要一个配备了高性能CPU,具备大型内存和存储空间的服务器。这种通过提高服务器等设备的性能来扩展资源的方法叫作“向上扩展式”,过去,基础成本往往会随着资源的处理性能提高而呈现飞跃性增长的态势。而“向外扩展式”是一项革命性的产物,它运用框架在多台机器上分散进行处理与数据积累,由此获得了与机器数量相应的处理和积累能力(图6.26)。
此外,一旦系统组装完成并运行,如果出现资源不足的状况,也能通过追加机器来扩展,以提升系统整体的处理能力。大多数情况下不需要每台机器具备多高的规格,因此就算提升了处理能力,成本也很少会急剧上升,这也是向外扩展的一大优点。
因为Jubatus 采用了向外扩展式,所以就算输入的数据量很庞大,也能通过控制机器数量来扩大分析的规模。而且Jubatus 与CEP 一样,都是在数据产生的同时进行处理,所以没有必要积累数据,对每台机器存储空间的要求不高,这也可以说是Jubatus 的一个优点。
看到这里可能有人会觉得,分析不过是在算法里输入数据就能搞定的事儿。但是实际上,鲜少有人能通过直接输入数据来得到预想中的结果。为了选定数据需要尝试各种各样的算法,要尝试加工数据,还需要尝试用多种方式制作特征量以表示数据的特征,等等。有时输入的数据中包含异常值,而这些异常值会造成“噪声”影响正常运行。为了解决这类“噪声”问题,就需要耐心地进行除噪工作,“不走寻常路”,这才是分析。
想妥善地解决这些问题,不能光依赖算法,还需要构建假设,基于假设来制作特征量,对照假设来选择算法等。假设能够在很大程度上预防分析产生偏差。另外,为了获取假设,还需要灵活地将过去的数据可视化,并定量掌握整体的倾向和现状,基于倾向和现状与经验丰富的人士探讨交流,等等。如此一来,分析的难点也就明确了,它难就难在有些地方无法仅凭算法和工具解释,而是需要一些无形的诀窍和技巧。
关于数据分析的更细节的知识,还是需要去寻找统计相关的专业课程来学习的。作者有目的性在大二上学习的本校商学院的一门研究生课程——线性回归分析,其中蕴含的知识体系和方法,与本科期间的课程“概率分析及数理统计”完全不是一个量级的。虽然说当今社会提倡“术业有专攻”,但又能力的话,还是建议大家去更深入的了解了解统计学这一门博大精深的专业。