大数据分析技术与应用一站式学习

所谓大数据(Big Data),就是需要处理的数据量非常巨大,已经达到了 TB、PB 甚至 EB、ZB 级别,需要成千上万块硬盘才能存储。传统的技术手段在大数据面前不堪一击,只能探索一套新的解决方案。

这套《大数据技术与应用教程》对大数据处理过程中涉及的各种关键技术做了详细的介绍,包括大数据思维、大数据采集、大数据处理、大数据存储、大数据挖掘、大数据应用等各个环节,帮助初学者规划了一条完整的学习路线。

这套教程只是一本入门指南手册,目的是给初学者指引方向,它虽然讲解了大数据的各种技术,但并不非常深入。对于大数据开发人员,还需要结合其它教程深度学习;对于大数据从业者,这些知识已经足够了。

大数据本身是一个抽象的概念。从一般意义上讲,大数据是指无法在有限时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。

目前,业界对大数据还没有一个统一的定义,但是大家普遍认为,大数据具备 Volume、Velocity、Variety 和 Value 四个特征,简称“4V”,即数据体量巨大、数据速度快、数据类型繁多和数据价值密度低,如图 1 所示。下面分别对每个特征作简要描述。

图片[1]-大数据分析技术与应用一站式学习
图 1  大数据特征

1)Volume:表示大数据的数据体量巨大。

数据集合的规模不断扩大,已经从 GB 级增加到 TB 级再增加到 PB 级,近年来,数据量甚至开始以 EB 和 ZB 来计数。

例如,一个中型城市的视频监控信息一天就能达到几十 TB 的数据量。百度首页导航每天需要提供的数据超过 1-5PB,如果将这些数据打印出来,会超过 5000 亿张 A4 纸。图 2 展示了每分钟互联网产生的各类数据的量。

图片[2]-大数据分析技术与应用一站式学习
图 2  互联网每分钟产生的数据

2)Velocity:表示大数据的数据产生、处理和分析的速度在持续加快。

加速的原因是数据创建的实时性特点,以及将流数据结合到业务流程和决策过程中的需求。数据处理速度快,处理模式已经开始从批处理转向流处理。

业界对大数据的处理能力有一个称谓——“ 1 秒定律”,也就是说,可以从各种类型的数据中快速获得高价值的信息。大数据的快速处理能力充分体现出它与传统的数据处理技术的本质区别。

3)Variety:表示大数据的数据类型繁多。

传统 IT 产业产生和处理的数据类型较为单一,大部分是结构化数据。随着传感器、智能设备、社交网络、物联网、移动计算、在线广告等新的渠道和技术不断涌现,产生的数据类型无以计数。

现在的数据类型不再只是格式化数据,更多的是半结构化或者非结构化数据,如 XML、邮件、博客、即时消息、视频、照片、点击流、 日志文件等。企业需要整合、存储和分析来自复杂的传统和非传统信息源的数据,包括企业内部和外部的数据。

4)Value:表示大数据的数据价值密度低。

大数据由于体量不断加大,单位数据的价值密 度在不断降低,然而数据的整体价值在提高。以监控视频为例,在一小时的视频中,有用的数据可能仅仅只有一两秒,但是却会非常重要。现在许多专家已经将大数据等同于黄金和石油,这表示大数据当中蕴含了无限的商业价值。

根据中商产业研究院发布的《2018-2023 年中国大数据产业市场前景及投资机会研究报告》显示,2017 年中国大数据产业规模达到 4700 亿元,同比增长 30%。随着大数据在各行业的融合应用不断深化,预计 2018 年中国大数据市场产值将突破 6000 亿元达到 6200 亿元。

通过对大数据进行处理,找出其中潜在的商业价值,将会产生巨大的商业利润。

近年来,信息技术迅猛发展,尤其是以互联网、物联网、信息获取、社交网络等为代表的技术日新月异,促使手机、平板电脑、pc 等各式各样的信息传感器随处可见,虚拟网络快速发展,现实世界快速虚拟化,数据的来源及其数量正以前所未有的速度增长。

伴随着云计算、大数据、物联网、人工智能等信息技术的快速发展和传统产业数字化的转型,数据量呈现几何级增长,根据市场研究资料显示,全球数据总量将从 2016 年的 16.1ZB 增长到 2025 年的 163ZB (约合 180 万亿 GB),十年内将有 10 倍的增长,复合增长率为 26%,如图 1 所示。

若以现有的蓝光光盘为计量标准,那么 40ZB 的数据全部存入蓝光光盘,所需要的光盘总重量将达到 424 艘尼米兹号航母的总重量。而这些数据中,约 80% 是非结构化或半结构化类型的数据,甚至更有一部分是不断变化的流数据。因此,数据的爆炸性增长态势,以及其数据构成特点使得人们进入了“大数据”时代。

图片[3]-大数据分析技术与应用一站式学习
图 1  2016-2025 年全球数据产量及预测

如今,大数据已经被赋予多重战略含义。

在资源的角度,数据被视为“未来的石油”,被作为战略性资产进行管理。

在国家治理角度,大数据被用来提升治理效率,重构治理模式,破解治理难题,它将掀起一场国家治理革命。

在经济增长角度,大数据是全球经济低迷环境下的产业亮点,是战略新兴产业的最活跃部分。

在国家安全角度,全球数据空间没有国界边疆,大数据能力成为大国之间博弈和较量的利器。

总之,国家竞争焦点将从资本、土地、人口、资源转向数据空间,全球竞争版图将分成新的两大阵营:数据强国与数据弱国。

从宏观上看,由于大数据革命的系统性影响和深远意义,主要大国快速做出战略响应,将大数据置于非常核心的位置,推出国家级创新战略计划。

美国 2012 年发布了《大数据研究和发展计划》,并成立“大数据高级指导小组”,2013 年又推出“数据一知识一行动”计划,2014 年进一步发布《大数据:把握机遇,维护价值》政策报告,启动“公开数据行动”,陆续公开 50 个门类的政府数据,鼓励商业部门进行开发和创新。

欧盟正在力推《数据价值链战略计划》;英国发布了《英国数据能力发展战略规划》;日本发布了《创建最尖端 IT 国家宣言》;韩国提出了“大数据中心战略”。中国多个省市发布了大数据发展战略,国家层面的《关于促进大数据发展的行动纲要》也于 2015 年 8 月 19 日正式通过。

从微观上看,大数据重塑了企业的发展战略和转型方向。

美国的企业以 GE 提出的“工业互联网”为代表,提出智能机器、智能生产系统、智能决策系统,将逐渐取代原有的生产体系,构成一个“以数据为核心”的智能化产业生态系统。

德国的企业以“工业 4.0”为代表,要通过信息物理系统(Cyber Physical System, CPS)把一切机器、物品、人、服务、建筑统统连接起来,形成一个高度整合的生产系统。

中国的企业以阿里巴巴提出的“DT 时代”(Data Technology)为代表,认为未来驱动发展的不再是石油、钢铁,而是数据。

这 3 种新的发展理念可谓异曲同工、如出一辙,共同宣告“数据驱动发展”成为时代主题。

与此同时,大数据也是促进国家治理变革的基础性力量。正如《大数据时代》的作者舍恩伯格在定义中所强调的:“大数据是人们在大规模数据的基础上可以做到的事情,而这些事情在小规模数据的基础上是无法完成的。”

在国家治理领域,大数据为解决以往的“顽疾”和 “痛点”,提供了强大支撑,如建设阳光政府、责任政府、智慧政府;大数据使以往无法实现的环节变得简单、可操作,如精准医疗、个性化教育、社会监管、舆情监测预警。

大数据也使一些新的主题成为国家治理的重点,如维护数据主权、开放数据资产、保持在数字空间的国家竞争力等。

中国具备成为数据强国的优势。中国的数据量在 2013 年已达到 576EB,到 2020 年这个数字将会达到 8.06ZB,增长超过 12 倍。

从全球占比来看,中国成为数据强国的潜力极为突岀,2010 年中国数据占全球数据的比例为 10%,2013 年占比为 13%,2020 年占比将达到 18%,如图 2 所示。

图片[4]-大数据分析技术与应用一站式学习
图 2  2010-2020年中国数据的全球占比

届时,中国的数据规模将超过美国位居世界第一。中国成为数据大国并不奇怪,因为中国是人口大国、制造业大国、互联网大国、物联网大国,这都是最活跃的数据生产主体,未来几年,中国成为数据大国也是逻辑上的必然结果。

大数据的产生

从采用数据库作为数据管理的主要方式开始,人类社会的数据产生方式大致经历了 3 个阶段,而正是数据产生方式的巨大变化才最终导致大数据的产生。

1)运营式系统阶段。

数据库的出现使得数据管理的复杂度大大降低,在实际使用中,数据库大多为运营系统所采用,作为运营系统的数据管理子系统,如超市的销售记录系统、银行的交易记录系统、医院病人的医疗记录等。

人类社会数据量的第一次大的飞跃正是在运营式系统开始广泛使用数据库时开始的。这个阶段的最主要特点是,数据的产生往往伴随着一定的运营活动;而且数据是记录在数据库中的,例如,商店每售出一件产品就会在数据库中产生一条相应的销售记录。这种数据的产生方式是被动的。

2)用户原创内容阶段。

互联网的诞生促使人类社会数据量出现第二次大的飞跃,但是真正的数据爆发产生于 Web 2.0 时代,而 Web 2.0 的最重要标志就是用户原创内容。这类数据近几年一直呈现爆炸性的增长。

主要有以下两个方面的原因。

  • 是以博客、微博和微信为代表的新型社交网络的岀现和快速发展,使得用户产生数据的意愿更加强烈。
  • 是以智能手机、平板电脑为代表的新型移动设备的出现,这些易携带、全天候接入网络的移动设备使得人们在网上发表自己意见的途径更为便捷。这个阶段的数据产生方式是主动的。

3)感知式系统阶段。

人类社会数据量第三次大的飞跃最终导致了大数据的产生,今天我们正处于这个阶段。这次飞跃的根本原因在于感知式系统的广泛使用。

随着技术的发展,人们已经有能力制造极其微小的带有处理功能的传感器,并开始将这些设备广泛地布置于社会的各个角落,通过这些设备来对整个社会的运转进行监控。这些设备会源源不断地产生新数据,这种数据的产生方式是自动的。

简单来说,数据产生经历了被动、主动和自动三个阶段。这些被动、主动和自动的数据共同构成了大数据的数据来源,但其中自动式的数据才是大数据产生的最根本原因。

大数据的作用

大数据虽然孕育于信息通信技术,但它对社会、经济、生活产生的影响绝不限于技术层面。更本质上,它是为我们看待世界提供了一种全新的方法,即决策行为将日益基于数据分析,而不是像过去更多凭借经验和直觉。具体来讲,大数据将有以下作用。

1)对大数据的处理分析正成为新一代信息技术融合应用的结点。

移动互联网、物联网、社交网络、数字家庭、电子商务等是新一代信息技术的应用形态,这些应用不断产生大数据。

云计算为这些海量、多样化的大数据提供存储和运算平台。通过对不同来源数据的管理、处理、分析与优化,将结果反馈到上述应用中,将创造出巨大的经济和社会价值,大数据具有催生社会变革的能量。

2)大数据是信息产业持续高速增长的新引擎。

面向大数据市场的新技术、新产品、新服务、新业态会不断涌现。

在硬件与集成设备领域,大数据将对芯片、存储产业产生重要影响,还将催生出一体化数据存储处理服务器、内存计算等市场。

在软件与服务领域,大数据将引发数据快速处理分析技术、数据挖掘技术和软件产品的发展。

3)大数据利用将成为提高核心竞争力的关键因素。

各行各业的决策正在从“业务驱动”向“数据驱动”转变。

在商业领域,对大数据的分析可以使零售商实时掌握市场动态并迅速做出应对,可以为商家制定更加精准有效的营销策略提供决策支持,可以帮助企业为消费者提供更加及时和个性化的服务。

在医疗领域,可提高诊断准确性和药物有效性。

在公共事业领域,大数据也开始发挥促进经济发展、维护社会稳定等方面的重要作用。

4)大数据时代,科学研究的方法手段将发生重大改变。

例如,抽样调查是社会科学的基本研究方法,在大数据时代,研究人员可通过实时监测、跟踪研究对象在互联网上产生的海量行为数据,进行挖掘分析,揭示出规律性的东西,提出研究结论和对策。

大数据时代的到来改变了人们的生活方式、思维模式和研究范式,我们可以总结出 10 个重大变化,如图 1 所示。

图片[5]-大数据分析技术与应用一站式学习
图 1  大数据时代的 10 个重大变化

对研究范式的新认识:从第三范式到第四范式

2007 年 1 月,图灵奖得主、关系型数据库鼻祖 JimGray 发表演讲,他凭着自己对于人类科学发展特征的深刻洞察,敏锐地指出科学的发展正在进入“数据密集型科学发现范式”——科学史上的“第四范式”。

在他看来,人类科学研究活动已经历过三种不同范式的演变过程。

“第一范式”是指原始社会的“实验科学范式”。18 世纪以前的科学进步均属于此列,其核心特征是对有限的客观对象进行观察、总结、提炼,用归纳法找出其中的科学规律,如伽利略提出的物理学定律。

“第二范式”是指 19 世纪以来的理论科学阶段,以模型和归纳为特征的“理论科学范式”。其核心特征是以演绎法为主,凭借科学家的智慧构建理论大厦,如爱因斯坦提出的相对论、麦克斯方程组、量子理论和概率论等。

“第三范式”是指 20 世纪中期以来的计算科学阶段的“计算科学范式”。面对大量过于复杂的现象,归纳法和演绎法都难以满足科学研究的需求,人类开始借助计算机的高级运算能力对复杂现象进行建模和预测,如天气、地震、核试验、原子的运动等。

然而,随着近年来人类采集数据量的爆炸性增长,传统的计算科学范式已经越来越无力驾驭海量的科研数据了。例如,欧洲的大型粒子对撞机、天文领域的 Pan-STARRS 望远镜每天产生的数据多达几千万亿字节(PB)。很明显,这些数据已经突破了“第三范式”的处理极限,无法被科学家有效利用。

正因为如此,目前正在从“计算科学范式”转向“数据密集型科学发现范式”。

“第四范式”的主要特点是科学研究人员只需要从大数据中查找和挖掘所需要的信息和知识,无须直接面对所研究的物理对象。例如,在大数据时代,天文学家的研究方式发生了新的变化,其主要研究任务变为从海量数据库中发现所需的物体或现象的照片,而不再需要亲自进行太空拍照。

