大数据技术与实践
注意!由于文章图片是通过typora一键上传图片实现,该功能还存在bug,容易导致图片顺序混乱,文章(1 of 3)开头提供了原版文章的 pdf 资源下载,推荐下载 pdf 后观看,或评论区联系我获取下载链接
3.4-Hive
一、概述
Hive简介
-
Hive是一个构建于Hadoop顶层的数据仓库工具
-
依赖分布式文件系统HDFS存储数据
-
依赖分布式并行计算模型MapReduce处理数据
-
-
Hive具有的特点非常适用于数据仓库。
- 采用批处理方式处理海量数据
- Hive需要把HiveQL语句转换成MapReduce任务进行运行;
- 数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不 需要快速响应给出结果,而且数据本身也不会频繁变化。
- 提供适合数据仓库操作的工具
- Hive本身提供了一系列对数据进行提取转化加载的工具,可以存储、查询 和分析存储在Hadoop中的大规模数据;
- 非常适合数据仓库应用程序维护海量数据、对数据进行挖掘、形成意见和 报告等
- 采用批处理方式处理海量数据
Hive与Hadoop生态系统中其他组件的关系
- Hive依赖于HDFS 存储数据,HDFS作为高可靠性的底层存储,用来存储海量数据
- Hive依赖于MapReduce 处理数据
- MapReduce对这些海量数据进行处理,实现高性能计算,用HiveQL语句编 写的处理逻辑最终均要转化为MapReduce任务来运行
- Pig可以作为Hive的替代工具
- pig是一种数据流语言和运行环境,适合用于Hadoop和MapReduce平台上 查询半结构化数据集。常用于ETL过程的一部分,即将外部数据装载到 Hadoop集群中,然后转换为用户期待的数据格式
- HBase 提供数据的实时访问
- HBase一个面向列的、分布式的、可伸缩的数据库,它可以提供数据的实时 访问功能,而Hive只能处理静态数据,主要是BI报表数据,所以HBase与 Hive的功能是互补的,它实现了Hive不能提供功能。
Hive与传统数据库的对比分析
-
Hive在很多方面和传统的关系数据库类似,但是它的底层依赖的是HDFS和 MapReduce,所以在很多方面又有别于传统数据库。
Hive在企业中的部署案例
-
构建于Hadoop上的数据仓库,除了依赖于Hadoop的基本组件HDFS 和MapReduce外,还结合使用了Hive、Pig、HBase与Mahout
-
Hive在报表中心的应用流程:
-
二、Hive系统架构
-
Hive对外访问接口概述
-
Hive HA基本原理
-
【Hive High Availability】:高可用性Hive解决方案
-
Hive很多时候会表现出不稳定性
-
三、Hive工作原理
SQL语句转换成MapReduce的基本原理
-
Hive本身不做具体的数据处理和存储
Hive把SQL语句转换成相关的MapReduce作业
-
两个步骤:
- SQL语句转换成MapReduce作业的基本原理
- Hive中SQL查询转换成MapReduce作业的过程
-
join的实现原理
-
group by的实现原理
Hive中SQL查询转换成MapReduce作业的过程
- 步骤:
- 驱动模块接收该命令或查询编译器
- 对该命令或查询进行解析编译
- 由优化器对该命令或查询进行优化计算
- 该命令或查询通过执行器进行执行
-
- 当启动MapReduce程序时,Hive本身是不会生成MapReduce算法程序的。 - 需要通过一个表示“job执行计划”的XML文件驱动执行内置的、原生的 Mapper和Reducer模块。 - Hive通过和JobTracker通信来初始化MapReduce任务,不必直接部署在 JobTracker所在的管理节点上执行。 - 通常在大型集群上,会有专门的网关机来部署Hive工具。网关机的作用主 要是远程操作和管理节点上的JobTracker通信,来执行任务。 - 数据文件通常存储在HDFS上,HDFS由NameNode节点管理。 - 过程说明:
- 当启动MapReduce程序时,Hive本身是不会生成 MapReduce程序的
- 需要通过一个表示“Job执行计划”的XML文件驱动执行内置 的、原生的Mapper和Reducer模块
- Hive通过和JobTracker通信来初始化MapReduce任务,不必 直接部署在JobTracker所在的管理节点上执行
- 通常在大型集群上,会有专门的网关机来部署Hive工具
- 数据文件通常存储在HDFS上,HDFS由名称节点管理
四、Impala
Impala简介
-
Impala是由Cloudera公司开发的新型查询系统,它提供SQL语义,能 查询存储在Hadoop的HDFS和HBase上的PB级大数据。
-
Impala最开始是参照 Dremel系统进行设计的,Impala的目的不在于 替换现有的MapReduce工具,而是提供一个统一的平台用于实时查询。
Impala系统架构
Impala查询过程
Impala 与Hive的比较
(全是图,也没有比较,太抽象了)
五、Hive编程实践
Hive的安装与配置
-
Hive安装
安装Hive之前需要安装jdk1.6以上版本以及启动Hadoop
- 下载安装包apache-hive-1.2.1-bin.tar.gz 下载地址:http://www.apache.org/dyn/closer.cgi/hive/
- 解压安装包apache-hive-1.2.1-bin.tar.gz至路径 /usr/local
- 配置系统环境,将hive下的bin目录添加到系统的path中
-
Hive配置
- Hive有三种运行模式,单机模式、伪分布式模式、分布式模式。 均是通过修改hive-site.xml文件实现,如果 hive-site.xml文件不存 在,我们可以参考$HIVE_HOME/conf目录下的hivedefault.xml.template文件新建。
Hive的数据类型
-
Hive的基本数据类型
-
Hive的集合数据类型
Hive基本操作
-
create: 创建数据库、表、视图
3.5-Spark
一、Spark概述
Spark简介
-
Spark最初由美国加州伯克利大学(UCBerkeley)的AMP 实验室于2009年开发,是基于内存计算的大数据并行计算 框架,可用于构建大型的、低延迟的数据分析应用程序
- 2013年Spark加入Apache孵化器项目后发展迅猛,如今已 成为Apache软件基金会最重要的三大分布式计算系统开源 项目之一(Hadoop、Spark、Storm)
- Spark在2014年打破了Hadoop保持的基准排序纪录
- Spark/206个节点/23分钟/100TB数据
- Hadoop/2000个节点/72分钟/100TB数据
- Spark用十分之一的计算资源,获得了比Hadoop快3倍 的速度
-
Spark具有如下几个主要特点:
- 运行速度快:使用DAG执行引擎以支持循环数据流与内存计算
- 容易使用:支持使用Scala、Java、Python和R语言进行编程,可以通过 Spark Shell进行交互式编程
- 通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算 、机器学习和图算法组件
- 运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中,也 可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、 HBase、Hive等多种数据源
-
Spark如今已吸引了国内外各大公司的注意,如腾讯、淘宝、百度、亚马 逊等公司均不同程度地使用了Spark来构建大数据分析应用,并应用到实 际的生产环境中
Scala简介
- Scala是一门现代的多范式编程语言,运行于Java平台(JVM,Java 虚 拟机),并兼容现有的Java程序。Scala的特性:
- Scala具备强大的并发性,支持函数式编程,可以更好地支持分布式系统
- Scala语法简洁,能提供优雅的API
- Scala兼容Java,运行速度快,且能融合到Hadoop生态圈中
- Scala是Spark的主要编程语言,但Spark还支持Java、Python、R 作为编程语言
- Scala的优势是提供了REPL(Read-Eval-Print Loop,交互式解释 器),提高程序开发效率
Spark与Hadoop的对比
-
Hadoop存在如下一些缺点:
- 表达能力有限
- 磁盘IO开销大
- 延迟高
- 任务之间的衔接涉及IO开销
- 在前一个任务执行完成之前,其他任务就无法开始,难以 胜任复杂、多阶段的计算任务
-
Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了 MapReduce所面临的问题。相比于Hadoop MapReduce,Spark主要具有如下优点:
- Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作, 还提供了多种数据集操作类型,编程模型比Hadoop MapReduce更灵活
- Spark提供了内存计算,可将中间结果放到内存中,对于迭代运算效率 更高
- Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭 代执行机制
-
Hadoop与Spark的执行流程对比
-
使用Hadoop进行迭代计算非常耗资源
-
Spark将数据载入内存后,之后的迭代计算都可以直接使用内存中的中间结果 作运算,避免了从磁盘中频繁读取数据
-
二、Spark生态系统
-
在实际应用中,大数据处理主要包括以下三个类型:
- 复杂的批量数据处理:通常时间跨度在数十分钟到数小时 之间
- 基于历史数据的交互式查询:通常时间跨度在数十秒到数 分钟之间
- 基于实时数据流的数据处理:通常时间跨度在数百毫秒到 数秒之间
-
当同时存在以上三种场景时,就需要同时部署三种不同的软件
- 这样做难免会带来一些问题:
- 不同场景之间输入输出数据无法做到无缝共享,通常需要进行数据格 式的转换
- 不同的软件需要不同的开发和维护团队,带来了较高的使用成本
- 比较难以对同一个集群中的各个系统进行统一的资源协调和分配
- 这样做难免会带来一些问题:
-
Spark的设计遵循“一个软件栈满足不同应用场景”的理念,逐 渐形成了一套完整的生态系统。
- 既能够提供内存计算框架,也可以支持SQL即席查询、实时流式 计算、机器学习和图计算等
- Spark可以部署在资源管理器YARN之上,提供一站式的大数据解 决方案
- 因此,Spark所提供的生态系统足以应对上述三种场景,即同时 支持批处理、交互式查询和流数据处理
-
Spark生态系统已经成为伯克利数据分析软件栈BDAS(Berkeley Data Analytics Stack)的重要组成部分
-
Spark的生态系统主要包含了Spark Core、Spark SQL、Spark Streaming、 MLLib和GraphX 等组件
-
Spark生态系统组件的应用场景
三、Spark运行架构
基本概念
- RDD:是Resillient Distributed Dataset(弹性分布式数据集)的简称,是分 布式内存的一个抽象概念,提供了一种高度受限的共享内存模型
- DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的 依赖关系
- Executor:是运行在工作节点(WorkerNode)的一个进程,负责运行Task
- Application:用户编写的Spark应用程序
- Task:运行在Executor上的工作单元
- Job:一个Job包含多个RDD及作用于相应RDD上的各种操作
- Stage:是Job的基本调度单位,一个Job会分为多组Task,每组Task被称 为Stage,或者也被称为TaskSet,代表了一组关联的、相互之间没有 Shuffle依赖关系的任务组成的任务集
架构设计
-
与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:
-
一是利用多线程来执行具体的任务,减少任务的启动开销
-
二是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为 存储设备,有效减少IO开销
-
-
一个Application由一个Driver和若干个Job构成,一个Job由多个Stage构成, 一个Stage由多个没有Shuffle关系的Task组成。当执行一个Application时,Driver会向集群管理器申请资源,启动Executor, 并向Executor发送应用程序代码和文件,然后在Executor上执行Task,运行 结束后,执行结果会返回给Driver,或者写到HDFS或者其他数据库中
Spark运行基本流程
- 基本流程
- 首先为应用构建起基本的运 行环境,即由Driver创建一个 SparkContext,进行资源的申请、 任务的分配和监控
- 资源管理器为Executor分配资 源,并启动Executor进程
- SparkContext根据RDD的依赖 关系构建DAG图,DAG图提交给 DAGScheduler解析成Stage,然后 把一个个TaskSet提交给底层调度器 TaskScheduler处理;Executor向 SparkContext申请Task,Task Scheduler将Task发放给Executor运 行,并提供应用程序代码
- Task在Executor上运行,把执 行结果反馈给TaskScheduler,然后 反馈给DAGScheduler,运行完毕后 写入数据并释放所有资源
- 总体而言,Spark运行架构具有以下特点:
- 每个Application都有自己专属的Executor进程,并 且该进程在Application运行期间一直驻留。Executor进 程以多线程的方式运行Task
- Spark运行过程与资源管理器无关,只要能够获取 Executor进程并保持通信即可
- Task采用了数据本地性和推测执行等优化机制
RDD运行原理
-
设计背景
- 许多迭代式算法(比如机器学习、图算法等)和交互式数据 挖掘工具,共同之处是,不同计算阶段之间会重用中间结果
- 目前的MapReduce框架都是把中间结果写入到HDFS中,带 来了大量的数据复制、磁盘IO和序列化开销
- RDD就是为了满足这种需求而出现的,它提供了一个抽象 的数据架构,我们不必担心底层数据的分布式特性,只需将 具体的应用逻辑表达为一系列转换处理,不同RDD之间的 转换操作形成依赖关系,可以实现管道化,避免中间数据存 储
-
RDD概念
-
一个RDD就是一个分布式对象集合,本质上是一个只读的 分区记录集合,每个RDD可分成多个分区,每个分区就是 一个数据集片段,并且一个RDD的不同分区可以被保存到 集群中不同的节点上,从而可以在集群中的不同节点上进 行并行计算
-
RDD提供了一种高度受限的共享内存模型,即RDD是只读 的记录分区的集合,不能直接修改,只能基于稳定的物理 存储中的数据集创建RDD,或者通过在其他RDD上执行确 定的转换操作(如map、join和group by)而创建得到新的 RDD
-
RDD提供了一组丰富的操作以支持常见的数据运算,分为 “动作”(Action)和“转换”(Transformation)两种类 型
-
RDD提供的转换接口都非常简单,都是类似map、filter、 groupBy、join等粗粒度的数据转换操作,而不是针对某个数 据项的细粒度修改(不适合网页爬虫)
-
表面上RDD的功能很受限、不够强大,实际上RDD已经被实 践证明可以高效地表达许多框架的编程模型(比如 MapReduce、SQL、Pregel)
-
Spark用Scala语言实现了RDD的API,程序员可以通过调用 API实现对RDD的各种操作
-
RDD典型的执行过程如下:
- RDD读入外部数据源进行创建
- RDD经过一系列的转换(Transformation)操作,每一次都会产生不同的 RDD,供给下一个转换操作使用
- 最后一个RDD经过“动作”操作进行转换,并输出到外部数据源
这一系列处理称为一个Lineage(血缘关系),即DAG拓扑排序的结果 优点:惰性调用、管道化、避免同步等待、不需要保存中间结果、每次 操作变得简单
-
-
RDD特性
- Spark采用RDD以后能够实现高效计算的原因主要在于:
- 高效的容错性
- 现有容错机制:数据复制或者记录日志
- RDD:血缘关系、重新计算丢失分区、无需回滚系 统、重算过程在不同节点之间并行、只记录粗粒度 的操作
- 中间结果持久化到内存,数据在内存中的多个RDD操 作之间进行传递,避免了不必要的读写磁盘开销
- 存放的数据可以是Java对象,避免了不必要的对象序 列化和反序列化
- 高效的容错性
- Spark采用RDD以后能够实现高效计算的原因主要在于:
-
RDD之间的依赖关系
-
窄依赖表现为一个 父RDD的分区对应 于一个子RDD的分 区或多个父RDD的 分区对应于一个子 RDD的分区
-
宽依赖则表现为存 在一个父RDD的一 个分区对应一个子 RDD的多个分区
-
-
Stage的划分
-
Spark通过分析各个RDD的依赖关系生成了DAG,再通过分 析各个RDD中的分区之间的依赖关系来决定如何划分Stage, 具体划分方法是:
-
在DAG中进行反向解析,遇到宽依赖就断开
-
遇到窄依赖就把当前的RDD加入到Stage中
-
将窄依赖尽量划分在同一个Stage中,可以实现流水线计算
-
-
被分成三个Stage,在Stage2中,从map到union都是窄依 赖,这两步操作可以形成一个流水线操作。流水线操作实例:
-
分区7通过map操 作生成的分区9, 可以不用等待分 区8到分区10这个 map操作的计算 结束,而是继续 进行union操作, 得到分区13,这 样流水线执行大 大提高了计算的 效率
-
-
Stage的类型包括两种:ShuffleMapStage和ResultStage,具体如下:
- ShuffleMapStage:不是最终的Stage,在它之后还有其他Stage, 所以,它的输出一定需要经过Shuffle过程,并作为后续Stage的输入;这 种Stage是以Shuffle为输出边界,其输入边界可以是从外部获取数据,也 可以是另一个ShuffleMapStage的输出,其输出可以是另一个Stage的开 始;在一个Job里可能有该类型的Stage,也可能没有该类型Stage;
- ResultStage:最终的Stage,没有输出,而是直接产生结果或存储。 这种Stage是直接输出结果,其输入边界可以是从外部获取数据,也可以 是另一个ShuffleMapStage的输出。在一个Job里必定有该类型Stage。 因此,一个Job含有一个或多个Stage,其中至少含有一个ResultStage。
-
-
RDD运行过程
通过上述对RDD概念、依赖关系和Stage划分的介绍,结合之前介绍的Spark 运行基本流程,再总结一下RDD在Spark架构中的运行过程:
-
创建RDD对象;
-
SparkContext负责计算RDD之间的依赖关系,构建DAG;
-
DAGScheduler负责把DAG图分解成多个Stage,每个Stage中包含了多 个Task,每个Task会被TaskScheduler分发给各个WorkerNode上的Executor 去执行。
-
四、Spark SQL
从Shark说起
-
Shark即Hive on Spark,为了实现与Hive兼 容,Shark在HiveQL方面重用了Hive中 HiveQL的解析、逻辑执行计划翻译、执行 计划优化等逻辑,可以近似认为仅将物理执 行计划从MapReduce作业替换成了Spark作 业,通过Hive的HiveQL解析,把HiveQL翻 译成Spark上的RDD操作。
-
Shark的设计导致了两个问题:
-
一是执行计划优化完全依赖于Hive,不 方便添加新的优化策略;
-
二是因为Spark是线程级并行,而 MapReduce是进程级并行,因此, Spark在兼容Hive的实现上存在线程安 全问题,导致Shark不得不使用另外一 套独立维护的打了补丁的Hive源码分支
-
Spark SQL设计
-
Spark SQL在Hive兼容层面仅依赖HiveQL解析、Hive元数据,也就是说,从 HQL被解析成抽象语法树(AST)起,就全部由Spark SQL接管了。Spark SQL执行计划生成和优化都由Catalyst(函数式关系查询优化框架)负责
-
Spark SQL增加了SchemaRDD(即带有Schema信息的RDD),使用户 可以在Spark SQL中执行SQL语句,数据既可以来自RDD,也可以是 Hive、HDFS、Cassandra等外部数据源,还可以是JSON格式的数据。
Spark SQL目前支持Scala、Java、Python三种语言,支持SQL-92规范
五、Spark的部署和应用方式
Spark三种部署方式
-
Spark支持三种不同类型的部署方式,包括:
-
Standalone(类似于MapReduce1.0,slot为资源分配单位)
-
Spark on Mesos(和Spark有血缘关系,更好支持Mesos)
-
Spark on YARN
-
从Hadoop+Storm架构转向Spark架构
-
用Spark架构具有如下优点:
- 实现一键式安装和配置、线程级别 的任务监控和告警
- 降低硬件集群、软件维护、任务监 控和应用开发的难度
- 便于做成统一的硬件、计算平台资 源池
-
需要说明的是,Spark Streaming无法 实现毫秒级的流计算,因此,对于需 要毫秒级实时响应的企业应用而言, 仍然需要采用流计算框架(如Storm)
Hadoop和Spark的统一部署
-
由于Hadoop生态系统中的一些组件所实现的功能,目前还是无法由 Spark取代的,比如,Storm
-
现有的Hadoop组件开发的应用,完全转移到Spark上需要一定的成本
不同的计算框架统一运行在YARN中,可以带来如下好处:
- 计算资源按需伸缩
- 不用负载应用混搭,集群利用率高
- 共享底层存储,避免数据跨集群迁移
4-理解数据
一、数据理解的主要任务
-
数据理解在统计学中称为exploratory data analysis(EDA)
- 借助人类对数据的观察和“模式”识别能
- 对数据进行初步研究,以便更好地理解它的特性
- 有助于选择合适的数据预处理和数据分析、挖掘技术
-
任务一:每个属性取值分布统计
-
对给定数据集的各个属性的取值分布情况进行统计 概括。例:结构化的信贷数据集
-
-
任务二:多个属性取值分布统计
-
对给定数据集的多个属性的取值分布情况进行统计概括
-
例如,利用散点图查看属性之间具有的相关性,数据的分布情况
-
-
任务三:数据的总体质量评估
-
数据存在误差属性值缺失噪声和不一致性等潜在的数据质量 问题
-
例:原始的信贷数据集
-
-
理解数据的主要方法
- 汇总统计方法(Summary statistics),或称为概况性统计 描述
- 传统可视化方法(Visualization)
- 包括OLAP(Online Analytical Processing)
- 基于数据挖掘结果的可视化方法
- 通过聚类、离群点检测的结果分析数据的特点
- 高维数据的低维嵌入(low-dimensional embedding)可视化
二、基于统计描述的数据理解方法
集中趋势(central tendency)度量
- 数值型数据
- 均值
- 分位数
- 几何均值
- 类别型数据
- 众数
-
数值型数据的集中趋势度量方法
-
均值
-
中位数
-
四分数
-
几何平均数
-
-
类别型数据的集中趋势度量方法
-
众数(mode):一组数据中出现频率最高的属性值
-
-
集中趋势度量方法比较
散布(spread)程度度量
- 数值型数据
- 极差
- 四分位距
- 方差、标准差类别型数据
- 类别数据
- 异众比率
-
数值型数据的散布程度度量方法
-
极差
-
四分位距
-
方差、标准差类别型数据
-
-
类别型数据的散布程度度量方法
-
异众比率
-
-
散布程度度量方法比较
偏态度量
-
偏态(skewness)是描述数值型数据分布的对称性的度量指 标
-
数据分布的对称性可以分为对称、左偏或右偏
-
在数据分布的统计描述中,偏态度量是集中趋势度量和散布度量的有益补充
-
例:某地收入统计
-
峰度度量
- 数据分布的峰度是描述数值型数据分布的几何形态陡峭程度的统计
- 以正态分布为基准定义的

