资源描述
-商业数据的分析、挖掘和应用华东师范大学出版社 数据可视化的定义,分类及工具。 根据类别分别阐述了数据可视化的方法和具体实现过程。 多维信息可视化的定义,分类及实现。 数据可视化包含科学可视化与信息可视化两个分支。 信息可视化技术通过对数据进行交互的可视化表达,以增强认知,并从中发现规律和获取知识。 信息可视化的工具有很多,本章主要介绍Excel和R两种工具的绘图方法。 基于比较的绘图 基于分布的绘图 基于组合的绘图 基于关系的绘图 基于时间的绘图 用来比较的变量通常是条目相关或者是事件相关的变量。 对于条目相关变量,较适合使用柱形图或条形图; 对于时间相关变量,较适合使用柱形图或折线图。 柱形图用来显示不同时间内数据的变化情况,或用于对各项数据进行比较,是最普通的商用图表种类。 主要由图表标题、坐标轴标题、图例、主体等构成。 按形状分,可以分为二维柱形图、三维柱形图、圆柱图、圆锥图以及棱锥图等;按功能分,柱形图包括簇状柱形图、堆积柱形图、百分比堆积柱形图等。 下面分别介绍这几种图形及其示例。 簇状柱形图主要用于比较各个时间、各个类别的数值,它以二维垂直矩形显示数值。除二维簇状柱形图外,簇状柱形图还可以用三维格式显示,三维簇状柱形图可以变形为三维簇状圆柱图、三维簇状圆锥图和三维簇状棱锥图几种形式。 簇状柱形图三维簇状柱形图 三维簇状圆柱图 三维簇状圆锥图三维簇状棱锥图图9-1. 簇状柱形图 堆积柱形图将每个类别的所有序列在单个柱形中堆积显示。每个柱形的高度由相应类别的所有序列值的总和确定。 堆积柱形图只要用于表征单个项目和整体之间的关系,能够比较每个类别的每个数值所占总数值的大小,特别适合具有多个数据系列且希望强调总数值的场合。 堆积柱形图 三维堆积柱形图 三维堆积圆柱图 三维堆积圆锥图 三维堆积棱锥图 图9-2. 堆积柱形图 百分比堆积柱形图将每个类别的所有序列在单个柱形中堆积显示,每个柱形始终与图表等高,其序列值按每个柱形的百分比形式显示。 百分比堆积柱形图是以百分比形式比较各类别的值在总和中的分布情况,这种图表也可以以三维效果显示,包括三维百分比堆积柱形图、三维百分比堆积圆柱图、三维百分比堆积圆锥图、三维百分比堆积棱锥图4种形式。 百分比堆积柱形图三维百分比堆积柱形图三维百分比堆积圆柱图三维百分比堆积圆锥图 三维百分比堆积棱锥图图9-3. 百分比堆积柱形图 三维柱形图使用可修改的三个轴(水平轴、垂直轴、深度轴),来对沿水平轴和深度轴分布的数据点进行比较。在需要对均匀分布在各类别和各系列的数据进行比较时,可以使用三维柱形图。 三维柱形图三维圆柱图三维圆锥图三维棱锥图图9-4. 三维柱形图 见word文档 柱形图的创建.doc 条形图可以对多个项目进行对比,显示各个项目之间的比较情况。这是唯一一种可以水平方式显示的数据的图表类型,主要由标题、图例、坐标轴、主体等构成。条形图是用于比较多个值的最佳图表类型。 条形图将序列显示为若干组水平图条,其中的数据具有一定的可比性。 簇状条形图主要用于比较各个类别的数值,它还可以用三维效果显示(即三维簇状条形图),这种图表将每个序列分别显示在三维图表的单独行中。 三维簇状条形图也有多种变体,它们是用圆柱体表示图条的簇状水平圆柱图、用圆锥体表示图条的簇状水平圆锥图和用棱锥体表示图条的簇状水平棱锥图。 三维簇状条形图 三维簇状圆柱条形图三维簇状圆锥条形图三维簇状棱锥条形图图9-5. 簇状条形图 堆积条形图将每个类别的所有序列在单个条形中堆积显示。每个条形的长度由相应类别的所有序列值的总和确定。 堆积条形图只要用于表征单个项目和整体之间的关系,能够比较每个类别的每个数值所占总数值的大小,特别适合具有多个数据系列且希望强调总数值的场合。 堆积条形图也可以用三维效果的形式显示。(即三维堆积条形图) 堆积条形图三维堆积条形图堆积水平圆柱图堆积水平圆锥图 堆积水平棱锥图图9-6. 堆积条形图 百分比堆积条形图是一种包括多个序列垂直堆积并占满图表区的条形图,它以百分比形式比较各类别的值在总和中的分布情况。 百分比堆积条形图也可以以三维效果显示,即三维百分比堆积条形图,如图所示。三维百分比堆积条形图有3种变体,它们分别是百分比堆积水平柱形图、百分比堆积水平圆锥图、百分比堆积水平棱锥图 百分比堆积条形图三维百分比堆积条形图 百分比堆积水平柱形图百分比堆积水平圆锥图 百分比堆积水平棱锥图图9-7. 百分比堆积条形图 见word文档 条形图的创建.doc 折线图是一种用直线段将各数据点连接起来而组成的图形,它以折线方式显示数据的变化趋势。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。 折线图主要由标题、坐标轴、图例和主题构成。 在折线图中,类别数据沿水平轴均匀分布,所有值数据沿垂直轴均匀分布。 折线图的种类很多,有折线图和带数据标记的折线图、堆积折线图和带数据标记的堆积折线图、百分比堆积折线图及带数据标记的百分比堆积折线图以及三维折线图等。 折线图显示了数值随时间变化的趋势,为了清晰地表明单个数据值的点,可以使用带数据标记的直线图。类别顺序很重要或者存在许多数据点的情况适宜使用。折线图 带数据标记的折线图图9-7. 折线图 积折线图用于显示每一数值所占大小随时间或有序类别变化的趋势。因为堆积折线图难于阅读,所以可以考虑改用堆积面积图。堆积折线图带数据标记的堆积折线图图9-8. 堆积折线图 百分比堆积折线图用于显示每一数值所占百分比随时间或有序类别而变化的趋势 百分比堆积折线图带数据标记的百分比堆积折线图图9-9. 百分比折线图 在三个坐标轴上,以三维条带的形式显示每个数据行或数据列,包含可修改的水平轴、垂直轴和深度轴。 图9-10. 三维折线图 见word文档 折线图的创建.doc 散点图将系列显示为一组点,其值由点在图表空间中的位置表示,类别由图表中的不同点表示。散点图一般用于比较跨类别的不同值。 散点图主要由标题、坐标轴和主体构成。 散点图将工作表中的列/行数据以数据点的形式绘制到图中,这种图表表征了多个数据系列中各数值之间的关系,它包括带数据标记的散点图、带直线的散点图、带直线和数据标记的散点图、带平滑线的散点图、带平滑线和数据标记的散点图。 我们将以公司产量情况表(数据自编)为例来制作相关图形,见下页。 时间A公司产量(万吨)B公司产量(万吨)2 0 0 5 2 3 4 72 0 0 6 2 2 4 32 0 0 7 2 5 4 02 0 0 8 2 5 4 12 0 0 9 2 5 3 92 0 1 0 3 5 3 62 0 1 1 2 6 3 22 0 1 2 2 5 3 82 0 1 3 2 5 3 8 仅带数据标记的散点图根据值系列的X值和Y值将每个值系列显示为图表空间中的不同数据点。典型的散点图包含有值得非聚合表达式,值图表区中X的表达式和类别组的表达式通常也是相同的。虽然类别组和系别组是可选的,但是必须至少选择其中一个组,才能在图表中显示有意义的数据。 图9-11. 散点图示例 折线散点图的数据点之间可以显示也可以不显示折线。显示连接线时可以显示标记,也可以不显示标记。带折线的散点图带折线和数据标记的散点图图9-12. 带折线的散点图示例 平滑线散点图的数据点用曲线连接,显示连接线时可以显示标记,也可以不显示标记。 带平滑线的散点图带平滑线和数据标记的散点图 见word文档 散点图的创建.doc 气泡图可以将数据序列显示为一组符号,其不同的值由相应点在图表空间中的位置以及符号的大小表示,类别在图表中以不同的符号形式表示。 构成要素主要由标题、图例、坐标轴和主体等构成。 气泡图分为普通气泡图和三维气泡图两种类型。 通气泡图在图表空间中根据值序列的X值和Y值以数据点的形式显示各个值序列。另一个值Z确定数据点的符号的大小。虽然类别组和序列组是可选的,但是必须选择其中一种,才能在图表中显示有意义的数据。 图9-13. 气泡图示例 维气泡图以3个数值为一组对数据进行比较,且可以三维效果显示。气泡的大小为数据标记表示第3个变量的值。 图9-14. 三维气泡图示例 见word文档 气泡图的创建.doc 对于组合型数据,数据类型可分为静态(Static)与时变(Changing Over Time)两种。 当数据处静态时,若强调部分在总量中的比例,可选择饼图;若强调部分中的部分,可使用带有子部件的完全堆砌柱形图。 当数据处时变时,若周期数较多,适合使用堆砌柱形图或完全堆砌柱形图;若周期数较少,适合使用堆砌面积图或完全堆砌面积图。 饼图一般用于显示组成数据系列的项目在项目总和中所占的比例。在饼图中,一般只显示出一个数据系列。饼图非常适合需要强调数据中的某个重要元素的场合。 饼图一般由图表标题、图例和主体构成(没有坐标轴)。 饼图显示了各个值在总和中的分布情况,即将数据显示为整体的一定比例。饼图上没有轴,在其中放置上某个数值字段后,这种图表会计算每个值相对总计的百分比。饼图也有多种变体形式,常见的有分离型饼图、复合饼图、复合条饼图、三维饼图和分离型三维饼图。 离型饼图的所有切片均从饼图中心向外发散。这种饼图显示了各个值在总和中的分布情况,同时强调了各个值的重要性。 图9-15. 分离型饼图 复合饼图将用户定义的值提取出来,然后显示在另一个饼图中。 图9-16. 复合饼图 复合条饼图可以将用户定义的数据提取出来,然后显示在另一个堆积条形图中。 图9-17. 复合条饼图 三维饼图是普通的立体化表示形式,这种饼图的特点是立体感较强,能使数据更具有视觉冲击力。 图9-18.三维饼图 分离型三维饼图是分离型饼图的立体化表示形式图9-19.分离型三维饼图 见word文档 饼图的创建.doc 面积图可以强调值的大小随时间的变化情况,可用于引起人们对总趋势的注意。面积图将数据序列表示为一组由一条线连接的点,而且填充连接线下方的所有区域,从而直观地显示所有出有序的总计以及每个序列在总计中所占的比例。 面积图主要由标题、坐标轴、图例和主体构成。 面积图包括普通面积图、堆积面积图和百分比堆积面积图,每种面积图都有二维图形和三维图形之分。 面积图能够很好地显示数值随时间或类别的变化趋势,它也可以采用三维图形来表示。通过显示已绘制的值的总和,面积图还可以显示部分与整体的关系。 将以2000年至2012年的全国职工平均工资(数据来自上海统计网)为例,见表2。 年份职工平均工资(元)2 0 0 0 1 5 4 2 02 0 0 1 1 7 7 6 42 0 0 2 1 9 4 7 32 0 0 3 2 2 1 6 02 0 0 4 2 4 3 9 82 0 0 5 2 6 8 2 32 0 0 6 2 9 5 6 92 0 0 7 3 4 7 0 72 0 0 8 3 9 5 0 22 0 0 9 4 2 7 8 92 0 1 0 4 6 7 5 7 2 0 1 1 5 1 9 6 82 0 1 2 5 6 3 0 0 图9-20.面积图图9-21.三维面积图 如果多个序列中的值相似,普通面积图的面积可能会发生重叠,从而遮挡重要的数据点值。这种情况下,可以使用堆积面积图,以便在面积图上显示多个序列。堆积面积图用于显示各个值的分布随时间或类别的变化趋势,它也可以用三维效果表示。 将以2000年至2012年的全国国有单位、集体单位、其他单位的职工平均工资(数据来自上海统计网)为例。 国有单位工资(元)集体单位(元)其他单位(元)2 0 0 0 1 5 7 3 7 8 0 4 1 1 7 9 4 22 0 0 1 1 7 8 2 0 8 5 2 5 2 0 8 6 52 0 0 2 1 9 7 7 7 8 7 0 7 2 1 8 8 62 0 0 3 2 2 5 4 1 9 8 4 4 2 4 3 5 92 0 0 4 2 4 7 2 6 1 1 5 3 9 2 6 2 7 02 0 0 5 2 8 8 0 3 1 2 8 1 9 2 6 7 9 22 0 0 6 3 6 0 1 0 1 5 2 0 9 2 7 4 5 92 0 0 7 4 6 4 2 6 1 9 2 4 4 3 0 6 8 72 0 0 8 5 3 5 5 4 2 1 7 8 7 3 5 1 8 02 0 0 9 6 2 3 9 0 2 5 3 9 0 3 7 1 0 42 0 1 0 7 0 5 8 5 2 8 2 2 5 4 0 3 9 7 2 0 1 1 7 9 5 4 1 4 2 0 1 0 4 6 3 1 42 0 1 2 8 6 0 4 2 4 5 9 9 0 5 1 0 3 5 图9-22.堆积面积图 图9-23.三维堆积面积图 分比堆积面积图将多个序列垂直堆积,从而占满整个图表区,这种图表以百分比方式显示各个值的分布时间或类别的变化趋势,百分比堆积面积图也可以用三维效果表示。 图9-24.百分比堆积面积图 图9-25.三维百分比堆积面积图 见word文档 面积图的创建.doc 对于分布型图表,当只有一个变量时,可以选择使用直方图、 核密度图或箱线图;当有两个变量时,可以选择散点图。 这节主要讲直方图、核密度图以及箱线图的概念和绘制方法。 直方图通过在X 轴上将值域分割为一定数量的组,在Y 轴上显示相应值的频数,展示了连续型变量的分布 用R语言绘制直方图可以使用如下函数: hist() require(stats) set.seed(14) x - rchisq(100, df=4) hist(x, freq=FALSE, ylim=c(0,0.2) curve(dchisq(x, df=4), col=2, lty=2, lwd=2, add=TRUE) 其中的x是一个由数据值组成的数值向量。参数freq=FALSE表示根据概率密度而不是频数绘制图形。参数breaks用于控制组的数量。在定义直方图中的单元时,默认将生成等距切分。 用R语言绘制直方 图.doc Histogram of x x Den sity 0 5 10 15 0.00 0.05 0.10 0.15 0.20这幅图按概率密度绘制图形。在组的数量方面,采用的是 默认等距切分,也可以根据需要控制组数图9-26.R语言绘制直方图 核密度估计是用于估计随机变量概率密度函数的一种非参数方法输入数据。核密度图是用来观察连续型变量分布的有效方法。 用R语言绘制核密 度图.doc 在R语言中输入表4所示的各地人口和GDP情况表代码如下: address - c(“a”,”b”,”c”,”d”,”e”,”f”,”g”) population - c(15,37,74,71,38,45,97) ty - c(1,1,2,2,1,1,2) patientdata - data.frame(address,population,ty)地名人口(万人)城市大小a 1 5 1b 3 7 1c 7 4 2d 7 1 2e 3 8 1f 4 5 1g 9 7 2表4:城市人口数据 我们首先将地名中的值赋值给address,将人口赋值给population,将城市大小赋值给ty,就会自动创建一个数据框。 绘制核密度图一般使用格式为: Plot(density(x)其中的x是一个数值型向量。由于plot()函数会创建一幅新的图形,所以要向一幅已经存在的图形上叠加一条密度曲线,可以使用lines()函数 par(mfrow=c(2,1) d-density(patientdata$population) plot(d,main=各城市人口的核密度) polygon(d,col=red,border=blue) rug(patientdata$population,col=brown)在第一幅图中,你看到的是完全使用默认设置创建的最简图形。在第二幅图中,你添加了一个标题,将曲线修改为蓝色,使用实心红色填充了曲线下方的区域,并添加 了棕色的轴须图。图9-27.R语言绘制核密度图 通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数)、中位数(第50百分位数)、上四分位数(第75百分位数)以及最大值,描述了连续型变量的分布。箱线图能够显示出可能为离群点(范围1.5*IQR以外的值,IQR表示四分位距,即上四分位数与下四分位数的差值)的观测。 在R语言中输入表4(同前例)所示的各地人口和GDP情况表;在R语言中输入以上数据,需要创建一个数据框。由于不同的列可以包含不同模式(数值型、字符型的等)的数据,数据框的概念较矩阵来说更为一般。可通过函数data.frame()创建数据框。一般使用格式为:mydata-data.frame(col1,col2,col3,) 其中的列向量col1, col2, col3, 可为任何类型(如字符型、数值型或逻辑型)。每一列的名称可由函数names指定如图所示的代码演示了创建矩阵mymatrix的过程。地名人口(万人)城市大小a 1 5 1b 3 7 1c 7 4 2d 7 1 2e 3 8 1f 4 5 1g 9 7 2 用R语言绘制箱线 图.doc address - c(“a”,”b”,”c”,”d”,”e”,”f”,”g”) population - c(15,37,74,71,38,45,97) ty - c(1,1,2,2,1,1,2) patientdata - data.frame(address,population,ty) 我们可以绘制单个变量或分组变量的箱线图,其格式是:Boxplot(formula,data=dataframe) 其中的formula是一个公式,dataframe代表提供数据的数据框(或列表)。一个示例公式为y A,这将为类别型变量A的每个值并列地生成数值型变量y的箱线图。公式y A*B则将为类别型变量A和B所有水平的两两组合生成数值型变量y的箱线图。 添加参数varwidth=TRUE 将使箱线图的宽度与其样本大小的平方根成正比。参数horizontal=TRUE可以反转坐标轴的方向。 在以下代码中,我们使用并列箱线图研究了各城市人口对城市大小的影响 boxplot(populationty,data=patientdata,main=各城市人口及大小,xlab=城市大小,ylab=城市人口) 图9-28.R语言绘制箱线图 箱线图灵活多变,通过添加notch=TRUE,可以得到含凹槽的箱线图。若两个箱的凹槽互不重叠,则表明它们的中位数有显著差异。 以下代码将为我们的城市人口大小创建一幅含凹槽的箱线图。 用R语言绘制带凹 槽的箱线图.doc boxplot(populationty,data=patientdata,notch=TRUE,varwidth=TRUE,col=red,main=各城市人口及大小,xlab=城市大小,ylab=城市人口)参数col以红色填充了箱线图,而varwidth=TRUE则使箱线图的宽度与它们各自的样本大小成正比。从图中我们可以看到,城市人口越多,城市越大。 图9-29.R语言绘制带凹槽的箱线图 小提琴图是箱线图与核密度图的结合。你可以使用vioplot包中的vioplot()函数绘制它。请在第一次使用之前先安装vioplot包。 vioplot()函数的使用格式为: voiplot(x1,x2,names=.col)其中x1, x2, 表示要绘制的一个或多个数值向量(将为每个向量绘制一幅小提琴图)。参数names是小提琴图中标签的字符向量,而col是一个为每幅小提琴图指定颜色的向量。 address - c(“a”,”b”,”c”,”d”,”e”,”f”,”g”) population - c(15,37,74,71,38,45,97) ty - c(1,1,2,2,1,1,2) patientdata - data.frame(address,population,ty) library(sm) library(vioplot) x1 - patientdata$populationpatientdata$ty=1 x2 - patientdata$populationpatientdata$ty=2 vioplot(x1,x2,names=c(“小城市”,”大城市”),col=”gold”) title(“各城市人口及大小的小提琴图”)小提琴图基本上是核密度图以镜像方式在箱线图上的叠加。在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计。 用R语言绘制小提 琴图.doc 图9-30.R语言绘制小提琴图 基于时间的绘图按照时间数据可以分为离散时间和延续时间两种。在离散型时间数据中,数据来自于某个具体的时间点或者时间段,可能的数值也是有限的。比如说,人们每年的考试通过率就是离散型时间数据。而类似温度这样的数据则是延续型的,在一天中的任何时刻,它都是变化的。 离散型时间数据的绘图主要有:柱形图、散点图。延续型时间数据的绘图主要有:折线图、阶梯图和LOESS曲线。 本章主要讲解阶梯图和LOESS曲线的概念和绘制方法。 阶梯图并不是直接连接两个点,它的曲线会保持在同一数值,知道发生变化,那时在直接向上或者向下跳跃到下一个数值。 图9-31.阶梯图示例 在R中创建阶梯图,需要用到plot()函数。将time的值作为x轴坐标、cost的值作为y轴坐标,然后将类型设定为S,就可以绘制出阶梯图,其用法如下 plot(time,cost,type=s) 以1991-2010年美国邮政资费数据为例,绘制阶梯图:time -c(1991,1995,1999,2001,2002,2006,2007,2008,2009,2010)price - c(0.29,0.32,0.33,0.34,0.37,0.39,0.41,0.42,0.44,0.44)plot(time,price,type=s,lwd=2,main=美国邮费阶梯图,xlab=time,ylab=price) 用R语言绘制阶梯 图.doc图9-32.R语言绘制阶梯图 如果你手中有太多的数据,或者数据杂乱无章,这是我们需要绘制一条线穿过尽可能多的数据点。但当你的数据趋势不是线性时,你就需要用到LOESS,即局部加权散点平滑法。通过它,你可以用曲线来你和数据。 图9-33.LOSS曲线 在R中,输入1到50,作为x轴,随机生成50个均值为5,标准差为3的值。之后拟合LOESS曲线。代码如下:set.seed(1234)x - c(1:50)y- rnorm(50,mean = 5, sd = 3)plot (x,y)scatter.smooth(x,y,degree=2,span=0.4)title(main=LOESS曲线) 用R语言绘制LOE SS曲线.doc 图9-34.R语言绘制LOSS曲线图 本例数据采用的是关于美国好市多超市门店地理位置分布情况的经纬坐标数据。这里我们需要maps工具包来完成,次包自带的有美国地图。 Install.packages(“maps”) library(maps) costcosread.csv(http:/ 可以看到好市多门店的地理位置都在地图上用圆圈进行了标记图9-35.地图应用 有时候,如果地图上点的顺序存在关联,那么可能需要将点连接起来进行关联。这里我们利用line()函数来完成画线,数据采用的是网上发布的一个虚构特工7天7夜的旅行轨迹。faketrace=read.csv(http:/ 如图所示 ,该特工7天的踪迹已经在图中表现出来图9-36.地图中画线 有些时候,我们手上并不只有位置数据,可能还会有其他的数值,列如销售数据或者城市人口等。我们依然要在地图上绘制圆点,但这时候我们需要的是大小不等的气泡。这次我们采用的数据是网上提供的关于未成年人生育率的数据,也就是没1000名15-19岁年龄段女性中的生育数量。代码如下:fertility=read.csv(http:/ 可以很清晰的看到非洲国家的未成年人生育率比较高,而欧洲国家相对来说比较低。图9-37.地图中加气泡 常用的高维可视化呈现方法包括基于点的方法、基于线的方法、基于区域的方法、基于样本的方法。基于点的方法以点为基础展现单个数据点与其他数据点之间的关系(相似性、距离、聚类等信息)。基于线的方法采用轴坐标编码各个维度的数据属性值,将单个数据属性布局于坐标轴空间,并采用折线段编码单个数据点,以便体现各个属性间的关联。基于区域的方法将全部数据点的全部属性以区域填充的方式在二维平面布局,并采用颜色等视觉通道呈现数据属性的具体值。基于样本的方法采用图标或基本的统计图表方法编码单个高维数据点,并将所有数据点在空间中布局排列,以便用户进行对比。 散点图通常是用于显示和比较数值,例如科学数据、统计数据和工程数据。当欲同时考察多个变量间的相关关系时,若一一绘制它们间的简单散点图,十分麻烦。此时可利用散点图矩阵来同时绘制各自变量间的散点图,这样可以快速发现多个变量间的主要相关性,这一点在进行多元线性回归时显得尤为重要。 R语言中有很多创建散点图矩阵的实用函数,比如paris(),scattterplotMatrix()函数和gclus包,在这里用paris()做简单示例:pairs(mpg+disp+drat+wt,data=mtcars,main=散点图矩阵) mpg 100 300 2 3 4 5 10 20 30 100 300 disp drat 3.0 4.0 5.0 10 20 30 2 3 4 5 3.0 4.0 5.0 wt 散点图矩阵你可以看到所有指定变量间二元关系。列如,mpg和disp的散点图可在两变量的行列交叉处找到。值得注意的是,主对角线的上方和下方的六幅散点图是相同的,这也是为了方便摆放图形的缘故。通过调整参数,可以只展示下三角或者上三角的图形。 图9-38.散点图矩阵 线图本质上是一种单变量的可视方法。基于线的高维可视化一般是将多个线图合并到一个图中,通过使用不同的视觉通道(如线条的粗细、类型、颜色等)区分不同的数据 attach(iris)num-c(1:150)Species-as.numeric(Species)xrange-range(0:9)range-range(1:150)plot(yrange,xrange,type=n,xlab=记录个数,ylab=大小,font.lab=2,abline(h=c(1,2)lines(num,Sepal.Length,type=l,lwd=2,lty=1,col=yellow)lines(num,Sep.Width,type=l,lwd=2,lty=1,col=pink1)lines(num,Petal.Width,type=l,lwd=2,lty=1,col=red1)lines(num,Petal.Length,type=l,lwd=2,lty=1,col=blue)abline(h=seq(0,8,1),lwd=1.5,lty=2,col=gray)legend(topleft,c(花萼长,花萼宽,花瓣长,花瓣宽),cex=1,lwd=2,lty=1,col=c(yellow,pink1,red1,blue)detach(iris) 在一个线图中的线条有很多时,我们有可能会发现数据的范围会重叠,难以看清单个数据。将数据点根据一个维度上的数值排序会很好地解决这个问题。如果不同维度的单位不同,或者单位的意义不同,可能一个纵坐标很难将数据意义表示清楚,这时我们可以在左右两侧同时引入纵坐标,从而减少歧义。图9-39.线图 平行坐标的思想非常简单、直观,它是在横坐标上取 p 个点,依次表示各个指标(即变量);纵坐标上则对应各个指标的值(或者经过标准化变换后的值),然后将每一组数据对应的点依次连接即可。 parallelplot() 函数可以轻松绘出轮平行坐标。继续利用 iris 数据,以下代码可以画出其平行坐标图 。library(lattice)parallelplot(iris1:105,1:4, iris,lty=c(1,3,5),lwd=2, groups = Species,horizontal.axis = FALSE) Min Max Sepal.Length Sepal.Width Petal.Length Petal.Width 采用平行坐标展现了多属性数据的基本原理是线的密度能呈现不同数据属性的关系。在图9-40中,密集的线的位置表示了明显的维度之间的相关关系,交叉的线代表了维度之间的对立关系,相对独立的或者线段斜度大的线则对应了独立的维度关系,走势相近的线可以看成具有相同类别的数据聚类。和散点图比较,平行坐标的优点在于可展现维度组之间的关系。此外,通过交互的用户选取可过滤数据,更清晰地展现各个维度的分布。 图9-40.平行坐标线图 径向轴技术是平行坐标的径向排列的版本:以圆周为中心作为坐标轴,沿圆周绘图。径向轴线图技术可用来呈现周期性规律。径向图常见的有雷达图(蜘蛛网图)和星状图。 星状图(蜘蛛网图)和雷达图本质上是一类图形,它们都用线段离中心的长度来表示变量值的大小,它们区别在于星状图用来展示很多个多变量个体,各个个体的图形相互独立,从而整幅图形看起来就像很多星星,雷达图(蜘蛛网图)将多个多变量个体放在同一张图形上,看起来就像是雷达或蜘蛛网的形状。简单说来,就是星状图有若干个中心,而蛛网图和雷达图只有一个中心。 R中星状图的函数为stars(),其用法如下:palette(rainbow(12, s = 0.6, v = 0.75)stars(mtcars, 1:7, len = 0.8, key.loc = c(14,1),nrow =5,main = Motor Trend Cars, draw.segments = TRUE) 上图描述了Motor Trend杂志1974年的汽车数据,我们可以看到丰田花冠(Toyota Corolla)的每加仑行驶的英里数(mpg)在众多汽车品牌中是最长的,它在星状图中红色的扇形也最大。径向轴线图的优点是有利于比较径向上的数据,但不便于比较相邻的数据元素。其他的径向轴线图类型有:采用极坐标的点图;在基线上绘制柱状图的圆形柱状图;线和基线之间面积采用颜色或者纹理填充的圆形填充图等。这些方法都采 用多个圆周作为线图的坐标轴,圆周的环绕方式可以是不同半径的同心圆,也可以是连续的螺旋线。图9-41. R中星状图 面向高维数据的柱状图可视化有多种类型。其中堆叠柱状图是最常用的方式。它通常是将同一数据的多个属性的数值堆叠成一个长方柱,用不同颜色、纹理等可视化元素区分这些属性。 R中堆叠柱状图的函数为barplot(),其用法如下:a-head(mtcars) b-as.matrix(a) d-t(b) barplot(d,col = rainbow(11),legend =rownames(d),ylim = c(0, 600),font=2) 我们选取了R语言内置数据mtcars中的前六个品牌的汽车数据,绘制了堆叠柱状图。图9-42. R中堆叠柱状图 多维数据经常以表格的形式存储,对应的可视化方法可以采取表格形式,配合敏捷的用户交互功能,以实现对数据的快速理解。 热力图是一种将规则化数据转换为颜色色调的常用可视化方法,其中每个规则单元对应数据的某些属性,属性的值通过颜色映射表转换为不同的色调并填充规则单元。 R中热力图图的函数为heatmap(),其用法如下:require(graphics)x - as.matrix(mtcars)rc - rainbow(nrow(x), start = 0, end = .3)cc - rainbow(ncol(x), start = 0, end = .3)hv - heatmap(x, col = cm.colors(256), scale = column, RowSideColors = rc, ColSideColors = cc, margins = c(5,10), xlab = specification variables, ylab = Car Models, main = Heat map of Mtcars) 在这个图中,蓝色越深,值越小;紫色越深,值越大;白色代表中间值。我们可以看到代表玛莎拉蒂寒风双门跑车(Maserati Bora)的汽化器(Carb)的格子颜色是紫色,是最大值。上图中还将数值相似的聚成一类。Mazda RX4和 Mazda RX4 Wag的汽车各个属性基本相似,颜色都为红色(左侧的一列格子),所以这两个品牌的车子最为相似。 图9-43. R中热力图 马赛克图是一种可以用于两种以上类别型变量的可视化方法。在马赛克图中,嵌套矩形面积正比于单元格频率,其中该频率即多维列联表中的频率。颜色和阴影可表示拟合模型的残差值。 我们以R语言内置数据集UCBAdmissions(它是在加州大学伯克利分校的招生情况表)数据列表为例,来探讨如何制作马赛克图、怎样读懂马赛克图。 利用下面的代码,获得该数据的相关系数:Ftable(UCBAdmissions) Dept A B C D E FAdmit Gender Admitted Male 512 353 120 138 53 22 Female 89 17 202 131 94 24Rejected Male 313 207 205 279 138 351 Female 19 8 391 244 299 317 安装vcd包,vcd包中的mosaic()函数可以绘制马赛克图,代码如下:library(vcd)mosaic(UCBAdmissions,shade=TRUE,legend=TRUE)其中添加选项shade = TRUE将根据拟合模型的皮尔逊残差值对图形上色,添加选项legend = TRUE将展示残差的图例。ftable(UCBAdmissions)library(vcd)mosaic(UCBAdmissions,shade=TRUE,legend=TRUE) 马赛克图隐含着大量的数据信息。例如:该大学录取的男生比例比女生高;F专业录取率比其他小;在B专业录取的女生远比男生多。继续观察,你将发现更多有趣的信息。扩展的马赛克图添加了不同的线条区域来表示拟合模型的残差值。在本例中,右斜线区域表明,在假定录取率与 性别和专业无关的条件下,该类别下的生存率通常超过预期值。竖线区域则含义相反。一定要运行该例子的代码,这样你可以真实感受图形的效果。图形表明,在模型的独立条件下,A专业录取男生超过模型预期值。如果在模型的独立条件下,F专业录取率比模型预期值低。图9-44. R中马赛克图 切尔诺夫脸谱图采用人脸特征编码不同的数据属性。人脸的每一个部位,例如眼睛、耳朵、嘴巴和鼻子都代表不同的数据属性。每一个部位的变化表现数值的大小,例如形状、大小、转向和摆放。这种方法利用了人们对脸部特征的熟识和分辨微小变化的敏感性。由于脸部每一个部位对于识别的准确性不同,需谨慎设置数据的属性。 安装aplpack包和tcltk包,aplpack包中的faces()函数可以绘制脸谱图,代码如下:windows(width =15, height =10) #将绘图窗口为15*10的大小library(aplpack)library(tcltk)faces(mtcars,face.type=1) 参数说明:effect of variables: modified item var “height of face” “mpg” “width of face” “cyl” “structure of face” “disp” “height of mouth” “hp” “width of month” “drat” “smiling” “wt” “height of eyes” “qsec” “width of eyes” “vs” “heigh of hair” “am” “width of hair” “gear” “style of hair” “carb” “height of nose” “mpg” “width of nose” “cyl” “width of ear” “disp” “height of ear” “ hp”图9-45. R中脸谱图 上图显示了Motor Trend杂志1974年汽车数据的切尔诺夫脸谱图。可以清晰地看到,代表Mazda RX4、Mazda RX4 Wag的小人脸谱极为相似,说明这两种汽车品牌的各个参数十分相似。代表Merc 450SL、Merc 450SLC和Cadillac Fleetwood的小人脸谱也非常相似,但是Cadillac Fleetwood小人的耳朵比前两个小人宽,说明Cadillac Fleetwood汽车的disp比前两个汽车品牌大。 邮票图表方法将高维数据的多个视图以邮票大小按一定顺序排列,从而将不同时间和空间的一系列高维数据摆放于同一个视图。该方法为比较多个数据属性提供了一个直接的方案。邮票图表方法的优势非常突出,常被用于属性数目不多的情形。与切尔诺夫图情况一样,这里不做详细介绍了 文本与文档可视化是商业信息可视化的主要研究内容之一,是通过对文本资源的分析、发现特定信息、并利用计算机技术将其以图形化方式呈现出来的一种方法。文本与文档可视化属于文本挖掘的范畴,结合了信息检索、自然语言处理、人机交互、以及可视化技术等,需要在文本处理、可视化映射、交互的基础上进行,以丰富的图形或图像揭示以文本为载体的信息内容,文本与文档可视化包括单文本内容可视化和多文档可视化。 词云:词云,又称文本云或标签云。词云是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。它是最直观、最常见的对文本关键字进行可视化的方法。通常以字号和颜色来映射文字的相关属性。权重越大的关键词的字号越大,颜色越显著。 用R语言绘制英文词云,一般会用到wordcloud包,需要安装和导入。其用法如下:wordcloud(words,freq,scale=c(4,.5),min.freq=3,max.words=Inf,random.order=TRUE,random.color=FALSE, rot.per=.1,colors=black,ordered.colors=FALSE,use.r.layout=FALSE,.) R语言绘制英文词 云.doc words关键词列表 frep关键词对应的词频列表 scale字号列表。c(最大字号, 最小字号) min.freq最小限制频数。低于此频数的关键词将不会被显示。 max.words限制词云图上关键词的数量。最后出现在词云图上的关键词数量不超过此限制。 random.order控制关键词在图上的排列顺序。T:关键词随机排列;F:关键词按频数从图中心位置往外降序排列,即频数大的词出现在中心位置。 random.color控制关键词的字体颜色。T:字体颜色随机分配;F:根据频数分配字体颜色。 rot.per控制关键词摆放角度。T:水平摆放;F:旋转90度。 colors字体颜色列表 ordered.colors控制字体颜色使用顺序。T:按照指定的顺序给出每个关键词字体颜色,(似乎是要求颜色列表中每个颜色一一对应关键词列表);F:任意给出字体颜色。 library(tm)library(wordcloud)data(crude) crude - tm_map(crude, removePunctuation) crude - tm_map(crude,function(x)removeWords(x,stopwords()wordcloud(crude) weakgulfimportsoilprice1987alsabah arabcorp onealso 1986 accordsayeffective next hisham sincethree unitedfree texaco decembermln bringsbillionsellprotectsixremain emergency reserves indonesias hold market saying measures two lower januaryback low levelsincrease mckiernan sharpaddress rise bank revenuecan new produc er set international arabia s due 13nati on qatarthey weeks last howeveryear will meeting today day lowered smaller nazer fixed official ceilingprojected bbl says expenditure alqabas exchange ship exploration production inc barrels severalstudy boost trading kuwai ts saudireduced quoted petroleum sheikh energy sector agency week appears company fall agreed reiteratedefp 19858 6 ability minister called rule commitment fell way must refinery among but quota local moves posted denied expected agreement traders announced budget slightly emirateschange reserve opecs bpd problem asked future abdulaziz buyers 150 estimate crude revenues years growth made februarynamed kingdoms arabia economicreal cut compared plans now around producing spa analysts states may pressure according march intermediate published transaction the alidlrsper decrease main domes tic guard groupreuter alkhalifa plantdollars pct average strateg ic 158 de velopm ent officials yesterdaybarrel countrys arabian indonesia output governmentstate month industry never export current policy higher demand world added opec riyals spokeswoman april york recent prese nt power daily prices contractposition kuwait meetexports president economy total this nymex foreignresearch help 1985 sweet much sources companies memb ers pumpi ng grade reportfutures four estimatessaid west texas markets mizrahi high 198788 两个tm_map()函数分别用于去掉标点符号和停用词,然后用wordcloud()函数绘制一幅简单的词云图,字体越大,表示关键词频率越大,由此可见该文档中oil和said最为关键。图9-46. 英文词云 #1.读取数据库setwd(d:R)#设置目录在d盘R文件夹中csv - read.csv(train.csv,header=T, stringsAsFactors=F)mystopwords- unlist (read.table(StopWords.txt,stringsAsFactors=F)#这里先定义了地址、然后读取文档、最后定义停用词#2.数据预处理(包括中文分词和停用词处理)#分词library(tm)library (rJava) library (rmmseg4j) #removeNumbers = function(x) ret = gsub(0-9,x) tmp -as.character(csv2)tmp-mmseg4j(tmp)#建立语料库ovid - Corpus(VectorSource(tmp) #meta(ovid,cluster) - csv$type#unique_type - unique(csv$type) #去掉停用词stop-c() #停用词data_stw=read.table(file=d:/R/txtmining/stopword.txt,colClasses=character)for(i in 1:dim(data_stw)1)stop=c(stop,data_stwi,1) ovid- tm_map(ovid, removeWords,stop) #创建词条-文档矩阵sample.dtm- DocumentTermMatrix(ovid, control = list(wordLengths = c(2, Inf)#3.画出云图library(wordcloud)library(Rcpp)library(RColorBrewer)m - as.matrix(sample.dtm)v - sort(colSums(m), decreasing=TRUE) myNames - names(v)d - data.frame(word=myNames, freq=v)wordcloud(d$word, d$freq, min.freq=50) 图9-47. 中文词云 单词树不仅能够使关键词可视化,还能使语句上下文信息可视化。其中,树的根节点是用户自选定的单词或短语,而树的各个分支是与根节点处的单词或短语有上下文关系的单词或短语。词频越大,字号就越大。下图显示了泰戈尔的诗歌“The furthest distance in the world”的单词树可视化结果。 图9-48. 单词树 多个文档构成的文档集合蕴含着丰富的文本信息,关系复杂,多文档可视化可以帮助我们理解不同主题在文档集合中的分布、多文档之间的关系等隐藏的信息。多文档可视化主要有星系视图、主题山地、新闻地图等方法,其中星系视图和主题山地将文档之间的关系分别用星系图和地形图的形式表现出来,而新闻地图则是基于树图的布局对新闻文档进行分类,并表现出它们的相对重要性。 星系视图是将文档集合中的文档按照主题相似性进行布局,并采用宇宙星系进行可视隐喻的可视化形式。在星系视图中,单个文档是图中的星星,其在图中的位置按照某种相似性计算规则投影到二维平面中,主题越相似的文本距离越近,反之亦然。主题相似的文档在距离上较为靠近,可以聚拢成一个密集的星簇,每个星簇代表一类主题,星簇越密集表明该类主题的文档数量越多。 图9-49. 星系视图 主题山地可看做是星系视图的改进,它使用了抽象的三维山地景观视图来隐喻文档集合中各个文档主题的分布,其中高度和颜色用来编码相似主题的文档的密度。如图所示,每个文档被映射成视图中的点,点在视图中的距离映射成其所代表的文档主题之间的相似性,主题越相似,则距离越近,反之亦然。点分布越密集表明
展开阅读全文