对数据重要性的新认识:从数据资源到数据资产

在大数据时代,数据不仅是一种“资源”,更是一种重要的“资产”。因此,数据科学应把数据当作一种“资产”来管理,而不能仅仅当作“资源”来对待。也就是说,与其他类型的资产相似,数据也具有财务价值,且需要作为独立实体进行组织与管理。

大数据时代的到来,让“数据即资产”成为最核心的产业趋势。在这个“数据为王”的时代,回首信息产业发展的起起伏伏,我们发现产业兴衰的决定性因素,已不是土地、人力、技术、资本这些传统意义上的生产要素,而是曾经被一度忽视的“数据资产”。

世界经济论坛报告曾经预测称,“未来的大数据将成为新的财富高地,其价值可能会堪比石油”,而大数据之父维克托也乐观地表示,“数据列入企业资产负债表只是时间问题”。

“数据成为资产”是互联网泛在化的一种资本体现,它让互联网不仅具有应用和服务本身的价值,而且具有了内在的“金融”价值。数据不再只是体现于“使用价值”方面的产品,而成为实实在在的“价值”。

目前,作为数据资产先行者的 IT 企业,如苹果、谷歌、IBM、阿里、腾讯、百度等,无不想尽各种方式,挖掘多种形态的设备及软件功能,收集各种类型的数据,发挥大数据的商业价值,将传统意义上的 IT 企业,打造成为“终端+应用+平台+数据”四位一体的泛互联网化企业,以期在大数据时代获取更大的收益。

大数据资产的价值的衡量尺度主要有以下 3 个方面的标准。

1)独立拥有及控制数据资产

目前,数据的所有权问题在业界还比较模糊。从拥有和控制的角度来看,数据可以分为 Ⅰ 型数据、Ⅱ 型数据和 Ⅲ 型数据。

Ⅰ 型数据主要是指数据的生产者自己生产出来的各种数据,例如,百度对使用其搜索引擎的用户的各种行为进行收集、整理和分析,这类数据虽然由用户产生,但产权却属于生产者,并最大限度地发挥其商业价值。

Ⅱ 型数据又称为入口数据,例如,各种电子商务营销公司通过将自身的工具或插件植入电商平台,来为其提供统计分析服务,并从中获取各类经营数据。虽然这些数据的所有权并不属于这些公司,在使用时也有一些规则限制,但是它们却有着对数据实际的控制权。

相比于前两类数据,Ⅲ 型数据的产权情况比较复杂,它们主要依靠网络爬虫,甚至是黑客手段获取数据。与 Ⅰ 型和 Ⅱ 型数据不同的是,这些公司流出的内部数据放在网上供人付费下载。这种数据在当前阶段,还不能和资产完全画等号。

2)计量规则与货币资本类似

大数据要实现真正的资产化,用货币对海量数据进行计量是一个大问题。尽管很多企业都意识到数据作为资产的可能性,但除了极少数专门以数据交易为主营业务的公司外,大多数公司都没有为数据的货币计量做出适当的账务处理。

虽然数据作为资产尚未在企业财务中得到真正的引用,但将数据列入无形资产比较有利。

考虑到研发因素,很多高科技企业都具有较长的投入产出期,可以让那些存储在硬盘上的数据直接进入资产负债表。对于通过交易手段获得的数据,可以按实际支付价款作为入账价值计入无形资产,从而为企业形成有效税盾,降低企业实际税负。

3)具有资本一般的增值属性

资本区别于一般产品的特征在于,它具有不断增值的可能性。只有能够利用数据、组合数据、转化数据的企业,他们手中的大数据资源才能成为数据资产。

目前,直接利用数据为企业带来经济利益的方法主要有数据租售、信息租售、数据使能三种模式。

  • 数据租售主要通过对业务数据进行收集、整理、过滤、校对、打包、发布等一系列操作,实现数据內在的价值。
  • 信息租售则通过聚焦行业焦点,收集相关数据,深度整合、萃取及分析,形成完整数据链条,实现数据的资产转化。
  • 数据使能是指类似于阿里这样的互联网公司通过提供大量的金融数据挖掘及分析服务,为传统金融行业难以下手的小额贷款业务开创新的行业增长点。

总而言之,作为信息时代核心的价值载体,大数据必然具有朝向价值本体转化的趋势,而它的“资产化”,或者未来更进一步的“资本化”蜕变,将为未来完全信息化、泛互联网化的商业模式打下基础。

对方法论的新认识:从基于知识到基于数据

传统的方法论往往是“基于知识”的,即从“大量实践(数据)”中总结和提炼出一般性知识(定理、模式、模型、函数等)之后,用知识去解决(或解释)问题。因此,传统的问题解决思路是“问题→知识→问题”,即根据问题找“知识”,并用“知识”解决“问题”。

然而,数据科学中兴起了另一种方法论——“问题→数据→问题”,即根据“问题”找“数据”,并直接用“数据”(在不需要把“数据”转换成“知识”的前提下)解决“问题”,如图 2 所示。

图片[6]-大数据分析技术与应用一站式学习
图 2  传统思维与大数据思维的比较

对数据分析的新认识:从统计学到数据科学

在传统科学中,数据分析主要以数学和统计学为直接理论工具。但是,云计算等计算模式的出现及大数据时代的到来,提升了我们对数据的获取、存储、计算与管理能力,进而对统计学理论与方法产生了深远影响。大数据带给我们 4 个颠覆性的观念转变。

1)不是随机样本,而是全体数据

在大数据时代,我们可以分析更多的数据,有时候甚至可以处理和某个特别现象相关的所有数据,而不再依赖于随机采样。

以前我们通常把随机采样看成是理所应当的限制,但是真正的大数据时代是指不用随机分析法这样的捷径,而采用对所有数据进行分析的方法,通过观察所有数据,来寻找异常值进行分析。

例如,信用卡诈骗是通过异常情况来识别的,只有掌握了所有数据才能做到这一点。在这种情况下,异常值是最有用的信息,可以把它与正常交易情况作对比从而发现问题。

2)不是纯净性,而是混杂性

数据量的大幅增加会造成一些错误的数据混进数据集。但是,正因为我们掌握了几乎所有的数据,所以我们不再担心某个数据点对整套分析的不利影响。

我们要做的就是要接受这些纷繁的数据并从中受益,而不是以高昂的代价消除所有的不确定性。这就是由“小数据”到“大数据”的改变。

3)不是精确性,而是趋势

研究数据如此之多,以至于我们不再热衷于追求精确度。之前需要分析的数据很少,所以我们必须尽可能精确地量化我们的记录,但随着规模的扩大,对精确度的痴迷将减弱。

拥有了大数据,我们不再需要对一个现象刨根问底,只要掌握了大体的发展方向即可,适当忽略微观层面上的精确度,会让我们在宏观层面拥有更好的洞察力。

例如,微信朋友圈中朋友发动态的时间,在一小时以内的会显示多少分钟之前,在一小时以外的就只显示几小时前;微信公众号中显示的阅读量,超过十万以后显示的就是 100000+,而不是具体数据,因为超过十万的阅读量已经让我们觉得这篇文章很优秀了,没必要精确。

4)不是因果关系,而是相关关系

在数据科学中,广泛应用“基于数据”的思维模式,重视对“相关性”的分析,而不是等到发现“真正的因果关系”之后才解决问题。

在大数据时代,人们开始重视相关分析,而不仅仅是因果分析。我们无须再紧盯事物之间的因果关系,而应该寻找事物之间的相关关系。相关关系也许不能准确地告诉我们某件事情为何会发生,但是它会告诉我们某件事情已经发生了。

在大数据时代,我们不必非得知道现象背后的原因,而是要让数据自己发声。知道是什么就够了,没必要知道为什么。例如,知道用户对什么感兴趣即可,没必要去研究用户为什么感兴趣。

相关关系的核心是量化两个数据值之间的数据关系。相关关系强是指当一个数据值增加时,其他数据值很有可能也会随之增加。相关关系是通过识别关联物来帮助我们分析某一现象的,而不是揭示其内部的运作。

通过找到一个现象良好的关联物,相关关系可以帮助我们捕捉现在和预测未来。例如,如果川和万经常一起发生,我们只需要注意方是否发生,就可以预测力是否也发生了。

对计算智能的新认识:从复杂算法到简单算法

“只要拥有足够多的数据,我们可以变得更聪明”是大数据时代的一个新认识。因此,在大数据时代,原本复杂的“智能问题”变成简单的“数据问题”。

只要对大数据进行简单查询就可以达到“基于复杂算法的智能计算的效果”。为此,很多学者曾讨论过一个重要话题——“大数据时代需要的是更多的数据还是更好的模型?”

机器翻译是传统自然语言技术领域的难点,虽曾提出过很多种算法,但应用效果并不理想。IBM 有能力将《人民日报》历年的文本输入电脑,试图破译中文的语言结构。

例如,实现中文的语音输入或者中英互译,这项技术在 20 世纪 90 年代就取得突破,但进展缓慢,在应用中还是有很多问题。近年来,Google 翻译等工具改变了“实现策略”,不再依靠复杂算法进行翻译,而是通过对他们之前收集的跨语言语料库进行简单查询的方式,提升了机器翻译的效果和效率。

他们并不教给电脑所有的语言规则,而是让电脑自己去发现这些规则。电脑通过分析经过人工翻译的数以千万计的文件来发现其中的规则。这些翻译结果源自图书、各种机构(如联合国)及世界各地的网站。

他们的电脑会扫描这些语篇,从中寻找在统计学上非常重要的模式,即翻译结果和原文之间并非偶然产生的模式。一旦电脑找到了这些模式,今后它就能使用这些模式来翻译其他类似的语篇。

通过数十亿次重复使用,就会得出数十亿种模式及一个异常聪明的电脑程序。但是对于某些语言来说,他们能够使用到的已翻译完成的语篇非常少,因此 Google 的软件所探测到的模式就相对很少。这就是为什么 Google 的翻译质量会因语言对的不同而不同。

通过不断向电脑提供新的翻译语篇,Google 就能让电脑更加聪明,翻译结果更加准确。

对管理目标的新认识:从业务数据化到数据业务化

在传统数据管理中,企业更加关注的是业务的数据化问题,即如何将业务活动以数据方式记录下来,以便进行业务审计、分析与挖掘。

在大数据时代,企业需要重视一个新的课题——数据业务化,即如何“基于数据”动态地定义、优化和重组业务及其流程,进而提升业务的敏捷性,降低风险和成本。业务数据化是前提,而数据业务化是目标。

电商的经营模式与实体店最本质的区别是,电商每卖出一件产品,都会留存一条详尽的数据记录。也正是因为可以用数字化的形式保留每一笔销售的明细,电商可以清楚地掌握每一件商品到底卖给了谁。

此外,依托互联网这个平台,电商还可以记录每一个消费者的鼠标单击记录、网上搜索记录。所有这些记录形成了一个关于消费者行为的实时数据闭环,通过这个闭环中源源不断产生的新鲜数据,电商可以更好地洞察消费者,更及时地预测其需求的变化,经营者和消费者之间因此产生了很强的黏性。

线下实体商店很难做到这一点,他们可能只知道一个省、一个市或者一个地区卖了多少商品,但是,他们很难了解到所生产、经营的每一件商品究竟卖到了哪一个具体的地方、哪一个具体的人,这个人还买了其他什么东西、查看了哪些商品、可能会喜欢什么样的商品。

也就是说,线下实体店即使收集了一些数据,但其数据的粒度、宽度、广度和深度都非常有限。由于缺乏足够的数据,实体店对自己的经营行为,对消费者的洞察力,以及和消费者之间的黏性都十分有限。

就此而言,一家电商和一家线下实体店最本质的区别就是是否保存了足够的数据。其实,这正是互联网化的核心和本质,即“数据化”。这并不是一个简单的数据化,而是所有业务的过程都要数据化,即把所有的业务过程记录下来,形成一个数据的闭环,这个闭环的实时性和效率是关键的指标。这个思想就是一切业务都要数据化。

在大数据时代,企业不仅仅是把业务数据化,更重要的是把数据业务化,也就是把数据作为直接生产力,将数据价值直接通过前台产品作用于消费者。

数据可以反映用户过去的行为轨迹,也可以预测用户将来的行为倾向。比较好理解的一个实例就是关联推荐,当用户买了一个商品之后,可以给用户推荐一个最有可能再买的商品。个性化是数据作为直接生产力的一个具体体现。

随着数据分析工具与数据挖掘渠道的日益丰富与多样化,数据存量越来越大,数据对企业也越来越重要。数据业务化能够给企业带来的业务价值主要包括以下几点:提高生产过程的资源利用率,降低生产成本;根据商业分析提高商业智能的准确率,降低传统“凭感觉”做决策的业务风险;动态价格优化利润和增长;获取优质客户。

目前,越来越多的企业级用户已经考虑从批量分析向近实时分析发展,从而提高 IT 创造价值的能力。同时,数据分析在快速从商业智能向用户智能发展。数据业务化可以让数据给企业创造额外收益和价值。

对决策方式的新认识:从目标驱动型到数据驱动型

传统科学思维中,决策制定往往是“目标”或“模型”驱动的,也就是根据目标(或模型)进行决策。然而,大数据时代出现了另一种思维模式,即数据驱动型决策,数据成为决策制定的主要“触发条件”和“重要依据”。

小数据时代,企业讨论什么事情该做不该做,许多时候是凭感觉来决策的,流程如图 3 所示,由两个环节组成:一个是拍脑袋,另一个是研发功能。

图片[7]-大数据分析技术与应用一站式学习
图 3  产品迭代的错误流程

基本上就是产品经理通过一些调研,想了一个功能,做了设计。下一步就是把这个功能研发出来,然后看一下效果如何,再做下一步。

整个过程都是凭一些感觉来决策。这种方式总是会出现问题,很容易走一些弯路,很有可能做出错误的决定。

数据驱动型决策加入了数据分析环节,如图 4 所示。

基本流程就是企业有一些点子,通过点子去研发这些功能,之后要进行数据收集,然后进行数据分析。基于数据分析得到一些结论,然后基于这些结论,再去进行下一步的研发。整个过程就形成了一个循环。在这种决策流程中,人为的因素影响越来越少,而主要是用一种科学的方法来进行产品的迭代。