三、数据可视化方法
数据可视化
- 可视化是将数据转换为可视的形式,以图形或表格的形式显 示信息,以便能够借此分析数据的特征,以及数据项或属性 之间的关系
- 数据可视化是理解数据的重要工具
- 人类具有分析大量视觉信息的能力
- 可以检测普遍模式和趋势
- 可以检测异常值和异常模式
可视化的发展历程
-
一个经典之作:反映霍乱患者分布与水井分布的地图
- 霍乱地图分析了霍乱患 者分布与水井分布之间 的关系,发现在有一口 井的供水范围内患者明 显偏多,据此找到了霍 乱爆发的根源是一个被 污染的水泵
-
数据可视化历史上的另一个 经典之作是1857年“提灯女 神”南丁格尔设计的“鸡冠 花图”(又称玫瑰图)
- 它以 图形的方式直观地呈现了英 国在克里米亚战争中牺牲的 战士数量和死亡原因,有力 地说明了改善军队医院的医 疗条件对于减少战争伤亡的 重要性
-
20世纪50年代,随着计算机出现和计算机图形 学发展,利用计算机技术在电脑屏幕上绘制出各 种图形图表,可视化技术开启了全新发展阶段

可视化的重要作用
-
观测、跟踪数据
-
例如百度地图显示的北京市实时交通路况信息
-
-
交互式分析数据
-
例如用户参与的可视化分析过程
-
-
辅助理解数据
-
例如微软“人立方”展示的人物关系图
-
-
增强数据吸引力
-
例如一个可视化的图表新闻实例
-
可视化图表
-
最常用的统计图表类型及其应用场景:
-
条柱图:用于类别型数据:图中每一个类别的计数统计以“条柱”的 形式展示,其中数据的类别的频次比较以“条柱”的高度作 为评判标准。
-
漏斗图
-
树图
-
热力图
-
关系图(这是关系图?确定不是随便找的网图吗QwQ)
-
词云
-
桑基图
-
日历图
-
直方图
-
直方图用于数值型数据:数值属性值频次的统计可视化。
-
其横坐标为数值的取值跨度,纵坐标为数值的频率或频次
-
-
散点图
-
散点图主要应用于数值型数据,其作用主要是观察两个(或 三个)数值型属性的数据之间的关联性
-
散点图可以直观的反映集中数据和离群数据的分布,还能直 接反映数据集内存在的分组情况,还可反映属性组合的数据 区分能力
-
鸢尾花数据集及散点矩阵:

