第3章大数据系统输入3.1大数据采集过程及数据来源 数据采集又称为数据获取,是利用一种装置,从系统外部采集数据并输入系统内部的一个接口。在互联网快速发展的今天,数据采集已经被广泛应用于互联网及分布式领域,例如摄像头和麦克风,都是数据采集工具。 3.1.1大数据采集来源 根据应用系统分类,大数据的采集主要有4种来源: 管理信息系统、Web信息系统、物理信息系统和科学实验系统。 1. 管理信息系统 管理信息系统是指企业、机关内部的信息系统,如事务处理系统和办公自动化系统,主要用于经营和管理,为特定用户的工作和业务提供支持。数据的产生既有终端用户的原始输入,也有系统的二次加工处理。系统的组织结构是专用的,数据通常是结构化的。 2. Web信息系统 Web信息系统包括互联网上的各种信息系统,如社交网站、社会媒体和搜索引擎等,主要用于构造虚拟的信息空间,为广大用户提供信息服务和社交服务。系统的组织结构是开放式的,大部分数据是半结构化或无结构化的。数据的产生者主要是在线用户。电子商务和电子政务是在Web上运行的管理信息系统。 3. 物理信息系统 物理信息系统是指关于各种物理对象和物理过程的信息系统,如实时监控和实时检测,主要用于生产调度、过程控制、现场指挥和环境保护等。系统的组织结构是封闭的,数据由各种嵌入式传感设备产生,可以是关于物理、化学、生物等性质和状态的基本测量值,也可以是关于行为和状态的音频、视频等多媒体数据。4. 科学实验系统 科学实验系统实际上也属于物理信息系统,但其实验环境是预先设定的,主要用于研究和学术,数据是有选择的、可控的,有时可能是人工模拟生成的仿真数据。 从人机物三元世界观点看,管理信息系统和Web 信息系统属于人与计算机的交互系统,物理信息系统属于物与计算机的交互系统。关于物理世界的原始数据,在人机系统中,是通过人实现融合处理的;而在物机系统中,需要通过计算机等装置进行专门处理。融合处理后的数据,被转换为规范的数据结构,输入并存储在专门的数据管理系统中,如文件或数据库,形成专门的数据集。 大数据第3章大数据系统输入3.1.2大数据采集过程 足够的数据量是大数据战略建设的基础,因此,数据采集就成了大数据分析的前站。采集是大数据价值挖掘重要的一环,其后的分析挖掘都建立在采集的基础上。 数据采集有基于物联网传感器的采集,也有基于网络信息的数据采集。例如在智能交通中,数据采集有基于GPS的定位信息采集、基于交通摄像头的视频采集、基于交通卡口的图像采集和基于路口的线圈信号采集等。 在互联网上的数据采集是对各类网络媒介,如搜索引擎、新闻网站、论坛、微博、博客和电商网站等的各种页面信息和用户访问信息进行采集,采集的内容主要有文本信息、URL、访问日志、日期和图片等。之后需要把采集到的各类数据进行清洗、过滤和去重等各项预处理并分类归纳存储。 前面已经讲过,数据采集过程中涉及数据抽取、转换和加载3个过程。数据采集的ETL工具负责将分布的、异构数据源中的不同种类和结构的数据(如文本数据、关系数据,以及图片、视频等非结构化数据等)抽取到临时中间层后进行清洗、转换、分类和集成,最后加载到对应的数据存储系统(如数据仓库或数据集市)中,成为联机分析处理和数据挖掘的基础。 针对大数据的ETL工具同时又有别于传统的ETL处理过程,因为一方面大数据的体量巨大,另一方面数据的产生速度也非常快,例如一个城市的视频监控头、智能电表每一秒都在产生大量的数据,对数据的预处理需要实时快速。因此,在ETL的架构和工具选择上,也会采用如分布式内存数据库、实时流处理系统等现代信息技术。 现代社会行业、部门中存在各种不同的应用和各种数据格式及存储需求,为实现跨行业、跨部门的数据整合,尤其是在智慧城市建设中,需要制定统一的数据标准、交换接口以及共享协议,这样不同行业、不同部门、不同格式的数据才能基于一个统一的基础进行访问、交换和共享。 3.2大数据采集方法 数据采集系统整合了信号、传感器、激励器、信号调理、数据采集设备和应用软件。在数据大爆炸的互联网时代,数据的类型也是复杂多样的,包括结构化数据、半结构化数据和非结构化数据。结构化数据最常见,就是具有模式的数据。非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像、音频和视频信息等。大数据采集是大数据分析的入口,所以是相当重要的一个环节。 常用的数据采集方法归结为三类: 传感器数据采集、系统日志采集方法数据采集和网络爬虫数据采集。 1. 传感器数据采集 传感器通常用于测量物理变量,一般包括声音、温湿度、距离和电流等,将测量值转化为数字信号,传送到数据采集点,图3.1传感器数据采集 让物体有了触觉、味觉和嗅觉等功能,让物体慢慢变得活了起来。传感器数据采集如图3.1所示。 2. 系统日志采集方法数据采集 日志文件数据一般由数据源系统产生,用于记录数据源的执行的各种操作活动,例如网络监控的流量管理、金融应用的股票记账和Web 服务器记录的用户访问行为。 很多互联网企业都有自己的海量数据采集工具,多用于系统日志采集,这些工具均采用分布式架构,能满足每秒数百兆字节的日志数据采集和传输需求。系统日志采集方法如图3.2所示。 图3.2系统日志采集方法 3. 网络爬虫数据采集 网络爬虫是指为搜索引擎下载并存储网页的程序,它是搜索引擎和 Web 缓存的主要的数据采集方式。通过网络爬虫或网站公开API等方式从网站上获取数据信息。该方法可以将非结构化数据从网页中抽取出来,将其存储为统一的本地数据文件,并以结构化的方式存储。它支持图片、音频、视频等文件或附件的采集,附件与正文可以自动关联。网络爬虫自动提取网页的过程如图3.3所示。 图3.3网络爬虫自动提取网页的过程 此外,对于企业生产经营数据上的客户数据、财务数据等保密性要求较高的数据,可以通过与数据技术服务商合作,使用特定系统接口等相关方式采集数据。 数据采集是挖掘数据价值的第一步,当数据量越来越大时,可提取出来的有用数据必然也就更多。只要善用数据化处理平台,便能够保证数据分析结果的有效性,助力企业实现数据驱动。 3.3大数据导入/预处理3.3.1大数据导入/预处理的过程大数据处理是将业务系统的数据经过抽取、清洗与转换之后加载到数据仓库的过程,目的是将企业中分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析的依据。数据抽取、清洗与转换是大数据处理最重要的一个环节,通常情况下会花掉整个项目的1/3的时间。 数据抽取是从各个不同的数据源抽取到处理系统中,在抽取的过程中需要挑选不同的抽取方法,尽可能地提高运行效率。花费时间最长的是清洗、转换部分,一般情况下这部分的工作量是整个过程的2/3。数据加载一般在数据清洗完成之后直接写入数据仓库中去。 1. 数据抽取 数据抽取需要在调研阶段做大量工作,首先要搞清楚以下几个问题: 数据从几个业务系统中来?各个业务系统的数据库服务器运行什么数据库管理系统(DBMS)?是否存在手工数据?手工数据量有多大?是否存在非结构化数据?等等类似问题,当采集完这些信息之后才可以进行数据抽取的设计。 (1) 与存放数据仓库(Data Warehouse,DW)相同的数据源处理方法。这一类数据源在设计时比较容易,一般情况下,数据库管理系统(包括SQL Server、Oracle)都会提供数据库连接功能,在DW数据库服务器和原业务系统之间建立直接的连接关系就可以使用Select 语句直接访问。 (2) 与DW数据库系统不同的数据源的处理方法。 这一类数据源一般情况下也可以通过开放数据库连接(Open Database Connectivity,ODBC)的方式建立数据库连接,如SQL Server与Oracle之间。如果不能建立数据库连接,可以有两种方式完成: 一种方式是通过工具将源数据导出成.txt或者.xls文件,然后再将这些源系统文件导入操作数据存储(Operational Data Store,ODS)中;另一种方法通过程序接口来完成。 (3) 对于文件类型数据源(txt、xls),可以培训业务人员利用数据库工具将这些数据导入指定的数据库,然后从指定的数据库抽取。 (4) 增量更新问题。对于数据量大的系统,必须考虑增量抽取。一般情况下,业务系统会记录业务发生的时间,可以用作增量的标志,每次抽取之前首先判断ODS中记录最大的时间,然后根据这个时间去业务系统取大于这个时间的所有记录。利用业务系统的时间戳,一般情况下,业务系统没有或者部分有时间戳。 2. 数据清洗与转换 一般情况下,数据仓库分为操作数据存储和数据仓库两部分,通常的做法是从业务系统到ODS做清洗,将脏数据和不完整数据过滤掉,再从ODS到DW的过程中进行转换,进行一些业务规则的计算和聚合。 1) 数据清洗 数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉,还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据和重复的数据三大类。 (1) 不完整的数据。其特征是一些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失,业务系统中主表与明细表不能匹配等。需要将这一类数据过滤出来,按缺失的内容分别写入不同Excel文件向客户提交,要求在规定的时间内补全。补全后才写入数据仓库。 (2) 错误的数据。产生原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,例如数值数据输成全角数字字符、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不面见字符的问题只能靠写SQL查询语句的方式找出来,然后要求客户在业务系统修正之后抽取;日期格式不正确的或者日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。 (3) 重复的数据。特别是表中比较常见,将重复的数据记录的所有字段导出来,让客户确认并整理。 数据清洗是一个反复的过程,不可能在几天内完成,只有不断地发现问题和解决问题。对于是否过滤、是否修正一般要求客户确认;对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使它们尽快地修正错误,同时也可以作为将来验证数据的依据。数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认才行。 2) 数据转换 数据转换的任务主要是进行不一致的数据转换、数据粒度的转换和一些商务规则的计算。 (1) 不一致数据的转换。这个过程是一个整合的过程,将不同业务系统的相同类型的数据统一,例如同一个供应商在结算系统的编码是XX0001,而在CRM中的编码是YY0001,这样在抽取过来之后统一转换成一个编码。 (2) 数据粒度的转换。业务系统一般存储非常明细的数据,而数据仓库中的数据是用来分析的,不需要非常明细的数据。一般情况下,会将业务系统数据按照数据仓库粒度进行聚合。 (3) 商务规则的计算。不同的企业有不同的业务规则和不同的数据指标,这些指标有时不是简单地加加减减就能完成,这时需要在ETL中将这些数据指标计算好后存储在数据仓库中,供分析使用。 3.3.2数据清洗的过程 对于科研工作者、工程师、业务分析者这些和数据打交道的职业,数据分析在他们工作中是一项核心任务。这不仅仅针对大数据的从业者,即使你笔记本硬盘上的数据也值得分析。数据分析的第一步是清洗数据,原始数据可能有如下不同的来源。 (1) Web服务器的日志。 (2) 某种科学仪器的输出结果。 (3) 在线调查问卷的导出结果。 (4) 政府数据。 (5) 企业顾问准备的报告。 在理想世界中,所有记录都应该是整整齐齐的格式,并且遵循某种简洁的内在结构。但是实际并不是这样。所有这些数据的共同点: 你绝对料想不到它们的各种怪异的格式。数据给你了,那就要处理,但这些数据可能经常存在以下问题。 (1) 不完整的(某些记录的某些字段缺失)。 (2) 前后不一致(字段名和结构前后不一)。 (3) 数据损坏(有些记录可能会因为种种原因被破坏)。 因此,必须经常维护清洗程序来清洗这些原始数据,把它们转化成易于分析的格式,通常称为数据整理(Data Wrangling)。接下来介绍有效清洗数据的过程。 1. 识别不符合要求的数据 从名字上看数据清洗就是把“脏”的“洗掉”。因为数据仓库中的数据是面向某一主题的数据的集合,这些数据从多个业务系统中抽取而来,而且包含历史数据,这样就避免不了有的数据是错误数据,有的数据相互之间有冲突,这些错误的或有冲突的数据显然是人们不想要的,称为“脏数据”。人们要按照一定的规则对“脏数据”进行处理,这就是数据清洗。数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉,还是由业务单位修正之后再进行抽取。 2. 数据清洗的经验 清洗数据的程序经常会崩溃。这很好,因为每一次崩溃都意味着这些糟糕的数据又跟你最初的假设相悖了。反复地改进你的断言直到能成功地走通。但一定要尽可能让它们保持严格,不要太宽松,要不然可能达不到想要的效果。最坏的情况不是程序走不通,而是程序运行结果不是你要的结果。 以下是一些清洗数据的经验。 (1) 不要默默地跳过记录。原始数据中有些记录是不完整的或者损坏的,所以清洗数据的程序只能跳过。默默地跳过这些记录不是最好的办法,因为你不知道什么数据遗漏了。因此,如下做会更好。 ① 打印出警告提示信息,这样就能够过后再去寻找什么地方出错了。 ② 记录总共跳过了多少记录,成功清洗了多少记录。这样做能够让你对原始数据的质量有大致的感觉,例如,如果只跳过了0.5%,这还说得过去,但是如果跳过了35%,那就该看看这些数据或者代码存在什么问题了。 (2) 把变量的类别以及类别出现的频次存储起来。数据中经常有些字段是枚举类型。例如,通常血型是A、B、AB或者O,但是如果某个特殊类别包含多种可能的值,尤其是当有的值你可能始料未及的话,就不能即时确认了。这时候,采用把变量的类别以及类别出现的频次存储起来就会比较好。这样做有如下好处。 ① 对于某个类别,假如碰到了始料未及的新取值时,就能够打印一条消息提醒你一下。 ② 洗完数据之后供你反过头来检查。例如,假如有人把血型误填成C,那回过头来就能轻松发现了。 (3) 断点清洗。如果有大量的原始数据需要清洗,要一次清洗完就可能需要很长的时间,有可能是5分钟,10分钟,一小时,甚至是几天。实际当中,经常在洗到一半时突然崩溃了。 假设有100万条记录,清洗程序在第325 392条因为某些异常崩溃了,修改这个错误,然后重新清洗,这样的话,程序就得重新从1清洗到325 391条,这是在做无用功。其实可以进行如下操作。 第一步,让清洗程序打印出来当前在清洗第几条,这样,如果崩溃了,就能知道处理到哪条时崩溃了。 第二步,让程序支持在断点处开始清洗,这样当重新清洗时,就能从325 392条直接开始。重新清洗的代码有可能会再次崩溃,只要再次修正错误,然后从再次崩溃的记录开始就可以了。 (4) 在一部分数据上进行测试。不要尝试一次性清洗所有数据。当刚开始写清洗代码和调试程序时,在一个规模较小的子集上进行测试,然后扩大测试的这个子集再测试。这样做的目的是能够让清洗程序很快地完成测试集上的清洗,例如几秒,这样会节省反复测试的时间。 (5) 把清洗日志打印到文件中。当运行清洗程序时,把清洗日志和错误提示都打印到文件当中,这样就能轻松地使用文本编辑器来查看它们了。 (6) 可选: 把原始数据一并存储下来。当不用担心存储空间时这一条经验还是很有用的。这样做能够让原始数据作为一个字段保存在清洗后的数据中,清洗完后,如果发现哪条记录不对劲了,就能够直接看到原始数据长什么样子,方便进行程序调试。 (7) 验证清洗后的数据。注意写一个验证程序来验证清洗后得到的干净数据是否与预期的格式一致。虽然不能控制原始数据的格式,但是能够控制干净数据的格式。所以,一定要确保干净数据的格式是符合你预期的格式的。 这一点其实非常重要,因为完成了数据清洗之后,接下来就会直接在这些干净数据上进行下一步工作了。如非万不得已,甚至再也不会碰那些原始数据了。因此,在开始数据分析之前要确保数据足够干净。要不然,可能会得到错误的分析结果,到那时,就很难再发现很久之前的数据清洗过程中犯的错了。 3.3.3数据清洗与数据采集技术 随着信息化进程的推进,人们对数据资源整合的需求越来越明显。但面对分散在不同地区、种类繁多的异构数据库进行数据整合并非易事,要解决冗余、歧义等“脏数据”的清洗问题。仅靠手工进行不但费时费力,质量也难以保证;另外,数据的定期更新也存在困难。如何实现业务系统数据整合,是摆在大数据面前的难题。ETL数据转换系统为数据整合提供了可靠的解决方案。 ETL数据抽取、转换和加载过程负责将分布的、异构数据源中的数据(如关系数据、平面数据文件等)抽取到临时中间层后进行清洗、转换和集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。它可以批量完成数据抽取、清洗、转换和加载等任务,不但满足了人们对种类繁多的异构数据库进行整合的需求,同时可以通过增量方式进行数据的后期更新。 主流ETL体系结构如图3.4所示。 图3.4主流ETL体系结构ETL过程中的主要环节就是数据抽取、转换和加载。为了实现这些功能,各个ETL工具一般会进行一些功能上的扩充,例如工作流、调度引擎、规则引擎、脚本支持和统计信息等。 数据抽取是从数据源中抽取数据的过程。实际应用中,不管数据源采用的是传统关系数据库还是新兴的NoSQL数据库,数据抽取一般有以下3种方式。 1. 全量抽取 全量抽取是ETL在集成端进行数据的初始化时,首先由业务人员或相关的操作人员定义抽取策略,选定抽取字段和定义规则后,由设计人员进行程序设计;将数据进行处理后,直接读取整个工作表中的数据作为抽取的内容,类似于数据迁移,是ETL过程中最简单的步骤,其简单性主要适用于处理一些对用户非常重要的数据表。 2. 增量抽取 增量抽取主要发生在全量抽取之后。全量抽取之后,对上次抽取过的数据源表中新增的或被修改的数据进行抽取,称为增量抽取。增量抽取可以减少抽取过程中的数据量,提高抽取速度和效率,减少网络流量,同时,增量抽取的实现,对异构数据源和数据库中数据的变化能准确把握。 信息抽取不是仅仅从大量的文献集或数据集中找出适合用户需要的那篇文献或部分内容,而是抽取出真正适合用户需要的相关信息片段,提供给用户,并找出这些信息与原文献直接的参考对照。 3. 数据转换和加工 从数据源中抽取的数据不一定完全满足目的库的要求,例如数据格式不一致、数据输入错误和数据不完整等,还要对抽取出的数据进行数据转换和加工。 数据转换是真正将源数据库中的数据转换为目标数据的关键步骤,在这个过程中通过对数据的合并、汇总、过滤以及重新格式化和再计算等,从而将操作型数据库中的异构数据转换成用户所需要的形式。数据的转换和加工可以在ETL引擎中进行,也可以在数据抽取过程中利用数据库的特性同时进行。 3.3.4基于大数据的数据预处理 毫无疑问,数据预处理在整个数据挖掘流程中占有非常重要的地位,可以说60%甚至更多的时间和资源都花费在数据预处理上了。 传统背景下数据预处理更多的是对数据库的清洗,这些数据有比较固定的模式,数据维度也不是很多,而且每一维度的数据类型(离散、连续数值和类标) 以及包含的信息都能很明确。 大数据背景下的数据预处理更倾向于对数据仓库的清洗。首先,数据都是异源(各种数据来源),这个要统一起来就有很大的工作量;其次,数据可能没有固定的结构,或者称为非结构化数据,例如文本;再次,就是数据量大,大到单机程序或者小的分布式集群无法在给定时间范围内处理完毕;最后,数据量太大导致很多有用的信息被噪声淹没,甚至都不知道这些数据能干什么,分不清主次。 1. 为什么要预处理数据 (1) 现实世界的数据是“脏”的(不完整,含噪声,不一致)。 (2) 没有高质量的数据,就没有高质量的挖掘结果(高质量的决策必须依赖于高质量的数据;数据仓库需要对高质量的数据进行一致地集成)。 (3) 原始数据中存在的问题: 存在不一致(数据内含出现不一致情况)、重复、不完整(没有感兴趣的属性)、含噪声(数据中存在着错误)、高维度或异常(偏离期望值)的数据。 2. 数据预处理的方法 (1) 数据清洗: 去噪声和无关数据。 (2) 数据集成: 将多个数据源中的数据结合起来存放在一个一致的数据存储中。 (3) 数据变换: 把原始数据转换成为适合数据挖掘的形式。 (4) 数据规约: 主要方法包括数据立方体聚集、维度归约、数据压缩、数值归约、离散化和概念分层等。 3. 数据选取参考原则 (1) 尽可能赋予属性名和属性值明确的含义。 (2) 统一多数据源的属性编码。 (3) 去除唯一属性。 (4) 去除重复属性。 (5) 去除可忽略字段。 (6) 合理选择关联字段。 (7) 进一步处理: 通过填补遗漏数据、消除异常数据、平滑噪声数据,以及纠正不一致数据,去掉数据中的噪声、填充空值、丢失的值和处理不一致数据。 4. 数据预处理的知识要点 数据预处理相关的知识要点、能力要求和相关知识点如表3.1所示。表3.1数据预处理的知识要点、能力要求和相关知识点知识要点能力要求相关知识点数据预处理的原因(1) 了解原始数据存在的主要问题 (2) 明白数据预处理的作用和工作任务(1) 数据的一致性问题 (2) 数据的噪声问题 (3) 原始数据的不完整和高维度问题数据预处理的方法(1) 掌握数据清洗的主要任务和常用方法 (2) 掌握数据集成的主要任务和常用方法 (3) 掌握数据变换的主要任务和常用方法 (4) 掌握数据规约的主要任务和常用方法(1) 数据清洗 (2) 数据集成 (3) 数据变换 (4) 数据规约5. 数据清洗的步骤 刚拿到的数据→与数据提供者讨论沟通→通过数据分析(借助可视化工具)发现“脏数据”→清洗脏数据(借助MATLAB、Java或C++语言)→再次统计分析(使用Excel的Data Analysis,进行最大值、最小值、中位数、众数、平均值和方差等的分析,画出散点图)→再次发现“脏数据”或者与实验无关的数据(去除→最后实验分析→社会实例验证→结束)。 3.4数据集成3.4.1数据集成的概念数据集成是指将不同应用系统、不同数据形式,在原有应用系统不做任何改变的条件下,进行数据采集、转换和存储的数据整合过程。在数据集成领域,已经有很多成熟的框架可以利用。目前通常采用基于中间件模型和数据仓库等方法来构造集成的系统,这些技术在不同的着重点和应用上解决数据共享和为企业提供决策支持。 数据集成的目的: 运用技术手段将各个独立系统中的数据按一定规则组织成为一个整体,使得其他系统或者用户能够有效地对数据进行访问。数据集成是现有企业应用集成解决方案中最普遍的一种形式。数据处于各种应用系统的中心,大部分的传统应用都是以数据驱动的方式进行开发。之所以进行数据集成是因为数据分散在众多具有不同格式和接口的系统中,系统之间互不关联,所包含的不同内容之间互不相通。因此,需要一种能够轻松地访问特定异构数据库数据的能力。 3.4.2数据集成面临的问题 在信息系统建设过程中,由于受各子系统建设中具体业务要求、实施本业务管理系统的阶段性、技术性以及其他经济和人为因素等影响,导致在发展过程中积累了大量采用不同存储方式的业务数据。包括所采用的数据管理系统也大不相同,从简单的文件数据库到复杂的关系数据库,它们构成了企业的异构数据源。异构数据源集成是数据库领域的经典问题。 3.5数据变换 计算机网络的普及,使得数据资源的共享成为一个热门话题。然而,由于时间和空间上的差异,人们使用的数据源各不相同,各信息系统的数据类型、数据访问方式等也都千差万别。这就导致各数据源、系统之间不能高效地进行数据交换与共享,成为“信息孤岛”。 用户在具体应用时,往往又需要将分散的数据按某种需要进行交换,以便了解整体情况。例如,跨国公司的销售数据是分散存放在不同的子公司数据库中,为了解整个公司的销售情况,则需要将所有子系统的数据集中起来。为了满足一些特定需要,如数据仓库和数据挖掘等,也需要将分散的数据交换集中起来,以达到数据的统一和标准化。异构数据的交换问题由此产生,受到越来越多人的重视。 用户在进行数据交换时,面对的数据是千差万别的。产生数据差异的主要原因是数据的结构和语义上的冲突。异构数据不仅指不同的数据库系统之间的异构,如Oracle和SQL Server数据库,还包括不同结构数据之间的异构,如结构化的数据库数据和半结构化的数据。源数据可以是关系型的,也可以是对象型的,更可以是Web页面型和文本型的。因此,要解决数据交换问题,一个重要的问题就是如何消除这种差异。随着数据的大量产生,数据之间的结构和语义冲突问题更加严重,如何有效解决各种冲突问题是数据交换面临的一大挑战。 异构数据交换问题解决后,才会对其他诸如联机分析处理、联机事务处理、数据仓库、数据挖掘和移动计算等提供数据基础。对一些应用,如数据仓库的建立,异构数据交换可以说是生死攸关。数据交换质量的好坏直接影响在交换后数据上其他应用能否有效进行。数据交换后,可以减小由于数据在存储位置上分布造成的数据存取开销;避免不同数据在结构和语义上的差异造成的数据转换引起的错误;数据存放更为精简有效,避免存取不需要的数据;向用户提供一个统一的数据界面等。因此,数据交换对信息化管理的发展意义重大。 3.5.1异构数据分析 异构数据交换的目标在于实现不同数据之间的数据信息资源、设备资源、人力资源的合并和共享。因此,分析异构数据,搞清楚异构数据的特点,把握住异构数据交换过程中的核心问题,是十分必要的。这样研究工作就可以做到有的放矢。 1. 异构数据 数据的异构性导致了应用对于数据交换的需求。什么是异构数据呢?异构数据是一个含义丰富的概念,它是指涉及同一类型但在处理方法上存在各种差异的数据,在内容上,不仅可以指不同的数据库系统之间的数据是异构的(如Oracle和SQL Server数据库中的数据);而且可以指不同结构的数据之间的异构(如结构化的SQL Server数据库数据和半结构化的XML数据)。 总的来说,数据的异构性包括系统异构、数据模型异构和逻辑异构。 1) 系统异构 系统异构是指硬件平台、操作系统、并发控制、访问方式和通信能力等的不同,具体细分如下。 (1) 计算机体系结构的不同,即数据可以分别存在于大型机、小型机、工作站、PC或嵌入式系统中。 (2) 操作系统的不同,即数据的操作系统可以是Microsoft Windows、Windows NT、各种版本的UNIX、IBM OS/2和Macintosh等。 (3) 开发语言的不同,如C、C++、Java和Python等。 (4) 网络平台的不同,如Ethernet、FDDI、ATM、TCP/IP和IPX\\SPX等。 2) 数据模型异构 数据模型异构指对数据库进行管理的系统软件本身的数据模型不同,例如数据交换系统可以采用同为关系数据库系统的Oracle、SQL Server等作为数据模型,也可以采用不同类型的数据库系统——关系、层次、网络、面向对象或函数数据库等。 3) 逻辑异构 逻辑异构包括命名异构、值异构、语义异构和模式异构等。例如语义的异构具体表现在相同的数据形式表示不同的语义,或者同一语义由不同形式的数据表示。 以上这些构成了数据的异构性,数据的异构给行业单位和部门等的信息化管理以及决策分析带来了极大的不便。因此,异构数据交换是否迅速、快捷、可靠就成了行业、单位和部门制约信息化建设的一个瓶颈。 2. 冲突分类 异构数据之间进行数据交换的过程中,要想实现严格的等价交换是比较困难的。主要原因是由于异构数据模型间存在结构和语义的各种冲突,这些冲突主要包括如下。 (1) 命名冲突。命名冲突指源模型中的标识符可能是目的模型中的保留字,这时就需要重新命名。 (2) 格式冲突。同一种数据类型可能有不同的表示方法和语义差异,这时需要定义两种模型之间的变换函数。 (3) 结构冲突。如果两种数据库系统之间的数据定义模型不同,如分别为关系模型和层次模型,那么需要重新定义实体属性和联系,以防止属性或联系信息的丢失。 由于目前主要研究的是关系数据模型间的数据交换问题,根据解决问题的需要,可将上述三大类冲突再次抽象划分为两大冲突: 结构冲突和语义冲突。结构冲突是指需要交换的源数据和目标数据之间在数据项构成的结构上的差异。语义冲突是指属性在数据类型、单位、长度和精度等方面的冲突。 3.5.2异构数据交换策略 异构数据交换技术的研究始于20世纪70年代中期,经过多年对异构数据问题的探索和研究,已取得了不少成果,提出了许多解决异构数据交换的策略及方法,但就其本质可分成4类。 1. 使用软件工具进行转换 一般情况下,数据库管理系统都提供将外部文件中的数据转移到本身数据库表中的数据装入工具。如Oracle提供的将外部文本文件中的数据转移到Oracle数据库表的数据装入工具SQL Loader,Powersoft公司的PowerBuilder中提供的数据管道(Data Pipeline)。 这些数据转移工具可以以多种灵活的方式进行数据转换,而且由于它们是数据库管理系统本身所附带的工具,执行速度快,不需要开放数据库连接(Open Database Connectivity,ODBC)软件支持,在机器没有安装ODBC的情况下也可以方便地使用。 但是,使用这些数据转换工具的缺点是它们不是独立的软件产品,必须首先运行该数据库产品的前端程序才能运行相应的数据转换工具,通常需要几步才能完成,且多用手工方式进行转换。如果目的数据库不是数据转换工具所对应的数据库,数据转换工具就不能再使用。 2. 利用中间数据库的转换 由于缺少工具软件的支持,在开发系统时可使用中间数据库的办法,即在实现两个具体数据库之间转换时,依据关系定义和字段定义,从源数据库中读出数据通过中间数据库灌入到目的数据库中。 这种利用中间数据库的转换办法,所需转换模块少且扩展性强,但缺点是在实现过程中比较复杂,转换质量不高,转换过程长。 3. 设置传送变量的转换 借助数据库应用程序开发工具与数据库连接的强大功能,通过设置源数据库与目的数据库两个不同的传送变量,同时连接两个数据库,实现异构数据库之间的直接转换。这种办法在现有的数据库系统下扩展比较容易,其转换速度和质量大大提高。 4. 通过开发数据库组件的转换 利用Java等数据库应用程序开发技术,通过源数据库与目的数据库组件来存取数据信息,实现异构数据库之间的直接转换。通过组件存取数据,关键是数据信息的类型问题,如果源数据库与目的数据库对应的数据类型不相同,必须先进行类型的转化,然后双方才能实施赋值。 异构数据交换问题,实质上就是: 一个应用的数据可能要重新构造,才能和另一个应用的数据结构匹配,然后被写进另一个数据库。它是数据集成的一个方面,也可以说是数据集成众多表现形式中的一种。 3.5.3异构数据交换技术 实现异构数据交换的方法和技术较多,这里列出XML、本体技术和Web Service等几项技术。 1. 基于XML的异构数据交换技术 1) 可扩展标记语言 可扩展标记语言(Extensible Markup Language,XML)是一种用于标记电子文件使其具有结构性的标记语言。在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含的各种信息,如文章等。 XML提供了一种灵活的数据描述方式。XML支持数据模式、数据内容和数据显示方式三者分离的特点,这使得同一数据内容在不同终端设备上的个性化数据表现形式成为可能,在数据描述方式上可以更加灵活。这使得XML可以为结构化数据、半结构化数据、关系数据库和对象数据库等多种数据源的数据内容加入标记,适于作为一种统一的数据描述工具,扮演异构应用之间数据交换载体或多源异构数据集成全局模式的角色。 2) 基于XML的异构数据交换的总体过程 由于系统的异构性,需要交换的数据具有多个数据源,不同数据源的数据模式可能不同,导致源数据和目标数据在结构上存在差异。 在进行数据交换时,首先必须将数据模型以统一的XML格式来描述,通过定义一种特殊文档DTD(Document Type Definition),从而将源数据库中的数据转换成结构化的XML文档,然后使用文档对象模型(Document Object Model,DOM)技术来解析XML文档,这样就可以将XML文档中的数据存入目标数据库,从而实现了异构数据的交换。 由于DTD文档定义的数据结构与源数据库中的数据结构保持一致,这样保证了生成的XML文档与源数据库中数据保持一致。 基于XML的异构数据交换的总体过程如图3.5所示。 图3.5基于XML的异构数据交换的总体过程 2. 本体技术 本体是对某一领域中的概念及其之间关系的显式描述。本体技术是语义网络的一项关键技术。本体技术能够明确表示数据的语义以及支持基于描述逻辑的自动推理。为语义异构性问题的解决提供了新的思路,对异构数据集成来说有很大的意义。 本体技术也存在一定的问题: 已有关于本体技术的研究都没有充分关注如何利用本体提高数据集成过程和系统维护的自动化程度、降低集成成本、简化人工工作。基于语义进行自动的集成尚处于探索阶段,本体技术还没有真正发挥应有的作用。 3. Web Service技术 Web Service是近年来备受关注的一种分布式计算技术。它是在互联网(Internet)或企业内部网(Intranet)上使用标准的XML和信息格式的全新的技术架构。从用户角度上看,Web Service就是一个应用程序,它只是向外界显现出一个可以调用的应用程序接口(Application Programming Interface,API)。服务请求者能够用非常简便的类似于函数调用的方法通过Web来获得远程服务,服务请求者与服务提供者之间的通信遵循简单对象访问协议(Simple Object Access Protocol,SOAP)。 Web Service体系结构由角色和操作组成。角色主要有服务提供者(Service Provider)、服务请求者(Service Requestor)和服务注册中心(Service Registry)。操作主要有发布(Publish)、发现(Find)、绑定(Bind)、服务(Service)和服务描述(Service Description),Web Service架构如图3.6所示。 图3.6Web Service架构 其中,“发布”是为了让用户或其他服务知道某个Web Service的存在和相关信息,“发现”是为了找到合适的Web Service,“绑定”则是在服务提供者与服务请求者之间建立某种联系。 在异构数据库集成系统中,可以利用Web Service具有的跨平台、完好封装及松散耦合等特性,对每个数据源都为其创建一个Web Service,使用WSDL向服务注册中心注册,然后集成系统就可以向服务注册中心发送查找请求并选择合适的数据源,并通过SOAP从这些数据源获取数据。这样不仅有利于数据集成中系统异构问题的解决,同时也使得数据源的添加和删除变得更加灵活,从而使系统具有松耦合、易于扩展的良好特性,能实现异构数据库的无缝集成。 3.6大数据应用案例: 电影《爸爸去哪儿》大卖有前兆吗 2014年1月25日《爸爸去哪儿》(见图3.7)首映发布会在北京举行。有媒体问郭涛: 电影拍摄期只有5天,你怎么让观众相信,这是一部有品质的电影? 图3.7《爸爸去哪儿》 2014年1月27日,某娱乐频道挂出头条策划——只拍了5天的《爸爸去哪儿》,值得走进电影院吗? 光线传媒总裁王长田解释: 一般的电影只有2~3台摄影机,而《爸爸去哪儿》用了30多台摄影机,所以这5天的拍摄时间,却有10倍的素材量,在剪辑量上,甚至比一般电影还大。 关于这个话题的讨论,看上去好像很多很多,但观众真的很在乎这件事情吗?《爸爸去哪儿》大卖,到底是让大家大跌眼镜的偶然事件,还是早有前兆呢? 1. 真人秀电影5天拍完,观众真的在乎吗 《爸爸去哪儿》是一部真人秀电影,制作流程在中国电影史上也没有可参照对象,但我们依然担心会有很多人贴标签——5天拍完,粗制滥造! 本着危机公关心态出发,伯乐营销做了一次大数据挖掘,想看看到底有多少人在质疑《爸爸去哪儿》“圈钱”的事情,以及在提到这件事情,截至2014年1月11日,新浪微博仅有536人在讨论此话题(含转发人数),而其中还有近一半的人数表示,“圈钱”也要看,“圈钱”也无所谓的态度。比起动辄对影片内容数十万条的讨论和追捧,这个话题讨论量简直是沧海一粟,如图3.8所示。 图3.8网友对“圈钱”的看法 反过来想一想,一部电影拍5年,就值得进电影院了吗?商业电影环境里,观众买单的是结果,而不是努力的过程。 2. 原班人马出演,很重要吗 由热门电视剧改编成电影的项目有很多,这里面有票房大卖的,如《武林外传》和《将爱》,也有票房惨淡的,如《奋斗》《宫锁沉香》和《金太狼的幸福生活》,用比较粗暴的方式分类,前者基本是原班人马出演,而后者的主演都变了,虽然单单看这几个项目,就推出“热门电视剧改编电影+原班人马=票房大卖”未免太粗暴,但不得不说,原班人马对于项目成功一定是加分因素。而通过大数据调查发现,对于《爸爸去哪儿》大电影这个项目来说,原班人马更是至关重要。 当《爸爸去哪儿》大电影项目刚刚曝光,还没有公布主演的短短两三天,在新浪微博上参与“原班人马”的讨论量便已经超过2万条。43.38%的网友表示,原班人马就会看;47.06%的人表示,希望是原班人马出演;9.56%的网友表示,不是原班人马不看。无论是从声量的绝对值上,还是从期待人数的比例上,都能够证明五对星爸和萌娃合体的价值,如图3.9所示。 图3.9是否原班人马调查结果 与此同时,作者也调研了《武林外传》《将爱》《宫锁沉香》和《奋斗》4部电影在新浪微博上对于“原班人马”的讨论,虽然样本比《爸爸去哪儿》大电影小得多,但从分布比例上,能明显看出,《奋斗》和《宫锁沉香》没有使用原班人马,有失人心。成功案例和失败案例分别如图3.10和图3.11所示。 图3.10成功案例 图3.11失败案例3. 谁才是真正的“合家欢” 春节档公映的电影,几乎每一部电影在宣传时,都要给自己贴上“合家欢”电影的标签,“合家欢”真的那么重要吗? 一般每年的春节档都是电影院的业务爆发期,而在这其中最受电影院欢迎的电影就是“合家欢”类型的电影,不难理解,适合全家一起看的,能够带动更多消费,符合这样类型的电影,必然会受电影院的欢迎。以春节档的《大闹天宫》《爸爸去哪儿》《澳门风云》作为调研对象,在新浪微博上抽取以电影名和“全家”为关键词作为讨论的条目,相较于《澳门风云》,《爸爸去哪儿》和《大闹天宫》有着绝对的优势,如图3.12所示。 图3.12谁才是真正的“合家欢”电影 4. 预告片播放量,你注意了吗 数据公司随机抽取了在大年初一公映的4部电影在2014年12月以来发布的一款预告片和一款制作特辑,以腾讯、搜狐、新浪、优酷、土豆五家主流视频网站的播放量为调研对象,可以明显看出《爸爸去哪儿》和《大闹天宫》都是百万量级播放量,在四部电影里占尽优势。因为《大闹天宫》项目启动较早,考虑到预告片在各个平台上的长尾效应,并没有选择《大闹天宫》的首场预告片,而是选择了与其他电影在密集宣传期时相近时间主推的预告片。预告片播放量和花絮播放量如图3.13和图3.14所示。 图3.13预告片播放量 图3.14花絮播放量 5. 春节档,到底最想看什么 其实论来论去,片方最紧张的还是“想看”一部电影的人数,毕竟“想看”这个词,直接和票房挂钩,但这个问题最复杂,因为提供这个数据的维度非常多,有新浪微博上网友直接发出的声音,有业内营销人士非常关心的百度指数,也有像QQ电影票这样和用户购买行为直接相关的App,所以在这个问题上,特地选择了几个不同的平台取样,如图3.15~图3.17所示。 1) 新浪微博 新浪微博数据图如图3.15所示。 图3.15新浪微博数据图