图片[8]-大数据分析技术与应用一站式学习
图 4  数据驱动的产品迭代流程

例如,一个产品的界面到底是绿色背景好还是蓝色背景好,从设计的层面考虑,两者是都有可能的。那么就可以做一下 A/B 测试。

可以让 50% 的人显示绿色背景,50% 的人显示蓝色背景,然后看用户点击量。哪个点击比较多,就选择哪个。这就是数据驱动,这样就转变成不是凭感觉,而是通过数据去决策。

相比于基于本能、假设或认知偏见而做出的决策,基于证据的决策更可靠。通过数据驱动的方法,企业能够判断趋势,从而展开有效行动,帮助自己发现问题,推动创新或解决方案的出现。

对产业竞合关系的新认识:从以战略为中心到以数据为中心

在大数据时代,企业之间的竞合关系发生了变化,原本相互竞争,甚至不愿合作的企业,不得不开始合作,形成新的业态和产业链。

所谓竞合关系,即在竞争中合作,在合作中竞争。它的核心思想主要体现在两个方面:创造价值与争夺价值。创造价值是个体之间相互合作、共创价值的过程;争夺价值则是个体之间相互竞争、分享价值的过程。

竞合的思想就是要求所有参与者共同把蛋糕做大,每个参与者最终分得的部分都会相应增加。

传统的竞合关系以战略为中心,德国宝马汽车公司和戴姆勒公司旗下的奔驰品牌在整车制造领域存在着品牌竞争,但双方不仅共同开发、生产及采购汽车零部件,而且在混合动力技术——领域进行研究合作。

为了能够在激烈的市场竞争中获取优势,两家公司通过竞合战略,互通有无、共享资源,从而在汽车业整体利润下滑的趋势下获得相对较好的收益,最终取得双赢。

在大数据时代,竞合关系是以数据为中心的。数据产业就是从信息化过程累积的数据资源中提取有用信息进行创新,并将这些数据创新赋予商业模式。

这种由大数据创新所驱动的产业化过程具有“提升其他产业利润”的特征,除了能探索新的价值发现、创造与获取方式以谋求本身发展外,还能帮助传统产业突破瓶颈、升级转型,是一种新的竞合关系,而非一般观点的“新兴科技催生的经济业态与原有经济业态存在竞争关系”。

所以,数据产业培育围绕传统经济升级转型,依附传统行业企业共生发展,是最好的发展策略。例如,近年来发展火热的团购,就是数据产业帮助传统餐饮业、旅游业和交通行业的升级转型。提供团购业务的企业在获得收益的同时,也提高了其他传统行业的效益。

但是,传统企业与团购企业也存在着一定的竞争关系。传统企业在与团购企业合作的过程中,也尽力防止自己的线下业务全部转为自己不能掌控的团购企业。

团购网站为了能获得更广的用户群、更大的流量来提升自己的市场地位,除了自身扩展商户和培养网民习惯之外,还纷纷采取了合纵连横的发展战略。

聚划算、京东团购、当当团购、58 团购等纷纷开放平台,吸引了千品网、高朋、满座、窝窝等团购网站的入驻,投奔平台正在成为行业共识。

对于独立团购网站来说,入驻电商平台不仅能带来流量,电商平台在实物销售上的积累对其实物团购也有一定的促进作用。

对数据复杂性的新认识:从不接受到接受数据的复杂性

在传统科学看来,数据需要彻底“净化”和“集成”,计算目的是需要找出“精确答案”,而其背后的哲学是“不接受数据的复杂性”。

然而,大数据中更加强调的是数据的动态性、异构性和跨域等复杂性,开始把“复杂性”当作数据的一个固有特征来对待,组织数据生态系统的管理目标开始转向将组织处于混沌边缘状态。

在小数据时代,对于数据的存储与检索一直依赖于分类法和索引法的机制,这种机制是以预设场域为前提的。这种结构化数据库的预设场域能够卓越地展示数据的整齐排列与准确存储,与追求数据的精确性目标是完全一致的。

在数据稀缺与问题清晰的年代,这种基于预设的结构化数据库能够有效地回答人们的问题,并且这种数据库在不同的时间能够提供一致的结果。

面对大数据,数据的海量、混杂等特征会使预设的数据库系统崩溃。其实,数据的纷繁杂乱才真正呈现出世界的复杂性和不确定性特征,想要获得大数据的价值,承认混乱而不是避免混乱才是一种可行的路径。

为此,伴随着大数据的涌现,出现了非关系型数据库,它不需要预先设定记录结构,而且允许处理各种各样形形色色参差不齐的数据。

因为包容了结构的多样性,这些无须预设的非关系型数据库设计能够处理和存储更多的数据,成为大数据时代的重要应对手段。

在大数据时代,海量数据的涌现一定会增加数据的混乱性且会造成结果的不准确性,如果仍然依循准确性,那么将无法应对这个新的时代。

大数据通常都用概率说话,与数据的混杂性可能带来的结果错误性相比,数据量的扩张带给我们的新洞察、新趋势和新价值更有意义。

因此,与致力于避免错误相比,对错误的包容将会带给我们更多信息。其实,允许数据的混杂性和容许结果的不精确性才是我们拥抱大数据的正确态度,未来我们应当习惯这种思维。

对数据处理模式的新认识:从小众参与到大众协同

在传统科学中,数据的分析和挖掘都是具有很高专业素养的“企业核心员工”的事情,企业管理的重要目的是如何激励和考核这些“核心员工”。

但是,在大数据时代,基于“核心员工”的创新工作成本和风险越来越大,而基于“专家余(Pro-AmT 的大规模协作日益受到重视,正成为解决数据规模与形式化之间矛盾的重要手段。

大规模生产让数以百计的人买得起商品,但商品本身却是一模一样的。

企业面临这样一个矛盾:定制化的产品更能满足用户的需求,但却非常昂贵;与此同时,量产化的商品价格低廉,但无法完全满足用户的需求。

如果能够做到大规模定制,为大量用户定制产品和服务,则能使产品成本低,又兼具个性化,从而使企业有能力满足要求,但价格又不至于像手工制作那般让人无法承担。

因此,在企业可以负担得起大规模定制带来的高成本的前提下,要真正做到个性化产品和服务,就必须对用户需求有很好的了解,这就需要用户提前参与到产品设计中。

在大数据时代,用户不再仅仅热衷于消费,他们更乐于参与到产品的创造过程中,大数据技术让用户参与创造与分享成果的需求得到实现。

市场上传统的著名品牌越来越重视从用户的反馈中改进产品的后续设计和提高用户体验,例如,“小米”这样的新兴品牌建立了互联网用户粉丝论坛,让用户直接参与到新产品的设计过程之中,充分发挥用户丰富的想象力,企业也能直接了解他们的需求。

大众协同的另一个方面就是企业可以利用用户完成数据的采集,如实时车辆交通数据采集商 Inrix。该公司目前有一亿个手机端用户,Inrix 的软件可以帮助用户避开堵车,为用户呈现路的热量图。

提供数据并不是这个产品的特色,但值得一提的是,Inrix 并没有用交警的数据,这个软件的每位用户在使用过程中会给服务器发送实时数据,如速度和位置,这样每个用户都是探测器。使用该服务的用户越多,Inrix 获得的数据就越多,从而可以提供更好的服务。

整个大数据的处理流程可以定义为,在合适工具的辅助下,对广泛异构的数据源进行抽取和集成,将结果按照一定的标准进行统一存储,然后利用合适的数据分析技术对存储的数据进行分析,从中提取有益的知识,并利用恰当的方式将结果展现给终端用户。

具体来讲,大数据处理的基本流程可以分为数据抽取与集成、数据分析和数据解释等步骤。

数据抽取与集成

大数据的一个重要特点就是多样性,这就意味着数据来源极其广泛,数据类型极为繁杂。这种复杂的数据环境给大数据的处理带来极大的挑战。

要想处理大数据,首先必须对所需数据源的数据进行抽取和集成,从中提取出数据的实体和关系,经过关联和聚合之后采用统一定义的结构来存储这些数据。

在数据集成和提取时,需要对数据进行清洗,保证数据质量及可信性。同时还要特别注意大数据时代数据模式和数据的关系,大数据时代的数据往往是先有数据再有模式,并且模式是在不断的动态演化之中的。

数据抽取和集成技术并不是一项全新的技术,在传统数据库领域此问题就已经得到了比较成熟的研究。随着新的数据源的涌现,数据集成方法也在不断的发展之中。

从数据集成模型来看,现有的数据抽取与集成方式可以大致分为 4 种类型:基于物化或 ETL 方法的引擎、基于联邦数据库或中间件方法的引擎、基于数据流方法的引擎,以及基于搜索引擎的方法。

数据分析

数据分析是整个大数据处理流程的核心,大数据的价值产生于分析过程。

从异构数据源抽取和集成的数据构成了数据分析的原始数据。根据不同应用的需求可以从这些数据中选择全部或部分进行分析。

小数据时代的分析技术,如统计分析、数据挖掘和机器学习等,并不能适应大数据时代数据分析的需求,必须做出调整。大数据时代的数据分析技术面临着一些新的挑战,主要有以下几点。

1)数据量大并不一定意味着数据价值的增加,相反这往往意味着数据噪音的增多。

因此,在数据分析之前必须进行数据清洗等预处理工作,但是预处理如此大量的数据,对于计算资源和处理算法来讲都是非常严峻的考验。

2)大数据时代的算法需要进行调整。

首先,大数据的应用常常具有实时性的特点,算法的准确率不再是大数据应用的最主要指标。

在很多场景中,算法需要在处理的实时性和准确率之间取得一个平衡。其次,分布式并发计算系统是进行大数据处理的有力工具,这就要求很多算法必须做出调整以适应分布式并发的计算框架,算法需要变得具有可扩展性。

许多传统的数据挖掘算法都是线性执行的,面对海量的数据很难在合理的时间内获取所需的结果。因此需要重新把这些算法实现成可以并发执行的算法,以便完成对大数据的处理。

最后,在选择算法处理大数据时必须谨慎,当数据量增长到一定规模以后,可以从小量数据中挖掘出有效信息的算法并一定适用于大数据。

3)数据结果的衡量标准。

对大数据进行分析比较困难,但是对大数据分析结果好坏的衡量却是大数据时代数据分析面临的更大挑战。

大数据时代的数据量大,类型混杂,产生速度快,进行分析的时候往往对整个数据的分布特点掌握得不太清楚,从而会导致在设计衡量的方法和指标的时候遇到许多困难。

数据解释

数据分析是大数据处理的核心,但是用户往往更关心对结果的解释。如果分析的结果正确,但是没有采用适当的方法进行解释,则所得到的结果很可能让用户难以理解,极端情况下甚至会引起用户的误解。

数据解释的方法很多,比较传统的解释方式就是以文本形式输出结果或者直接在电脑终端上显示结果。这些方法在面对小数据量时是一种可行的选择。

但是大数据时代的数据分析结果往往也是海量的,同时结果之间的关联关系极其复杂,采用传统的简单解释方法几乎是不可行的。

解释大数据分析结果时,可以考虑从以下两个方面提升数据解释能力。

1)引入可视化技术。

可视化作为解释大量数据最有效的手段之一率先被科学与工程计算领域采用。

该方法通过将分析结果以可视化的方式向用户展示,可以使用户更易理解和接受。常见的可视化技术有标签云、历史流、空间信息流等。

2)让用户能够在一定程度上了解和参与具体的分析过程。

这方面既可以采用人机交互技术,利用交互式的数据分析过程来引导用户逐步地进行分析,使得用户在得到结果的同时更好地理解分析结果的过程,也可以采用数据溯源技术追溯整个数据分析的过程,帮助用户理解结果。

大数据价值的完整体现需要多种技术的协同。大数据关键技术涵盖数据存储、处理、应用等多方面的技术,根据大数据的处理过程,可将其分为大数据采集、大数据预处理、大数据存储及管理、大数据处理、大数据分析及挖掘、大数据展示等。

大数据采集技术

大数据采集技术是指通过 RFID 数据、传感器数据、社交网络交互数据及移动互联网数据等方式获得各种类型的结构化、半结构化及非结构化的海量数据。

因为数据源多种多样,数据量大,产生速度快,所以大数据采集技术也面临着许多技术挑战,必须保证数据采集的可靠性和高效性,还要避免重复数据。

大数据的数据源主要有运营数据库、社交网络和感知设备 3 大类。针对不同的数据源,所采用的数据采集方法也不相同。《大数据采集技术概述》教程中会对大数据采集技术做详细介绍。

大数据预处理技术

大数据预处理技术主要是指完成对已接收数据的辨析、抽取、清洗、填补、平滑、合并、规格化及检查一致性等操作。

因获取的数据可能具有多种结构和类型,数据抽取的主要目的是将这些复杂的数据转化为单一的或者便于处理的结构,以达到快速分析处理的目的。

通常数据预处理包含 3 个部分:数据清理、数据集成和变换及数据规约。

1)数据清理

数据清理主要包含遗漏值处理(缺少感兴趣的属性)、噪音数据处理(数据中存在错误或偏离期望值的数据)和不一致数据处理。

  • 遗漏数据可用全局常量、属性均值、可能值填充或者直接忽略该数据等方法处理。
  • 噪音数据可用分箱(对原始数据进行分组,然后对每一组内的数据进行平滑处理)、聚类、计算机人工检查和回归等方法去除噪音。
  • 对于不一致数据则可进行手动更正。

2)数据集成

数据集成是指把多个数据源中的数据整合并存储到一个一致的数据库中。

这一过程中需要着重解决 3 个问题:模式匹配、数据冗余、数据值冲突检测与处理。

由于来自多个数据集合的数据在命名上存在差异,因此等价的实体常具有不同的名称。对来自多个实体的不同数据进行匹配是处理数据集成的首要问题。

数据冗余可能来源于数据属性命名的不一致,可以利用皮尔逊积矩来衡量数值属性,对于离散数据可以利用卡方检验来检测两个属性之间的关联。

数据值冲突问题主要表现为,来源不同的统一实体具有不同的数据值。数据变换的主要过程有平滑、聚集、数据泛化、规范化及属性构造等。

数据规约主要包括数据方聚集、维规约、数据压缩、数值规约和概念分层等。

使用数据规约技术可以实现数据集的规约表示,使得数据集变小的同时仍然近于保持原数据的完整性。

在规约后的数据集上进行挖掘,依然能够得到与使用原数据集时近乎相同的分析结果。