-
-
箱线图
-
数值型属性,五数归纳(Five Number Summary)
-
Minimum, Q1(25%), Median, Q3(75%), Maximum
-
箱线图(Box Plots)
-
另一种显示数据分布的方法
-
箱线图的箱体:四分位距(IQR, Interquartile range), IQR =Q3-Q1
-
上下边缘(whisker):
- min(Q3+1.5IQR, Maximum)
- max(Q1-1.5IQR, Minimum)
-
这样计算上下边缘可区分异常值
-
-
箱线图应用示例:箱线图可以用来比较属性的类区分能力(discrimination capability)
-
-
数据矩阵图
-
数据矩阵图,将数值映射到不同的颜色上,从而可以将一张 数据规模不大的表进行可视化
-
例:1949-1960年各月的航班飞行次数累积表
-
-
雷达图
-
可对每一个(类)多维数据对象进行可视化
-
-
平行坐标图
-
平行坐标系(Parallel Coordinates )
- 用于绘制高维数据的属性值
- 使用一组平行坐标轴
- 对象每个属性的值被绘制为对应坐标轴上的点,将这些点用线连接 起来
- 因此,每个对象表示为一条线
- 通常,对象趋于分成少数几个组,组内的点具有类似的属性值
- 在查看此类分组时,对属性进行排序非常重要
-
平行坐标图示例
-
可视化工具
-
入门级工具
- Excel是微软公司的办公软件Office家族的系列软件之一,可以进行 各种数据的处理、统计分析和辅助决策操作,已经广泛地应用于管理、 统计、金融等领域
-
信息图表工具
信息图表是信息、数据、知识等的视觉化表达,它利用人脑对于图 形信息相对于文字信息更容易理解的特点,更高效、直观、清晰地传递信 息,在计算机科学、数学以及统计学领域有着广泛的应用。
-
Google Chart API
-
谷歌公司的制图服务接口Google Chart API,可以用来为统计数据并自 动生成图片,该工具使用非常简单,不需要安装任何软件,可以通过浏 览器在线查看统计图表
-
-
ECharts
-
ECharts是由百度公司前端数据可视化团队研发的图表库,可以流畅地运行在 PC和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11、Chrome、Firefox、 Safari等),底层依赖轻量级的、Canvas类库ZRender,可以提供直观、生动、 可交互、可高度个性化定制的数据可视化图表
-
-
D3
-
D3是最流行的可视化库之一,是一个用于网页作图、生成互动图形的 JavaScript函数库,提供了一个D3对象,所有方法都通过这个对象调用。 D3能够提供大量线性图和条形图之外的复杂图表样式,例如Voronoi图、 树形图、圆形集群和单词云等。
-
-
Tableau
-
Tableau是桌面系统中最简单的商业智能工具软件,更适合企业和部门进 行日常数据报表和数据可视化分析工作。Tableau实现了数据运算与美观 的图表的完美结合,用户只要将大量数据拖放到数字“画布”上,转眼 间就能创建好各种图表。
-
-
大数据魔镜
- 大数据魔镜是一款优秀的国产数据分析软件,它丰富的数据公式和算法 可以让用户真正理解探索分析数据,用户只要通过一个直观的拖放界面 就可创造交互式的图表和数据挖掘模型。
-
-
地图工具
地图工具在数据可视化中较为常见, 它在展现数据基于空间或地理分布上 有很强的表现力,可以直观地展现各 分析指标的分布、区域等特征。当指 标数据要表达的主题跟地域有关联时, 就可以选择以地图作为大背景,从而 帮助用户更加直观地了解整体的数据 情况,同时也可以根据地理位置快速 地定位到某一地区来查看详细数据。 右图就是以数据地图形式呈现的 2008年世界各地区GDP数据。
- Google Fusion Tables
- Google Fusion Tables让一般使用者也可以轻松制作出专业的统计地图。 该工具可以让数据表呈现为图表、图形和地图,从而帮助发现一些隐藏在 数据背后的模式和趋势。
- Modest Maps
- Modest Maps是一个小型、可扩展、交互式的免费库,提供了一套查看卫 星地图的API,只有10KB大小,是目前最小的可用地图库,它也是一个开 源项目,有强大的社区支持,是在网站中整合地图应用的理想选择。
- Leaflet
- Leaflet是一个小型化的地图框架,通过小型化和轻量化来满足移动网页的 需要。
- Google Fusion Tables
-
时间线工具
时间线是表现数据在时间维度的演变的有效方式,它通过互联网技术, 依据时间顺序,把一方面或多方面的事件串联起来,形成相对完整的记录 体系,再运用图文的形式呈现给用户。时间线可以运用于不同领域,最大 的作用就是把过去的事物系统化、完整化、精确化。
- Timetoast
- Timetoast是在线创作基于 时间轴事件记载服务的网站, 提供个性化时间线服务,可 用不同的时间线来记录你某 个方面的发展历程、心理路 程、进度过程等Timetoast 基于flash平台,操作简单
- Xtimeline
- Xtimeline 是一个免费的绘 制时间线的在线工具网站 ,操作简便,用户通过添 加事件日志的形式构建时 间表,同时也可给日志配 上相应的图表。Xtimeline 是一个社区类型的间轴网站
- Timetoast
-
高级分析工具
- R
- R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于 统计计算和统计制图的优秀工具,使用难度较高。R的功能包括数据存储 和处理系统、数组运算工具(具有强大的向量、矩阵运算功能)、完整连 贯的统计分析工具、优秀的统计制图功能、简便而强大的编程语言,可操 纵数据的输入和输出,实现分支、循环以及用户可自定义功能等,通常用 于大数据集的统计与分析。
- Weka
- Weka是一款免费的、基于Java环境的、开源的机器学习以及数据挖掘软 件,不但可以进行数据分析,还可以生成一些简单图表。
- Gephi
- Gephi是一款比较特殊也很复杂的软件,主要用于社交图谱数据可视化分 析,可以生成非常酷炫的可视化图形。
- Python
- Python是一种面向对象的解释型计算机程序设计语言,由荷兰人吉多•范罗 苏姆(Guido van Rossum)于1989年发明。Python可视化库可以大致分为: 基于matplotlib的可视化库、基于JavaScript的可视化库、基于上述两者或 其他组合功能的库。
- R
可视化典型案例
-
全球黑客活动
安全供应商Norse打造了一张能够反映全球范围内黑客攻击频率的地图 (http://map.ipviking.com),它利用Norse 的“蜜罐”攻击陷阱显示出所有 实时渗透攻击活动。如图所示,地图中的每一条线代表的都是一次攻击活动, 借此可以了解每一天、每一分钟甚至每一秒世界上发生了多少次恶意渗透。
-
互联网地图
为了探究互联网这个庞大的宇宙,俄罗斯工程师 Ruslan Enikeev 根据 2011 年底的 数据,将全球 196 个国家的 35 万个网站数据整合起来,并根据 200 多万个网站链接 将这些“星球”通过关系链联系起来,每一个“星球”的大小根据其网站流量来决定, 而“星球”之间的距离远近则根据链接出现的频率、强度和用户跳转时创建的链接来 确定,由此绘制得到了“互联网地图”(http://internet-map.net)。
-
编程语言之间的影响力关系图
Ramio Gómez利用来自Freebase上的编程语言维护表里的数据,绘制了编程语言之 间的影响力关系图,图中的每个节点代表一种编程语言,之间的连线代表该编程语言 对其他语言有影响,有影响力的语言会连线多个语言,相应的节点也会越大。
-
世界国家健康与财富之间的关系
“世界国家健康与财富之间的关系”利用可视化技术,把世界上200个国家,从1810年 到2010年历时200年其各国国民的健康、财富变化数据(收集了1千多万个数据)制作成 三维动画进行了直观展示(http://www.moojnn.com/Index/whn)。
5-大数据技术综合运用
一、案例任务
-
电影推荐系统可根据用户 的喜好,向用户推荐可能 感兴趣的电影
二、系统设计
-
设计开发工作:网站、电影推荐程序、数据库
-
网站、电影推荐程序和数据库三个部分之间的关系:
-
数据库:
-
电影推荐系统的网页跳转示意图
-
算法设计
-
电影推荐程序的设计是电影推荐系统设计的核心
-
采用基于ALS矩阵分解的协同过滤算法
-
把评分高的电影推荐给该用户
-
三、技术选择和系统实现
-
技术选择:
-
系统实现技术
-
系统实现:
大数据技术概览:Hive、Spark与数据理解
4406