《大数据预处理架构和方法》教程中会对大数据预处理技术进行详细介绍。

大数据存储及管理技术

大数据存储及管理的主要目的是用存储器把采集到的数据存储起来,建立相应的数据库,并进行管理和调用。

在大数据时代,从多渠道获得的原始数据常常缺乏一致性,数据结构混杂,并且数据不断增长,这造成了单机系统的性能不断下降,即使不断提升硬件配置也难以跟上数据增长的速度。这导致传统的处理和存储技术失去可行性。

大数据存储及管理技术重点研究复杂结构化、半结构化和非结构化大数据管理与处理技术,解决大数据的可存储、可表示、可处理、可靠性及有效传输等几个关键问题。

具体来讲需要解决以下几个问题:海量文件的存储与管理,海量小文件的存储、索引和管理,海量大文件的分块与存储,系统可扩展性与可靠性。

面对海量的 Web 数据,为了满足大数据的存储和管理,Google 自行研发了一系列大数据技术和工具用于内部各种大数据应用,并将这些技术以论文的形式逐步公开,从而使得以 GFS、MapReduce、BigTable 为代表的一系列大数据处理技术被广泛了解并得到应用,同时还催生出以 Hadoop 为代表的一系列大数据开源工具。

从功能上划分,这些工具可以分为分布式文件系统、NoSQL 数据库系统和数据仓库系统。这 3 类系统分别用来存储和管理非结构化、半结构化和结构化数据,如图 1 所示。

图片[9]-大数据分析技术与应用一站式学习
图 1  典型大数据存储与管理系统及其分类

《Hadoop HDFS分布式文件系统》教程和《NoSQL非关系型数据库》教程分别对分布式文件系统和 NoSQL 数据库系统进行详细介绍。

大数据处理

大数据的应用类型很多,主要的处理模式可以分为流处理模式和批处理模式两种。批处理是先存储后处理,而流处理则是直接处理。

1. 批处理模式

Google 公司在 2004 年提出的 MapReduce 编程模型是最具代表性的批处理模式。

MapReduce 模型首先将用户的原始数据源进行分块,然后分别交给不同的 Map 任务去处理。

Map 任务从输入中解析出 key/value 对集合,然后对这些集合执行用户自行定义的 Map 函数以得到中间结果,并将该结果写入本地硬盘。

Reduce 任务从硬盘上读取数据之后,会根据 key 值进行排序,将具有相同 key 值的数据组织在一起。最后,用户自定义的 Reduce 函数会作用于这些排好序的结果并输出最终结果。

MapReduce 的核心设计思想有两点。

  • 将问题分而治之,把待处理的数据分成多个模块分别交给多个 Map 任务去并发处理。
  • 把计算推到数据而不是把数据推到计算,从而有效地避免数据传输过程中产生的大量通信开销。

2. 流处理模式

流处理模式的基本理念是,数据的价值会随着时间的流逝而不断减少。因此,尽可能快地对最新的数据做出分析并给出结果是所有流处理模式的主要目标。

需要采用流处理模式的大数据应用场景主要有网页点击数的实时统计,传感器网络,金融中的高频交易等。

流处理模式将数据视为流,将源源不断的数据组成数据流。当新的数据到来时就立刻处理并返回所需的结果。

数据的实时处理是一个很有挑战性的工作,数据流本身具有持续到达、速度快、规模巨大等特点,因此,通常不会对所有的数据进行永久化存储,同时,由于数据环境处在不断的变化之中,系统很难准确掌握整个数据的全貌。

由于响应时间的要求,流处理的过程基本在内存中完成,其处理方式更多地依赖于在内存中设计巧妙的概要数据结构。内存容量是限制流处理模式的一个主要瓶颈。

《Hadoop MapReduce概述》教程和《Spark简介》《Spark Streaming简介》教程会分别对批处理模式和流处理模式进行详细介绍。

大数据分析及挖掘技术

大数据处理的核心就是对大数据进行分析,只有通过分析才能获取很多智能的、深入的、有价值的信息。

越来越多的应用涉及大数据,这些大数据的属性,包括数量、速度、多样性等都引发了大数据不断增长的复杂性,所以,大数据的分析方法在大数据领域就显得尤为重要,可以说是决定最终信息是否有价值的决定性因素。

利用数据挖掘进行数据分析的常用方法主要有分类、回归分析、聚类、关联规则等,它们分别从不同的角度对数据进行挖掘。

1) 分类

分类是找岀数据库中一组数据对象的共同特点并按照分类模式将其划分为不同的类。

其目的是通过分类模型,将数据库中的数据项映射到某个给定的类别。它可以应用到客户的分类、客户的属性和特征分析、客户满意度分析、客户的购买趋势预测等。

2) 回归分析

回归分析方法反映的是事务数据库中属性值在时间上的特征。

该方法可产生一个将数据项映射到一个实值预测变量的函数,发现变量或属性间的依赖关系,其主要研究问题包括数据序列的趋势特征、数据序列的预测及数据间的相关关系等。

它可以应用到市场营销的各个方面,如客户寻求、保持和预防客户流失活动、产品生命周期分析、销售趋势预测及有针对性的促销活动等。

3) 聚类

聚类是把一组数据按照相似性和差异性分为几个类别。

其目的是使得属于同一类别的数据间的相似性尽可能大,不同类别中的数据间的相似性尽可能小。它可以应用于客户群体的分类、客户背景分析、客户购买趋势预测、市场的细分等。

4) 关联规则

关联规则是描述数据库中数据项之间所存在的关系的规则。

即根据一个事务中某些项的出现可推导岀另一些项在同一事务中也会出现,即隐藏在数据间的关联或相互关系。

在客户关系管理中,通过对企业的客户数据库里的大量数据进行挖掘,可以从大量的记录中发现有趣的关联关系,找出影响市场营销效果的关键因素,为产品定位、定价,客户寻求、细分与保持,市场营销与推销,营销风险评估和诈骗预测等决策支持提供参考依据。

《数据挖掘分析》教程对数据分析技术进行详细介绍。

大数据展示技术

在大数据时代下,数据井喷似地增长,分析人员将这些庞大的数据汇总并进行分析,而分析出的成果如果是密密麻麻的文字,那么就没有几个人能理解,所以我们就需要将数据可视化。

图表甚至动态图的形式可将数据更加直观地展现给用户,从而减少用户的阅读和思考时间,以便很好地做出决策。图 1 可以清晰地展示人物之间的关系。

图片[10]-大数据分析技术与应用一站式学习
图 1“人立方”展示人物关系图

可视化技术是最佳的结果展示方式之一,其通过清晰的图形图像展示直观地反映出最终结果。

数据可视化是将数据以不同的视觉表现形式展现在不同系统中,包括相应信息单位的各种属性和变量。

数据可视化技术主要指的是技术上较为高级的技术方法,这些技术方法通过表达、建模,以及对立体、表面、属性、动画的显示,对数据加以可视化解释。

传统的数据可视化工具仅仅将数据加以组合,通过不同的展现方式提供给用户,用于发现数据之间的关联信息。

随着大数据时代的来临,数据可视化产品已经不再满足于使用传统的数据可视化工具来对数据仓库中的数据进行抽取、归纳及简单的展现。

新型的数据可视化产品必须满足互联网上爆发的大数据需求,必须快速收集、筛选、分析、归纳、展现决策者所需要的信息,并根据新增的数据进行实时更新。因此,在大数据时代,数据可视化工具必须具有以下特性。

1)实时性

数据可视化工具必须适应大数据时代数据量的爆炸式增长需求,必须快速收集分析数据,并对数据信息进行实时更新。

2)操作简单

数据可视化工具满足快速开发、易于操作的特性,能满足互联网时代信息多变的特点。

3)更丰富的展现

数据可视化工具需要具有更丰富的展现方式,能充分满足数据展现的多维度要求。

4)多种数据集成支持方式

数据的来源不仅仅局限于数据库,数据可视化工具将支持团队协作数据、数据仓库、文本等多种方式,并能够通过互联网进行展现。

数据可视化技术是一个新兴领域,有许多新的发展。

企业获取数据可视化功能主要通过编程和非编程两类工具实现。

主流编程工具包括 3 种类型:从艺术的角度创作的数据可视化工具,比较典型的工具是 Processing.js,它是为艺术家提供的编程语言。

从统计和数据处理的角度创作的数据可视化工具,R 语言是一款典型的工具,它本身既可以做数据分析,又可以做图形处理。

介于两者之间的工具,既要兼顾数据处理,又要兼顾展现效果,D3.js 是一个不错的选择,像 D3.js 这种基于 JavaScript 的数据可视化工具更适合在互联网上互动式展示数据。

大数据采集是指从传感器和智能设备、企业在线系统、企业离线系统、社交网络和互联网平台等获取数据的过程。

数据包括 RFID 数据、传感器数据、用户行为数据、社交网络交互数据及移动互联网数据等各种类型的结构化、半结构化及非结构化的海量数据。

不但数据源的种类多,数据的类型繁杂,数据量大,并且产生的速度快,传统的数据采集方法完全无法胜任。

所以,大数据采集技术面临着许多技术挑战,一方面需要保证数据采集的可靠性和高效性,同时还要避免重复数据。

大数据分类

传统的数据采集来源单一,且存储、管理和分析数据量也相对较小,大多采用关系型数据库和并行数据仓库即可处理。

在依靠并行计算提升数据处理速度方面,传统的并行数据库技术追求的是高度一致性和容错性,从而难以保证其可用性和扩展性。

在大数据体系中,传统数据分为业务数据和行业数据,传统数据体系中没有考虑过的新数据源包括内容数据、线上行为数据和线下行为数据 3 大类。

在传统数据体系和新数据体系中,数据共分为以下 5 种。

  1. 业务数据:消费者数据、客户关系数据、库存数据、账目数据等。
  2. 行业数据:车流量数据、能耗数据、PM2.5数据等。
  3. 内容数据:应用日志、电子文档、机器数据、语音数据、社交媒体数据等。
  4. 线上行为数据:页面数据、交互数据、表单数据、会话数据、反馈数据等。
  5. 线下行为数据:车辆位置和轨迹、用户位置和轨迹、动物位置和轨迹等。

大数据的主要来源如下。

  1. 企业系统:客户关系管理系统、企业资源计划系统、库存系统、销售系统等。
  2. 机器系统:智能仪表、工业设备传感器、智能设备、视频监控系统等。
  3. 互联网系统:电商系统、服务行业业务系统、政府监管系统等。
  4. 社交系统:微信、QQ、微博、博客、新闻网站、朋友圈等。

在大数据体系中,数据源与数据类型的关系如图 1 所示。大数据系统从传统企业系统中获取相关的业务数据。

图片[11]-大数据分析技术与应用一站式学习
图 1  数据源与数据类型的关系

机器系统产生的数据分为两大类:

  • 通过智能仪表和传感器获取行业数据,例如,公路卡口设备获取车流量数据,智能电表获取用电量等。
  • 通过各类监控设备获取人、动物和物体的位置和轨迹信息。

互联网系统会产生相关的业务数据和线上行为数据,例如,用户的反馈和评价信息,用户购买的产品和品牌信息等。

社交系统会产生大量的內容数据,如博客与照片等,以及线上行为数据。所以,大数据采集与传统数据采集有很大的区别。

从数据源方面来看,传统数据采集的数据源单一,就是从传统企业的客户关系管理系统、企业资源计划系统及相关业务系统中获取数据,而大数据采集系统还需要从社交系统、互联网系统及各种类型的机器设备上获取数据。

从数据量方面来看,互联网系统和机器系统产生的数据量要远远大于企业系统的数据量。

从数据结构方面来看,传统数据采集的数据都是结构化的数据,而大数据采集系统需要采集大量的视频、音频、照片等非结构化数据,以及网页、博客、日志等半结构化数据。

从数据产生速度来看,传统数据采集的数据几乎都是由人操作生成的,远远慢于机器生成数据的效率。因此,传统数据采集的方法和大数据釆集的方法也有根本区别。

大数据采集方法分类

大数据的采集是指利用多个数据库或存储系统来接收发自客户端(Web、App 或者传感器形式等)的数据。例如,电商会使用传统的关系型数据库 MySQL 和 Oracle 等来存储每一笔事务数据,在大数据时代,Redis、MongoDB 和 HBase 等 NoSQL 数据库也常用于数据的采集。

大数据的采集过程的主要特点和挑战是并发数高,因为同时可能会有成千上万的用户在进行访问和操作,例如,火车票售票网站和淘宝的并发访问量在峰值时可达到上百万,所以在采集端需要部署大量数据库才能对其支撑,并且,在这些数据库之间进行负载均衡和分片是需要深入的思考和设计的。

根据数据源的不同,大数据采集方法也不相同。但是为了能够满足大数据采集的需要,大数据采集时都使用了大数据的处理模式,即 MapReduce 分布式并行处理模式或基于内存的流式处理模式。

针对 4 种不同的数据源,大数据采集方法有以下几大类。

1. 数据库采集

传统企业会使用传统的关系型数据库 MySQL 和 Oracle 等来存储数据。

随着大数据时代的到来,Redis、MongoDB 和 HBase 等 NoSQL 数据库也常用于数据的采集。企业通过在采集端部署大量数据库,并在这些数据库之间进行负载均衡和分片,来完成大数据采集工作。

2. 系统日志采集

系统日志采集主要是收集公司业务平台日常产生的大量日志数据,供离线和在线的大数据分析系统使用。

高可用性、高可靠性、可扩展性是日志收集系统所具有的基本特征。系统日志采集工具均采用分布式架构,能够满足每秒数百 MB 的日志数据采集和传输需求。

详细内容可参考教程《系统日志采集方法》。

3. 网络数据采集

网络数据采集是指通过网络爬虫或网站公开 API 等方式从网站上获取数据信息的过程。

网络爬虫会从一个或若干初始网页的 URL 开始,获得各个网页上的内容,并且在抓取网页的过程中,不断从当前页面上抽取新的 URL 放入队列,直到满足设置的停止条件为止。

这样可将非结构化数据、半结构化数据从网页中提取出来,存储在本地的存储系统中。

详细内容可参考教程《网络数据采集方法》。

4. 感知设备数据采集

感知设备数据采集是指通过传感器、摄像头和其他智能终端自动采集信号、图片或录像来获取数据。

大数据智能感知系统需要实现对结构化、半结构化、非结构化的海量数据的智能化识别、定位、跟踪、接入、传输、信号转换、监控、初步处理和管理等。其关键技术包括针对大数据源的智能识别、感知、适配、传输、接入等。

许多公司的平台每天都会产生大量的日志,并且一般为流式数据,如搜索引擎的 pv 和查询等。处理这些日志需要特定的日志系统,这些系统需要具有以下特征。

  • 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦。
  • 支持近实时的在线分析系统和分布式并发的离线分析系统。
  • 具有高可扩展性,也就是说,当数据量增加时,可以通过增加结点进行水平扩展。

目前使用最广泛的、用于系统日志采集的海量数据采集工具有 Hadoop 的 Chukwa、ApacheFlumeAFacebook 的 Scribe 和 LinkedIn 的 Kafka 等。

以上工具均采用分布式架构,能满足每秒数百 MB 的日志数据采集和传输需求。本节我们以 Flume 系统为例对系统日志采集方法进行介绍。

Flume 的基本概念

Flume 是一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输系统。

Flume 支持在日志系统中定制各类数据发送方,用于收集数据,同时,Flume 提供对数据进行简单处理,并写到各种数据接收方(如文本、HDFS、HBase 等)的能力。

Flume 的核心是把数据从数据源(Source)收集过来,再将收集到的数据送到指定的目的地(Smk)。

为了保证输送的过程一定成功,在送到目的地之前,会先缓存数据到管道(Channel),待数据真正到达目的地后,Flume 再删除缓存的数据,如图 1 所示。

图片[12]-大数据分析技术与应用一站式学习
图 1  Flume 的基本概念

Flume 的数据流由事件(Event)贯穿始终,事件是将传输的数据进行封装而得到的,是 Flume 传输数据的基本单位。

如果是文本文件,事件通常是一行记录。事件携带日志数据并且携带头信息,这些事件由 Agent 外部的数据源生成,当 Source 捕获事件后会进行特定的格式化,然后 Source 会把事件推入(单个或多个) Channel 中。

Channel 可以看作是一个缓冲区,它将保存事件直到 Sink 处理完该事件。Sink 负责持久化日志或者把事件推向另一个 Source。

Flume 使用方法

Flume 的用法很简单,主要是编写一个用户配置文件。在配置文件当中描述 Source、Channel 与 Sink 的具体实现,而后运行一个 Agent 实例。

在运行 Agent 实例的过程中会读取配置文件的内容,这样 Flume 就会采集到数据。

Flume 提供了大量内置的 Source、Channel 和 Sink 类型,而且不同类型的Source、Channel 和 Sink 可以进行灵活组合。

配置文件的编写原则如下。

1)从整体上描述 Agent 中 Sources、Sinks、Channels 所涉及的组件。

#Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c12)详细描述 Agent 中每一个 Source、Sink 与 Channel 的具体实现,即需要指定 Source 到底是什么类型的,是接收文件的、接收 HTTP 的,还是接收 Thrift 的。

对于 Sink,需要指定结果是输出到 HDFS 中,还是 HBase 中等。

对于Channel,需要指定格式是内存、数据库,还是文件等。

#Describe/configure the source
al.sources.r1.type = netcat
al.sources.r1.bind = localhost
al.sources.r1.port = 44444

#Describe the sink
a1.sinks.k1.type = logger

#Use a channel which buffers events in memory.
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactioncapacity = 1003)通过 Channel 将 Source 与 Sink 连接起来。

#Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c14)启动 Agent 的 shell 操作。

flume-ng agent -n a1 -c ../conf -f ../conf/example.file\
-Dflume.root.logger = DEBUG,console参数说明如下。

  • “-n”指定 Agent 的名称(与配置文件中代理的名字相同)。
  • “-c”指定 Flume 中配置文件的目录。
  • “-f”指定配置文件。
  • “-Dflume.root.logger = DEBUG,console”设置日志等级。

Flume 应用案例

NetCat Source 应用可监听一个指定的网络端口,即只要应用程序向这个端口写数据,这个 Source 组件就可以获取到信息。其中,Sink 使用 logger 类型,Channel 使用内存(Memory)格式。

1)编写配置文件

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = 192.168.80.80
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1该配置文件定义了一个名字为 a1 的 Agent,—个 Source 在 port 44444 监听数据,一个 Channel 使用内存缓存事件,一个 Sink 把事件记录在控制台。

2)启动 FlumeAgental 服务端。

$ flume-ng agent -n al -c ../conf -f ../conf/neteat.conf \
-Dflume.root.logger=DEBUG,console

3)使用 Telnet 发送数据。

以下代码为从另一个终端,使用 Telnet 通过 port 44444 给 Flume 发送数据。

$ telnet local host 44444
Trying 127.0.0.1…
Connected to localhost.localdomain(127.0.0.1).
Escape character is ‘^]’.
Hello world! <ENTER>
OK

4)在控制台上查看 Flume 收集到的日志数据。

17/6/19 15:32:19 INFO source.NetcatSource: Sources tarting
17/06/19 15:32:19 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.
ServerSocketChannelImpl[/127.0.0.1:44444]
17/06/19 15:32:34 INFO sink.LoggerSink: Event:{ headers:{} body:48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D Helloworld! .}

网络数据采集是指通过网络爬虫或网站公开 API 等方式从网站上获取数据信息。该方法可以将非结构化数据从网页中抽取出来,将其存储为统一的本地数据文件,并以结构化的方式存储。它支持图片、音频、视频等文件或附件的采集,附件与正文可以自动关联。

在互联网时代,网络爬虫主要是为搜索引擎提供最全面和最新的数据。

在大数据时代,网络爬虫更是从互联网上采集数据的有利工具。目前已经知道的各种网络爬虫工具已经有上百个,网络爬虫工具基本可以分为 3 类。

  • 分布式网络爬虫工具,如 Nutch。
  • Java 网络爬虫工具,如 Crawler4j、WebMagic、WebCollector。
  • 非 Java 网络爬虫工具,如 Scrapy(基于 Python 语言开发)。

本节首先对网络爬虫的原理和工作流程进行简单介绍,然后对网络爬虫抓取策略进行讨论,最后对典型的网络工具进行描述。

网络爬虫原理

网络爬虫是一种按照一定的规则,自动地抓取 Web 信息的程序或者脚本。

Web 网络爬虫可以自动采集所有其能够访问到的页面内容,为搜索引擎和大数据分析提供数据来源。从功能上来讲,爬虫一般有数据采集、处理和存储 3 部分功能,如图 1 所示。

图片[13]-大数据分析技术与应用一站式学习
图 1  网络爬虫示意

网页中除了包含供用户阅读的文字信息外,还包含一些超链接信息。

网络爬虫系统正是通过网页中的超链接信息不断获得网络上的其他网页的。网络爬虫从一个或若干初始网页的 URL 开始,获得初始网页上的 URL,在抓取网页的过程中,不断从当前页面上抽取新的 URL 放入队列,直到满足系统的一定停止条件。

网络爬虫系统一般会选择一些比较重要的、出度(网页中链出的超链接数)较大的网站的 URL 作为种子 URL 集合。

网络爬虫系统以这些种子集合作为初始 URL,开始数据的抓取。因为网页中含有链接信息,通过已有网页的 URL 会得到一些新的 URL。

可以把网页之间的指向结构视为一个森林,每个种子 URL 对应的网页是森林中的一棵树的根结点,这样网络爬虫系统就可以根据广度优先搜索算法或者深度优先搜索算法遍历所有的网页。

由于深度优先搜索算法可能会使爬虫系统陷入一个网站内部,不利于搜索比较靠近网站首页的网页信息,因此一般采用广度优先搜索算法采集网页。

网络爬虫系统首先将种子 URL 放入下载队列,并简单地从队首取出一个 URL 下载其对应的网页,得到网页的内容并将其存储后,经过解析网页中的链接信息可以得到一些新的 URL。

其次,根据一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接并将其放入等待抓取的 URL 队列。

最后,取出一个 URL,对其对应的网页进行下载,然后再解析,如此反复进行,直到遍历了整个网络或者满足某种条件后才会停止下来。

网络爬虫工作流程

如图 2 所示,网络爬虫的基本工作流程如下。

1)首先选取一部分种子 URL。

2)将这些 URL 放入待抓取 URL 队列。

3)从待抓取 URL 队列中取出待抓取 URL,解析 DNS,得到主机的 IP 地址,并将 URL 对应的网页下载下来,存储到已下载网页库中。此外,将这些 URL 放进已抓取 URL 队列。

4)分析已抓取 URL 队列中的 URL,分析其中的其他 URL,并且将这些 URL 放入待抓取 URL 队列,从而进入下一个循环。

图片[14]-大数据分析技术与应用一站式学习
图 2  网络爬虫的基本工作流程

网络爬虫抓取策略

Google 和百度等通用搜索引擎抓取的网页数量通常都是以亿为单位计算的。那么,面对如此众多的网页,通过何种方式才能使网络爬虫尽可能地遍历所有网页,从而尽可能地扩大网页信息的抓取覆盖面,这是网络爬虫系统面对的一个很关键的问题。在网络爬虫系统中,抓取策略决定了抓取网页的顺序。

本节首先对网络爬虫抓取策略用到的基本概念做简单介绍。

1)网页间关系模型

从互联网的结构来看,网页之间通过数量不等的超链接相互连接,形成一个彼此关联、庞大复杂的有向图。

如图 3 所示,如果将网页看成是图中的某一个结点,而将网页中指向其他网页的链接看成是这个结点指向其他结点的边,那么我们很容易将整个互联网上的网页建模成一个有向图。

理论上讲,通过遍历算法遍历该图,可以访问到互联网上几乎所有的网页。

图片[15]-大数据分析技术与应用一站式学习
图 3  网页关系模型图

2)网页分类

从爬虫的角度对互联网进行划分,可以将互联网的所有页面分为 5 个部分:已下载未过期网页、已下载已过期网页、待下载网页、可知网页和不可知网页,如图 4 所示。

抓取到本地的网页实际上是互联网内容的一个镜像与备份。互联网是动态变化的,当一部分互联网上的内容发生变化后,抓取到本地的网页就过期了。所以,已下载的网页分为已下载未过期网页和已下载已过期网页两类。

图片[16]-大数据分析技术与应用一站式学习
图 4  网页分类

待下载网页是指待抓取 URL 队列中的那些页面。

可知网页是指还没有抓取下来,也没有在待抓取 URL 队列中,但是可以通过对已抓取页面或者待抓取 URL 对应页面进行分析,从而获取到的网页。

还有一部分网页,网络爬虫是无法直接抓取下载的,称为不可知网页。

下面重点介绍几种常见的抓取策略。

1.  通用网络爬虫

通用网络爬虫又称全网爬虫,爬行对象从一些种子 URL 扩展到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。

为提高工作效率,通用网络爬虫会采取一定的爬行策略。常用的爬行策略有深度优先策略和广度优先策略。

1)深度优先策略

深度优先策略是指网络爬虫会从起始页开始,一个链接一个链接地跟踪下去,直到不能再深入为止。

网络爬虫在完成一个爬行分支后返回到上一链接结点进一步搜索其他链接。当所有链接遍历完后,爬行任务结束。

这种策略比较适合垂直搜索或站内搜索,但爬行页面内容层次较深的站点时会造成资源的巨大浪费。

以图 3 为例,遍历的路径为 1→2→5→6→3→7→4→8。

在深度优先策略中,当搜索到某一个结点的时候,这个结点的子结点及该子结点的后继结点全部优先于该结点的兄弟结点,深度优先策略在搜索空间的时候会尽量地往深处去,只有找不到某结点的后继结点时才考虑它的兄弟结点。

这样的策略就决定了深度优先策略不一定能找到最优解,并且由于深度的限制甚至找不到解。

如果不加限制,就会沿着一条路径无限制地扩展下去,这样就会“陷入”到巨大的数据量中。一般情况下,使用深度优先策略都会选择一个合适的深度,然后反复地搜索,直到找到解,这样搜索的效率就降低了。所以深度优先策略一般在搜索数据量比较小的时候才使用。

2)广度优先策略

广度优先策略按照网页内容目录层次深浅来爬行页面,处于较浅目录层次的页面首先被爬行。当同一层次中的页面爬行完毕后,爬虫再深入下一层继续爬行。

仍然以图 3 为例,遍历的路径为 1→2→3→4→5→6→7→8

由于广度优先策略是对第 N 层的结点扩展完成后才进入第 N+1 层的,所以可以保证以最短路径找到解。

这种策略能够有效控制页面的爬行深度,避免遇到一个无穷深层分支时无法结束爬行的问题,实现方便,无须存储大量中间结点,不足之处在于需较长时间才能爬行到目录层次较深的页面。

如果搜索时分支过多,也就是结点的后继结点太多,就会使算法耗尽资源,在可以利用的空间內找不到解。

2.  聚焦网络爬虫

聚焦网络爬虫又称主题网络爬虫,是指选择性地爬行那些与预先定义好的主题相关的页面的网络爬虫。

1)基于内容评价的爬行策略

DeBra 将文本相似度的计算方法引入到网络爬虫中,提出了 Fish Search 算法。

该算法将用户输入的查询词作为主题,包含查询词的页面被视为与主题相关的页面,其局限性在于无法评价页面与主题相关度的大小。

Herseovic 对 Fish Search 算法进行了改进,提出了 Shark Search 算法,即利用空间向量模型计算页面与主题的相关度大小。

采用基于连续值计算链接价值的方法,不但可以计算出哪些抓取的链接和主题相关,还可以得到相关度的量化大小。

2)基于链接结构评价的爬行策略

网页不同于一般文本,它是一种半结构化的文档,包含了许多结构化的信息。

网页不是单独存在的,页面中的链接指示了页面之间的相互关系,基于链接结构的搜索策略模式利用这些结构特征来评价页面和链接的重要性,以此决定搜索的顺序。其中,PageRank 算法是这类搜索策略模式的代表。

PageRank 算法的基本原理是,如果一个网页多次被引用,则可能是很重要的网页,如果一个网页没有被多次引用,但是被重要的网页引用,也有可能是重要的网页。一个网页的重要性被平均地传递到它所引用的网页上。

将某个页面的 PageRank 除以存在于这个页面的正向链接,并将得到的值分别和正向链接所指的页面的 PageRank 相加,即得到了被链接的页面的 PageRank。

如图 5 所示,PageRank 值为 100 的网页把它的重要性平均传递给了它所引用的两个页面,每个页面获得了 50,同样 PageRank 值为 9 的网页给它所引用的 3 个页面的每个页面传递的值为 3。

PageRank 值为 53 的页面的值来源于两个引用了它的页面传递过来的值。

图片[17]-大数据分析技术与应用一站式学习
图 5  PageRank 算法示例

3)基于增强学习的爬行策略

Rennie 和 McCallum 将增强学习引入聚焦爬虫,利用贝叶斯分类器,根据整个网页文本和链接文本对超链接进行分类,为每个链接计算出重要性,从而决定链接的访问顺序。

4)基于语境图的爬行策略

Diligenti 等人提出了一种通过建立语境图学习网页之间的相关度的爬行策略,该策略可训练一个机器学习系统,通过该系统可计算当前页面到相关 Web 页面的距离,距离近的页面中的链接优先访问。

3. 增量式网络爬虫

增量式网络爬虫是指对已下载网页采取增量式更新并且只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。

增量式网络爬虫有两个目标:

  • 保持本地页面集中存储的页面为最新页面。
  • 提高本地页面集中页面的质量。

为实现第一个目标,增量式网络爬虫需要通过重新访问网页来更新本地页面集中页面的内容。常用的方法有统一更新法、个体更新法和基于分类的更新法。

  • 在统一更新法中,网络爬虫以相同的频率访问所有网页,而不考虑网页的改变频率。
  • 在个体更新法中,网络爬虫根据个体网页的改变频率来重新访问各页面。
  • 在基于分类的更新法中,网络爬虫根据网页改变频率将其分为更新较快网页子集和更新较慢网页子集两类,然后以不同的频率访问这两类网页。

为实现第二个目标,增量式网络爬虫需要对网页的重要性排序,常用的策略有广度优先策略、PageRank 优先策略等。

4. 深层网络爬虫

网页按存在方式可以分为表层网页和深层网页。

  • 表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主。
  • 深层网页是那些大部分内容不能通过静态链接获取的,隐藏在搜索表单后的,只有用户提交一些关键词才能获得的网页。

深层网络爬虫体系结构包含 6 个基本功能模块(爬行控制器、解析器、表单分析器、表单处理器、响应分析器、LVS 控制器)和两个爬虫内部数据结构(URL 列表和 LVS 表)。

其中,LVS(LabelValueSet)表示标签和数值集合,用来表示填充表单的数据源。在爬取过程中,最重要的部分就是表单填写,包含基于领域知识的表单填写和基于网页结构分析的表单填写两种。

Scrapy 是一个为了爬取网站数据、提取结构性数据而编写的应用框架,可以应用在包括数据挖掘、信息处理或存储历史数据等一系列的程序中。

1. Scrapy 架构

Scrapy 的整体架构由 Scrapy 引擎(ScrapyEngine)、调度器(Scheduler)、下载器(Downloader)、爬虫(Spiders)和数据项管道(itemPipeline)5 个组件组成。图 1 展示了各个组件的交互关系和系统中的数据流。

图片[18]-大数据分析技术与应用一站式学习
图 1  Scrapy 架构

Scrapy 的架构由以下 5 个组件和两个中间件构成。

组件/中间件作用
Scrapy 引擎(ScrapyEngine)是整个系统的核心,负责控制数据在整个组件中的流动,并在相应动作发生时触发事件。
调度器(Scheduler)管理 Request 请求的出入栈,去除重复的请求。调度器从 Scrapy 引擎接收请求,并将请求加入请求队列,以便在后期需要的时候提交给 Scrapy 引擎。
下载器(Downloader)负责获取页面数据,并通过 Scrapy 引擎提供给网络爬虫。
网络爬虫(Spiders)是 Scrapy 用户编写的用于分析结果并提取数据项或跟进的 URL 的类。每个爬虫负责处理一个(或者一组)特定网站。
数据项管道(ItemPipeline)负责处理被爬虫提取出来的数据项。典型的处理有清理、验证及持久化。
下载器中间件是引擎和下载器之间的特定接口,处理下载器传递给引擎的结果。其通过插入自定义代码来扩展下载器的功能。
爬虫中间件是引擎和爬虫之间的特定接口,用来处理爬虫的输入,并输出数据项。其通过插入自定义代码来扩展爬虫的功能。

Scrapy 中的数据流由 Scrapy 引擎控制,整体的流程如下。

1)Scrapy 引擎打开一个网站,找到处理该网站的爬虫,并询问爬虫第一次要爬取的 URL。

2)Scrapy 引擎从爬虫中获取第一次要爬取的 URL,并以 Request 方式发送给调度器。

3)Scrapy 引擎向调度器请求下一个要爬取的 URL。

4)调度器返回下一个要爬取的 URL 给 Scrapy 引擎,Scrapy 引擎将 URL 通过下载器中间件转发给下载器。

5)下载器下载给定的网页,下载完毕后,生成一个该页面的结果,并将其通过下载器中间件发送给 Scrapy 引擎。

6)Scrapy 引擎从下载器中接收到下载结果,并通过爬虫中间件发送给爬虫进行处理。

7)爬虫对结果进行处理,并返回爬取到的数据项及需要跟进的新的 URL 给 Scrapy 引擎。

8)Scrapy 引擎将爬取到的数据项发送给数据项管道,将爬虫生成的新的请求发送给调度器。

9)从步骤(2)开始重复,直到调度器中没有更多的请求,Scrapy 引擎关闭该网站。

2. Scrapy 应用案例

如果需要从某个网站中获取信息,但该网站未提供 API 或能通过程序获取信息的机制,Scrapy 就可以用来完成这个任务。

本节通过一个具体应用来讲解使用 Scrapy 抓取数据的方法。本应用要获取在当当网站销售的有关“Python 核心编程”和“Python 基础教程”的所有书籍的 URL、名字、描述及价格等信息。

1)创建项目

在开始爬取之前,必须创建一个新的 Scrapy 项目。进入打算存储代码的目录中,运行下列命令。

scrapy startproject tutorial该命令将会创建包含下列内容的 tutorial 目录。

tutorial/
    scrapy.cfg
    tutorial/
        —init_.py
        items.py
        pipelines.py
        settings.py
        spiders/
            _init_.py
            …这些文件分别如下。

名称说明
scrapy.cfg项目的配置文件
tutorial/项目的 Python 模块,之后将在此加入代码
tutorial/items.py项目中的 item 文件
tutorial/pipelines.py项目中的 pipelines 文件
tutorial/settings.py项目的设置文件
tutorial/spiders/放置 Spider 代码的目录

2)定义 Item

在 Scrapy 中,Item 是保存爬取到的数据的容器,其使用方法和 Python 字典类似,并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。

一般来说,Item 可以用 scrapy.item.Item 类来创建,并且用 scrapy.item.Field 对象来定义属性。

如果想要从网页抓取的每一本书的内容为书名(Title)、链接(Link)、简介(Description)和价格(Price),则根据要抓取的内容,可构建 Item 的模型。

修改 tutorial 目录下的 items.py 文件,在原来的类后面添加新的类。因为要抓当当网站的内容,所以我们可以将其命名为 DangItem,并定义相应的字段。编辑 tutorial 目录中的 items.py 文件。

import scrapy

class DangItem(scrapy.Item):
    title = scrapy.Field()
    link. = scrapy.Field()
    dese = scrapy.Field()
    price = scrapy.Filed()3)编写 Spider

Spider 是用户编写的用于从单个(或一组)网站爬取数据的类。它包含了一个用于下载的初始 URL,负责跟进网页中的链接的方法,负责分析页面中的内容的方法,以及负责提取生成的 Item 的方法。

创建的 Spider 必须继承 scrapy.Spider 类,并且需要定义以下 3 个属性。

  • name:Spider 的名字,必须是唯一的,不可以为不同的 Spider 设定相同的名字。
  • start_urls:包含了 Spider 在启动时进行爬取的 URL 列表。第一个被获取到的页面是其中之一,后续的 URL 则从初始的 URL 获取到的数据中提取。
  • parse():是一个用来解析下载返回数据的方法。被调用时,每个初始 URL 完成下载后生成的 Response 对象将会作为唯一的参数传递给该方法。该方法将负责解析返回的数据(Response),提取数据生成 Item,以及生成需要进一步处理的 URL 的 Request 对象。

以下是我们编写的 Spider 代码,保存在 tutorial/spiders 目录下的 dang_spider.py 文件中。

import scrapyclass DangSpider(scrapy.Spider):    name = "dangdang"    allowed_domains=["dangdang.com”]    start_urls=[        http://search.dangdang.com/?key=python核心编程&act=click,        http://search.dangdang.com/?key=python基础教程&act=click]        def parse(self,response):            filename=response.url.split("/")[-2]            with open(filename,'wb')as f:                f.write(response.body)

4)爬取

进入项目的根目录,执行下列命令启动 Spider。

scrapy crawl dmoz该命令将会启动用于爬取 dangdang.com 的 Spider,系统将会产生类似的输出。

2017-01-23 18:13:07-0400 [scrapy] INFO: Scrapy started (bot: tutorial)
2017-01-23 18:13:07-0400 [scrapy] INFO: Optional features available: …
2017-01-23 18:13:07-0400 [scrapy] INFO: Overridden settings: {}
2017-01-23 18:13:07-0400 [scrapy] INFO: Enabled extensions: …
2017-01-23 18:13:07-0400 [scrapy] INFO: Enabled downloader middlewares: …
2017-01-23 18:13:07-0400 [scrapy] INFO: Enabled spider middlewares: …
2017-01-23 18:13:07-0400 [scrapy] INFO: Enabled item.pipelines: …
2017-01-23 18:13:07-0400 [dangdang] INFO: Spider opened
2017-01-23 18:13:08-0400: [dangdang] DEBUG:  Crawled (200)<GET http://search.
langdang.com/?key=python 核心编程&act=click> (referer: None)
2017-01-23  18:13:08-0400 [dangdang] DEBUG: Crawled (200)<GET http://search.
dangdang.com/?key=python 基础教程&act=click> (referer: None)
2017-01-23 18:13:09-0400 [dangdang] INFO: Closing spider (finished)查看包含“dangdang”的输出,可以看到,输出的 log 中包含定义在 start_urls 中的初始 URL,并且与 Spider 中是一一对应的。在 log 中可以看到其没有指向其他页面(referer:None)。

除此之外,根据parse方法,有两个包含URL所对应的内容的文件被创建了,即 Python 核心编程和 Python 基础教程。

在执行上面的 shell 命令时,scrapy 会创建一个 scrapy.http.Request 对象,将 start_url 传递给 它,抓取完毕后,回调 parse 函数。

5)提取 Item

在抓取任务中,一般不会只抓取网页,而是要将抓取的结果直接变成结构化数据。根据前面定义的 Item 数据模型,我们就可以修改 Parser,并用 Scmpy 内置的 XPath 解析 HTML 文档。

通过观察当当网页源码,我们发现有关书籍的信息都是包含在第二个<ul>元素中的,并且相关的书籍被用列表方式展现出来。所以,我们可以用下述代码选择该网页中书籍列表里所有<Vli>元素,每一个元素对应一本书。选择<li>元素的函数是 response.xpath(“//ul/li”)。

from scrapy.spider import bpiaerfrom scrapy.selector import Selectorfrom tutorial.items import DangItemclass DangSpider(Spider)    name = "dangdang"    allowed_domains = ["dangdang.com"]    start_urls =[    http: //search.dangdang.com/?key=python 核心编程&act=click,    http: //search.dangdang.com/?key=python 基础教程&act=click ]def parse(self, response):sel = Selector(response)sites = sel.xpath('//ul/li)items =[]for site in sites:item = DangItem()item['title'] = site.xpath ('a/text()').extract() item['link'] = site.xpath ('a/@href').extract() item['desc'] = site.xpath ('text()').extract()item['rice'] = site.xpath('text()') .extract() items.append(item)return items

增加 json 选项把结果保存为 JSON 格式,执行下列命令启动 Scrapy。

scrapy crawl dangdang -o items.json该命名将采用 JSON 格式对爬取的数据进行序列化,并生成 items.json 文件。

现实世界的数据常常是不完全的、有噪声的、不一致的。数据清洗过程包括遗漏数据处理,噪声数据处理,以及不一致数据处理。本节介绍数据清洗的主要处理方法。

遗漏数据处理

假设在分析一个商场销售数据时,发现有多个记录中的属性值为空,如顾客的收入属性,则对于为空的属性值,可以采用以下方法进行遗漏数据处理。

1)忽略该条记录

若一条记录中有属性值被遗漏了,则将此条记录排除,尤其是没有类别属性值而又要进行分类数据挖掘时。

当然,这种方法并不很有效,尤其是在每个属性的遗漏值的记录比例相差较大时。

2)手工填补遗漏值

一般这种方法比较耗时,而且对于存在许多遗漏情况的大规模数据集而言,显然可行性较差。

3)利用默认值填补遗漏值

对一个属性的所有遗漏的值均利用一个事先确定好的值来填补,如都用“OK”来填补。但当一个属性的遗漏值较多时,若采用这种方法,就可能误导挖掘进程。

因此这种方法虽然简单,但并不推荐使用,或使用时需要仔细分析填补后的情况,以尽量避免对最终挖掘结果产生较大误差。

4)利用均值填补遗漏值

计算一个属性值的平均值,并用此值填补该属性所有遗漏的值。例如,若顾客的平均收入为 10000 元,则用此值填补“顾客收入”属性中所有被遗漏的值。

5)利用同类别均值填补遗漏值

这种方法尤其适合在进行分类挖掘时使用。

例如,若要对商场顾客按信用风险进行分类挖掘时,就可以用在同一信用风险类别(如良好)下的“顾客收入”属性的平均值,来填补所有在同一信用风险类别下“顾客收入”属性的遗漏值。

6)利用最可能的值填补遗漏值

可以利用回归分析、贝叶斯计算公式或决策树推断出该条记录特定属性的最大可能的取值。

例如,利用数据集中其他顾客的属性值,可以构造一个决策树来预测“顾客收入”属性的遗漏值。

最后一种方法是一种较常用的方法,与其他方法相比,它最大程度地利用了当前数据所包含的信息来帮助预测所遗漏的数据。

噪声数据处理

噪声是指被测变量的一个随机错误和变化。下面通过给定一个数值型属性(如价格)来说明平滑去噪的具体方法。

1. Bin 方法

Bin 方法通过利用应被平滑数据点的周围点(近邻),对一组排序数据进行平滑。排序后的数据被分配到若干桶(称为 Bins)中。

如图 1 所示,对 Bin 的划分方法一般有两种,一种是等高方法,即每个 Bin 中的元素的个数相等,另一种是等宽方法,即每个 Bin 的取值间距(左右边界之差)相同。

图片[19]-大数据分析技术与应用一站式学习
图 1  两种典型 Bin 划分方法

图 2 描述了一些 Bin 方法技术。首先,对价格数据进行排序,然后,将其划分为若干等高度的 Bin,即每个 Bin 包含 3 个数值,最后,既可以利用每个 Bin 的均值进行平滑,也可以利用每个 Bin 的边界进行平滑。

利用均值进行平滑时,第一个 Bin 中 4、8、15 均用该 Bin 的均值替换,利用边界进行平滑时,对于给定的 Bin,其最大值与最小值就构成了该 Bin 的边界,利用每个 Bin 的边界值(最大值或最小值)可替换该 Bin 中的所有值。

一般来说,每个 Bin 的宽度越宽,其平滑效果越明显。

图片[20]-大数据分析技术与应用一站式学习
图 2  利用 Bin 方法平滑去噪

2. 聚类分析方法

通过聚类分析方法可帮助发现异常数据。相似或相邻近的数据聚合在一起形成了各个聚类集合,而那些位于这些聚类集合之外的数据对象,自然而然就被认为是异常数据。

如图 3 所示。聚类分析方法的具体内容将在本章教程大数据挖掘中详细介绍。

图片[21]-大数据分析技术与应用一站式学习
图 3  基于聚类分析方法的异常数据监测

3. 人机结合检查方法

通过人机结合检查方法,可以帮助发现异常数据。

例如,利用基于信息论的方法可帮助识别手写符号库中的异常模式,所识别出的异常模式可输出到一个列表中,然后由人对这一列表中的各异常模式进行检查,并最终确认无用的模式(真正异常的模式)。

这种人机结合检查方法比手工方法的手写符号库检查效率要高许多。

4. 回归方法

可以利用拟合函数对数据进行平滑。

例如,借助线性回归方法,包括多变量回归方法,就可以获得多个变量之间的拟合关系,从而达到利用一个(或一组)变量值来预测另一个变量取值的目的。

利用回归分析方法所获得的拟合函数,能够帮助平滑数据及除去其中的噪声。

许多数据平滑方法,同时也是数据消减方法,例如,以上描述的 Bin 方法可以帮助消减一个属性中的不同取值,这也就意味着 Bin 方法可以作为基于逻辑挖掘方法的数据消减处理方法。

不一致数据处理

现实世界的数据库常岀现数据记录内容不一致的问题,其中的一些数据可以利用它们与外部的关联,手工解决这种问题。

例如,数据录入错误一般可以通过与原稿进行对比来加以纠正。 此外还有一些方法可以帮助纠正使用编码时所发生的不一致问题。知识工程工具也可以帮助发 现违反数据约束条件的情况。

由于同一属性在不同数据库中的取名不规范,常常使得在进行数据集成时,导致不一致情况的发生。

数据处理常常涉及数据集成操作,即将来自多个数据源的数据,如数据库、数据立方、普通文件等,结合在一起并形成一个统一数据集合,以便为数据处理工作的顺利完成提供完整的数据基础。

在数据集成过程中,需要考虑解决以下几个问题。

1. 模式集成问题

模式集成问题就是如何使来自多个数据源的现实世界的实体相互匹配,这其中就涉及实体识别问题。

例如,如何确定一个数据库中的“custom_id”与另一个数据库中的“custome_number”是否表示同一实体。

数据库与数据仓库通常包含元数据,这些元数据可以帮助避免在模式集成时发生错误。

2. 冗余问题

冗余问题是数据集成中经常发生的另一个问题。若一个属性可以从其他属性中推演出来,那这个属性就是冗余属性。

例如,一个顾客数据表中的平均月收入属性就是冗余属性,显然它可以根据月收入属性计算出来。此外,属性命名的不一致也会导致集成后的数据集出现数据冗余问题。

利用相关分析可以帮助发现一些数据冗余情况。

例如,给定两个属性 A 和 B,则根据这两个属性的数值可分析出这两个属性间的相互关系。

如果两个属性之间的关联值 r>0,则说明两个属性之间是正关联,也就是说,若 A 增加,B 也增加。r 值越大,说明属性 A、E 的正关联关系越紧密。

如果关联值产 0,则说明属性 A、B 相互独立,两者之间没有关系。如果 r<0,则说明属性 A、B之间是负关联,也就是说,若 A 增加,B 就减少。r 的绝对值越大,说明属性 A、B 的负关联关系越紧密。

3. 数据值冲突检测与消除问题

在现实世界实体中,来自不同数据源的属性值或许不同。产生这种问题的原因可能是表示、比例尺度,或编码的差异等。

例如,重量属性在一个系统中采用公制,而在另一个系统中却采用英制;价格属性在不同地点采用不同的货币单位。这些语义的差异为数据集成带来许多问题。

数据转换就是将数据进行转换或归并,从而构成一个适合数据处理的描述形式。数据转换包含以下处理内容。

1)平滑处理

帮助除去数据中的噪声,主要技术方法有 Bin 方法、聚类方法和回归方法。

2)合计处理

对数据进行总结或合计操作。例如,每天的数据经过合计操作可以获得每月或每年的总额。这一操作常用于构造数据立方或对数据进行多粒度的分析。

3)数据泛化处理

用更抽象(更高层次)的概念来取代低层次或数据层的数据对象。

例如,街道属性可以泛化到更高层次的概念,如城市、国家,数值型的属性,如年龄属性,可以映射到更高层次的概念,如年轻、中年和老年。

4)规格化处理

将有关属性数据按比例投射到特定的小范围之中。例如,将工资收入属性值映射到 0 到 1 范围内。

5)属性构造处理

根据已有属性集构造新的属性,以帮助数据处理过程。

下面将着重介绍规格化处理和属性构造处理。

规格化处理就是将一个属性取值范围投射到一个特定范围之内,以消除数值型属性因大小不一而造成挖掘结果的偏差,常常用于神经网络、基于距离计算的最近邻分类和聚类挖掘的数据预处理。

对于神经网络,采用规格化后的数据不仅有助于确保学习结果的正确性,而且也会帮助提高学习的效率。对于基于距离计算的挖掘,规格化方法可以帮助消除因属性取值范围不同而影响挖掘结果的公正性。

下面介绍常用的3种规格化方法。

1. 最大最小规格化方法

该方法对被初始数据进行一种线性转换。

例如,假设属性的最大值和最小值分别是 98 000 元和 12 000 元,利用最大最小规格化方法将“顾客收入”属性的值映射到 0~1 的范围内,则“顾客收入”属性的值为 73 600 元时,对应的转换结果如下。

(73 600-12 000)/(98 000-12 000)*(1.0-0.0) + 0 = 0.716计算公式的含义为“(待转换属性值-属性最小值)/(属性最大值-属性最小值)*(映射区间最大值-映射区间最小值)+映射区间最小值”。

2. 零均值规格化方法

该方法是指根据一个属性的均值和方差来对该属性的值进行规格化。

假定属性“顾客收入”的均值和方差分别为 54 000 元和 16 000 元,则“顾客收入”属性的值为 73 600 元时,对应的转换结果如下。

(73 600-54 000)/16000 = 1.225计算公式的含义为“(待转换属性值-属性平均值)/属性方差”。

3. 十基数变换规格化方法

该方法通过移动属性值的小数位置来达到规格化的目的。所移动的小数位数取决于属性绝对值的最大值。假设属性的取值范围是 -986~917,则该属性绝对值的最大值为 986。属性的值为 435 时,对应的转换结果如下。

435/10^3 = 0.435计算公式的含义为“待转换属性值/10”,其中,j 为能够使该属性绝对值的最大值(986)小于 1 的最小值。

属性构造方法可以利用已有属性集构造出新的属性,并将其加入到现有属性集合中以挖掘更深层次的模式知识,提高挖掘结果准确性。

例如,根据宽、高属性,可以构造一个新属性(面积)。构造合适的属性能够减少学习构造决策树时出现的碎块情况。此外,属性结合可以帮助发现所遗漏的属性间的相互联系,而这在数据挖掘过程中是十分重要的。

我们都知道对大规模数据进行复杂的数据分析通常需要耗费大量的时间,这时就需要我们的数据消减技术了。

数据消减技术的主要目的就是从原有巨大数据集中获得一个精简的数据集,并使这一精简数据集保持原有数据集的完整性。这样在精简数据集上进行数据挖掘就会提高效率,并且能够保证挖掘出来的结果与使用原有数据集所获得的结果基本相同。

数据消减的主要策略有以下几种。

名称说明
数据立方合计这类合计操作主要用于构造数据立方(数据仓库操作)。
维数消减主要用于检测和消除无关、弱相关,或冗余的属性或维(数据仓库中属性)。
数据压缩利用编码技术压缩数据集的大小。
数据块消减利用更简单的数据表达形式,如参数模型、非参数模型(聚类、采样、直方图等),来取代原有的数据。
离散化与概念层次生成所谓离散化就是利用取值范围或更高层次概念来替换初始数据。利用概念层次可以帮助挖掘不同抽象层次的模式知识。

数据立方合计

图 1 展示了在 3 个维度上对某公司原始销售数据进行合计所获得的数据立方。它从时间(年代)、公司分支,以及商品类型 3 个角度(维)描述了相应(时空)的销售额(对应一个小立方块)。

图片[22]-大数据分析技术与应用一站式学习
图 1  数据立方合计描述

每个属性都可对应一个概念层次树,以帮助进行多抽象层次的数据分析。例如,一个分支属性的(概念)层次树,可以提升到更高一层的区域概念,这样就可以将多个同一区域的分支合并到一起。

在最低层次所建立的数据立方称为基立方,而最高抽象层次对应的数据立方称为顶立方。

顶立方代表整个公司三年中,所有分支、所有类型商品的销售总额。显然每一层次的数据立方都是对低一层数据的进一步抽象,因此它也是一种有效的数据消减。

维数消减

数据集可能包含成百上千的属性,而这些属性中的许多属性是与挖掘任务无关的或冗余的。

例如,挖掘顾客是否会在商场购买电视机的分类规则时,顾客的电话号码很可能与挖掘任务无关。但如果利用人类专家来帮助挑选有用的属性,则困难又费时费力,特别是当数据内涵并不十分清楚的时候。无论是漏掉相关属性,还是选择了无关属性参加数据挖掘工作,都将严重影响数据挖掘最终结果的正确性和有效性。此外,多余或无关的属性也将影响数据挖掘的挖掘效率。

维数消减就是通过消除多余和无关的属性而有效消减数据集的规模的。

这里通常采用属性子集选择方法。属性子集选择方法的目标就是寻找出最小的属性子集并确保新数据子集的概率分布尽可能接近原来数据集的概率分布。利用筛选后的属性集进行数据挖掘,由于使用了较少的属性,从而使得用户更加容易理解挖掘结果。

如果数据有 d 个属性,那么就会有 2^d 个不同子集。从初始属性集中发现较好的属性子集的过程就是一个最优穷尽搜索的过程,显然,随着属性个数的不断增加,搜索的难度也会大大增加。所以,一般需要利用启发知识来帮助有效缩小搜索空间。这类启发式搜索方法通常都是基于可能获得全局最优的局部最优来指导并帮助获得相应的属性子集的。

一般利用统计重要性的测试来帮助选择“最优”或“最差”属性。这里假设各属性之间都是相互独立的。构造属性子集的基本启发式搜索方法有以下几种。

1. 逐步添加方法

该方法从一个空属性集(作为属性子集初始值)幵始,每次从原有属性集合中选择一个当前最优的属性添加到当前属性子集中。直到无法选择出最优属性或满足一定阈值约束为止。

2. 逐步消减方法

该方法从一个全属性集(作为属性子集初始值)开始,每次从当前属性子集中选择一个当前最差的属性并将其从当前属性子集中消去。直到无法选择出最差属性或满足一定阈值约束为止。

3. 消减与添加结合方法

该方法将逐步添加方法与逐步消减方法结合在一起,每次从当前属性子集中选择一个当前最差的属性并将其从当前属性子集中消去,以及从原有属性集合中选择一个当前最优的属性添加到当前属性子集中。直到无法选择出最优属性且无法选择出最差属性,或满足一定阈值约束为止。

4. 决策树归纳方法

通常用于分类的决策树算法也可以用于构造属性子集。具体方法就是,利用决策树的归纳方法对初始数据进行分类归纳学习,获得一个初始决策树,没有出现在这个决策树上的属性均认为是无关属性,将这些属性从初始属性集合中删除掉,就可以获得一个较优的属性子集。

数据压缩

数据压缩就是利用数据编码或数据转换将原来的数据集合压缩为一个较小规模的数据集合。

若仅根据压缩后的数据集就可以恢复原来的数据集,那么就认为这一压缩是无损的,否则就称为有损的。在数据挖掘领域通常使用的两种数据压缩方法均是有损的,它们是离散小波转换(Discrete Wavelet Transforms)和主要素分析(Principal Components Analysis)。

1. 离散小波变换

离散小波变换是一种线性信号处理技术,该方法可以将一个数据向量转换为另一个数据向量(为小波相关系数),且两个向量具有相同长度。可以舍弃后者中的一些小波相关系数。

例如,保留所有大于用户指定阈值的小波系数,而将其他小波系数置为 0,以帮助提高数据处理的运算效率。

这一方法可以在保留数据主要特征的情况下除去数据中的噪声,因此该方法可以有效地进行数据清洗。此外,在给定一组小波相关系数的情况下,利用离散小波变换的逆运算还可以近似恢复原来的数据。

2. 主要素分析

主要素分析是一种进行数据压缩常用的方法。

假设需要压缩的数据由 N 个数据行(向量)组成,共有 k 个维度(属性或特征)。该方法是从 k 个维度中寻找出 c 个共轭向量(c<<N),从而实现对初始数据的有效数据压缩的。

主要素分析方法的主要处理步骤如下。

1)对输入数据进行规格化,以确保各属性的数据取值均落入相同的数值范围。

2)根据已规格化的数据计算 c 个共轭向量,这 c 个共轭向量就是主要素,而所输入的数据均可以表示为这 c 个共轭向量的线性组合。

3)对 c 个共轭向量按其重要性(计算所得变化量)进行递减排序。

4)根据所给定的用户阈值,消去重要性较低的共轭向量,以便最终获得消减后的数据集合,此外,利用最主要的主要素也可以更好地近似恢复原来的数据。

主要素分析方法的计算量不大且可以用于取值有序或无序的属性,同时也能处理稀疏或异常数据。该方法还可以将多于两维的数据通过处理降为两维数据。与离散小波变换方法相比,主要素分析方法能较好地处理稀疏数据,而离散小波变换则更适合对高维数据进行处理变换。

数据块消减

数据块消减方法主要包括参数与非参数两种基本方法。所谓参数方法就是利用一个模型来帮助获得原来的数据,因此只需要存储模型的参数即可(当然异常数据也需要存储)。

例如,线性回归模型就可以根据一组变量预测计算另一个变量。而非参数方法则是存储利用直方图、聚类或取样而获得的消减后数据集。下面介绍几种主要的数据块消减方法。

1. 回归与线性对数模型

回归与线性对数模型可用于拟合所给定的数据集。线性回归方法是利用一条直线模型对数据进行拟合的,可以是基于一个自变量的,也可以是基于多个自变量的。

线性对数模型则是拟合多维离散概率分布的。如果给定 n 维(例如,用 n 个属性描述)元组的集合,则可以把每个元组看作 n 维空间的点。

对于离散属性集,可以使用线性对数模型,基于维组合的一个较小子集,来估计多维空间中每个点的概率。这使得高维数据空间可以由较低维空间构造。因此,线性对数模型也可以用于维归约和数据光滑。

回归与线性对数模型均可用于稀疏数据及异常数据的处理。但是回归模型对异常数据的处理结果要好许多。应用回归方法处理高维数据时计算复杂度较大,而线性对数模型则具有较好的可扩展性。

2. 直方图

直方图是利用 Bin 方法对数据分布情况进行近似的,它是一种常用的数据消减方法。属性 A 的直方图就是根据属性 A 的数据分布将其划分为若干不相交的子集(桶)的。这些子集沿水平轴显示,其高度(或面积)与该桶所代表的数值平均(出现)频率成正比。若每个桶仅代表一对属性值/频率,则这个桶就称为单桶。通常一个桶代表某个属性的一段连续值。

以下是一个商场所销售商品的价格清单(按递增顺序排列,括号中的数表示前面数字出现的次数)。

1(2)、5(5)、8(2)、10(4)、12、14(3)、15(5)、18(8)、20(7)、21(4)、25(5)、28、30(3)上述数据所形成的属性值/频率对的直方图如图 2 所示。构造直方图所涉及的数据集划分方法有以下几种。

1)等宽方法

在一个等宽的直方图中,每个桶的宽度(范围)是相同的(如图 2 所示)。

2)等高方法

在一个等高的直方图中,每个桶中的数据个数是相同的。

3)V-Optimal 方法

若对指定桶个数的所有可能直方图进行考虑,该方法所获得的直方图是这些直方图中变化最小的,即具有最小方差的直方图。直方图方差是指每个桶所代表数值的加权之和,其权值为相应桶中数值的个数。

4)MaxDiff 方法

该方法以相邻数值(对)之差为基础,一个桶的边界则是由包含有 β-1 个最大差距的数值对所确定的,其中,β 为用户指定的阈值。

图片[23]-大数据分析技术与应用一站式学习
图 2  等宽的直方图

V-Optimal 方法和 MaxDiff 方法比其他方法更加准确和实用。直方图在拟合稀疏和异常数据时具有较高的效能,此外,直方图方法也可以用于处理多维(属性)数据,多维直方图能够描述出属性间的相互关系。

3. 聚类

聚类技术将数据行视为对象。聚类分析所获得的组或类具有以下性质。同一组或类中的对象彼此相似,而不同组或类中的对象彼此不相似。

相似性通常利用多维空间中的距离来表示。一个组或类的“质量”可以用其所含对象间的最大距离(称为半径)来衡量,也可以用中心距离,即组或类中各对象与中心点距离的平均值,来作为组或类的“质量”。

在数据消减中,数据的聚类表示可用于替换原来的数据。当然这一技术的有效性依赖于实际数据的内在规律。在处理带有较强噪声数据时采用数据聚类方法常常是非常有效的。

4. 采样

采样方法由于可以利用一小部分数据(子集)来代表一个大数据集,因此可以作为数据消减的技术方法之一。

假设一个大数据集为 D,其中包括 N 个数据行。几种主要的采样方法如下。

1)无替换简单随机采样方法(简称 SRSWOR 方法)

该方法从 N 个数据行中随机(每一数据行被选中的概率为 1/N)抽取出 n 个数据行,以构成由 n 个数据行组成的采样数据子集,如图 3 所示。

图片[24]-大数据分析技术与应用一站式学习
图 3  两种随机采样方法示意

2)有替换简单随机采样方法(简称 SRSWR 方法)

该方法也是从 N 个数据行中每次随机抽取一个数据行,但该数据行被选中后仍将留在大数据集 D 中,最后获得的由 n 个数据行组成的采样数据子集中可能会出现相同的数据行,如图 3 所示。

3)聚类采样方法

该方法首先将大数据集 D 划分为 M 个不相交的类,然后再分别从这 M 个类的数据对象中进行随机抽取,这样就可以最终获得聚类采样数据子集。

4)分层采样方法

该方法首先将大数据集划分为若干不相交的层,然后再分别从这些层中随机抽取数据对象,从而获得具有代表性的采样数据子集。

例如,可以对一个顾客数据集按照年龄进行分层,然后再在每个年龄组中进行随机选择,从而确保最终获得的分层采样数据子集中的年龄分布具有代表性,如图 4 所示。

图片[25]-大数据分析技术与应用一站式学习
图 4  分层采样方法示意

离散化技术方法可以通过将属性(连续取值)域值范围分为若干区间,来帮助消减一个连续(取值)属性的取值个数。可以用一个标签来表示一个区间内的实际数据值。在基于决策树的分类挖掘中,消减属性取值个数的离散化处理是一个极为有效的数据预处理步骤。

图 1 所示是一个年龄属性的概念层次树。概念层次树可以通过利用较高层次概念替换低层次概念(如年龄的数值)来减少原有数据集的数据量。虽然一些细节在数据泛化过程中消失了,但这样所获得的泛化数据或许会更易于理解、更有意义。在消减后的数据集上进行数据挖掘显然效率更高。

数值概念层次树

由于数据的范围变化较大,所以构造数值属性的概念层次树是一件较为困难的事情。利用数据分布分析,可以自动构造数值属性的概念层次树。其中,主要的几种构造方法如下。

1. Bin 方法

Bin 方法是一种离散化方法。例如,属性的值可以通过将其分配到各 Bin 中而将其离散化。利用每个 Bin 的均值和中位数替换每个 Bin 中的值(利用均值或中位数进行平滑),并循环应用这些操作处理每次的操作结果,就可以获得一个概念层次树。

图片[26]-大数据分析技术与应用一站式学习
图 1  年龄属性的概念层次树

2. 直方图方法

直方图方法也可以用于离散化处理。例如,在等宽直方图中,数值被划分为等大小的区间,如(0,100],(100,200],…,(900,1000]。

循环应用直方图方法处理每次的划分结果,当达到用户指定层次水平后结束划分,最终可自动获得多层次概念树。最小间隔大小也可以帮助控制循环过程,包括指定一个划分的最小宽度或指定每一个层次的每一划分中数值的个数等。

3. 聚类分析方法

聚类分析方法可以将数据集划分为若干类或组。每个类构成了概念层次树的一个结点,每个类还可以进一步分解为若干子类,从而构成更低水平的层次。当然类也可以合并起来构成更高水平的层次。

4. 基于熵的方法

利用基于熵的方法构造数值概念层次树可以消减数据集规模。与其他方法不同的是,基于熵的方法利用了类别信息,这就使得边界的划分更加有利于改善分类挖掘结果的准确性。

5. 自然划分分段方法

尽管 Bin 方法、直方图方法、聚类方法和基于熵的方法均可以帮助构造数值概念层次树,但许多时候用户仍然将数值区间划分为归一的、易读懂的间隔,以使这些间隔看起来更加自然直观。

例如,将年收入数值属性取值区域分解为[50000,60000]区间要比利用复杂聚类分析所获得的[51265,60324]区间直观得多。

类别概念层次树

类别数据是一种离散数据。类别属性可取有限个不同的值且这些值之间无大小和顺序,如国家、工作、商品类别等。

构造类别属性的概念层次树的主要方法有以下几种。

1)属性值的顺序关系已在用户或专家指定的模式定义中说明。构造属性(或维)的概念层次树会涉及一组属性,在(数据库)模式定义时指定各属性的有序关系,可以有助于构造出相应的概念层次树。

例如,一个关系数据库中的地点属性将会涉及以下属性:街道、城市、省和国家。根据(数据库)模式定义时的描述,可以很容易地构造出(含有顺序语义)层次树,即街道<城市<省<国家。

2)通过数据聚合来描述层次树。这是概念层次树的一个主要(手工)构造方法。在大规模数据库中,通过穷举所有值而构造一个完整的概念层次树是不切实际的,但可以通过对其中的一部分数据进行聚合来描述层次数。例如,在模式定义基础上构造了省和国家的层次树,这时可以手工加入{安徽、江苏、山东}⊂ 华东地区和{广东、福建}⊂ 华南地区等“地区”中间层次。

3)定义一组属性但不说明其顺序。用户可以简单将一组属性组织在一起以便构成一个层次树,但不说明这些属性的相互关系。这就需要自动产生属性顺序以便构造一个有意义的概念层次树。

没有数据语义的知识,想要获得任意一组属性的顺序关系是很困难的。一个重要线索就是,高层次概念通常包含了若干低层次概念。定义属性的高层次概念通常比低层次概念包含少一些的不同值。根据这一线索,就可以通过给定属性集中每个属性的一些不同值自动构造一个概念层次树。

拥有最多不同值的属性被放到层次树的最低层,拥有的不同值数目越少的属性在概念层次树上所放的层次越高。这条启发知识在许多情况下的工作效果都很好。用户或专家在必要时,可以对所获得的概念层次树进行局部调整。

假设用户针对商场地点属性选择了一组属性,即街道、城市、省和国家。但没有说明这些属性的层次顺序关系。地点的概念层次树可以通过以下步骤自动产生。

 根据每个属性不同值的数目从小到大进行排序,从而获得以下顺序,其中,括号内容为相应属性不同值的数目。

国家(15)、省(65)、城市(3567)和街道(674339)。

② 根据所排顺序自顶而下构造层次树,即第一个属性在最高层,最后一个属性在最低层。所获得的概念层次树如图 2 所示。

图片[27]-大数据分析技术与应用一站式学习
图 2  自动生成的地点属性概念层次树

 用户对自动生成的概念层次树进行检查,必要时进行修改以使其能够反映所期望的属性间相互关系。本例中没有必要进行修改。

需要注意的是,上述启发知识并非始终正确。例如,在一个带有时间描述的数据库中,时间属性涉及 20 个不同年、12 个不同月和 1 个星期的值,则根据上述自动产生概念层次树的启发知识,可以获得,年<月<星期。星期在概念层次树的最顶层,这显然是不符合实际的。

本节将对大数据技术的基本概念进行简单介绍,包括分布式计算、服务器集群和 Google 的 3 个大数据技术。

分布式计算

对于如何处理大数据,计算机科学界有两大方向。

第一个方向是集中式计算,就是通过不断增加处理器的数量来增强单个计算机的计算能力,从而提高处理数据的速度。

第二个方向是分布式计算,就是把一组计算机通过网络相互连接组成分散系统,然后将需要处理的大量数据分散成多个部分,交由分散系统内的计算机组同时计算,最后将这些计算结果合并,得到最终的结果。

尽管分散系统内的单个计算机的计算能力不强,但是由于每个计算机只计算一部分数据,而且是多台计算机同时计算,所以就分散系统而言,处理数据的速度会远高于单个计算机。

过去,分布式计算理论比较复杂,技术实现比较困难,因此在处理大数据方面,集中式计算一直是主流解决方案。

IBM 的大型机就是集中式计算的典型硬件,很多银行和政府机构都用它处理大数据。不过,对于当时的互联网公司来说,IBM 的大型机的价格过于昂贵。因此,互联网公司把研究方向放在了可以使用在廉价计算机上的分布式计算上。

服务器集群

服务器集群是一种提升服务器整体计算能力的解决方案。它是由互相连接在一起的服务器群组成的一个并行式或分布式系统。

由于服务器集群中的服务器运行同一个计算任务,因此,从外部看,这群服务器表现为一台虚拟的服务器,对外提供统一的服务。

尽管单台服务器的运算能力有限,但是将成百上千的服务器组成服务器集群后,整个系统就具备了强大的运算能力,可以支持大数据分析的运算负荷。

Google、Amazon 阿里巴巴的计算中心里的服务器集群都达到了 5000 台服务器的规模。

大数据的技术基础

2003—2004 年间,Google 发表了 MapReduce、GFS(Google File System)和 BigTable 3 篇技术论文,提出了一套全新的分布式计算理论。

MapReduce 是分布式计算框架,GFS 是分布式文件系统,BigTable 是基于 GFS 的数据存储系统,这 3 大组件组成了 Google 的分布式计算模型。

Google 的分布式计算模型相比于传统的分布式计算模型有 3 大优势:

  • 简化了传统的分布式计算理论,降低了技术实现的难度,可以进行实际的应用。
  • 可以应用在廉价的计算设备上,只需增加计算设备的数量就可以提升整体的计算能力,应用成本十分低廉。
  • 被应用在 Google 的计算中心,取得了很好的效果,有了实际应用的证明。

后来,各家互联网公司开始利用 Google 的分布式计算模型搭建自己的分布式计算系统,Google 的这 3 篇论文也就成为大数据时代的技术核心。

当时 Google 采用分布式计算理论也是为了利用廉价的资源,使其发挥出更大的效用。Google 的成功使人们开始效仿,从而产生了开源系统 Hadoop。

从 Hadoop 体系和 Google 体系各方面的对应关系来讲,Hadoop、MapReduce 相当于 MapReduce,HDFS 相当于 GFS,HBase 相当于 BigTable,如表 1 所示。

大数据系统体系计算框架文件系统数据存储系统
Hadoop 体系Hadoop MapReduceHDFSHBase
Google 体系MapReduceGFSBigTable

© 版权声明
THE END
喜欢就支持一下吧
点赞4.3W+
分享