查看原文
其他

安全数据分析:数据可视化

计算机与网络安全 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:460500587



微信公众号:计算机与网络安全

ID:Computer-network

数据中埋藏有很多故事,需要依靠数据分析师来发掘这些故事的线索,把它们整合到一起,再和他人交流这些故事。当结合数据独有的复杂性和细微性,没有什么能比得上一个经过仔细构建的可视化图形更擅于讲出一个很棒的故事:一个数据的故事。


一个数据的故事是建立在好几个属性上的,其中最重要的两个属性是真实(truth)和关联性(relevance)。缺乏真实性的故事也许是一个完美的故事,但是却不可能是一个好的数据的故事(data story)。如果数据故事包含了虚假和半真半假的叙述,就不能产生具有实际意义的成效。我们需要这些挖掘的技术来发现数据中包含的真相。可视化应该是包裹在数据真相之外的包装,它应该是清晰而明确的;我们放置其中的每个点、每根线条、每种颜色以及每个图形都应该承载着一些信息来表征数据(故事)中的真相。


仅当一个故事对阅读者是有关联的并且是可操作的,这个故事才算得上是一个好故事。在安全信息和事件管理系统(SIEM)的仪表盘上,向一个董事级别的管理层展示的信息不能比面向某个出具市场报告的系统操作员更加详尽具体。如果阅读者感觉数据故事不适用,那么故事其实没能起到传播信息的作用。所以我们要足够了解可视化结果的受众,是否会引起预算或者防火墙变更?当我们在创造可视化信息的时候,一个很好的可以问自己的问题就是:“那又怎样?”如果我们难于替阅读者回答这个问题,那么就需要重新考虑数据呈现方式。另一个检验可视化结果的脑力练习是纵观这个故事其他方面的一些可能的输出结果,如果可视化输出的结果相同(从阅读者的角度来观察),那么应该重新考虑设计我们的可视化工作。比如,在展示明显具有上升势头的线条的同时,却想象它是下行的。阅读者会有不同的反应吗?如果可视化的上升远远比其实际增幅大呢,又会怎样?


我们并不是坚持将所有的数据都可视化。如果数据中的信息可以用电子邮件中的一句话来总结,那就尽管这么做;如果数据中的信息可以在一个简单的表格中很好地展示,那也尽管这么做。我们在这里让数据可视化的目的是为了更好地交流数据信息。如果我们有一种方法可以让数据交流变得更有效、更简洁或者更简单,那我们就应该毫无顾虑地使用这样的方法。我们并非意在让可视化成为数据信息的中心点。所有的故事都存在于一个上下文,它们都要具有故事开始、经过、结局这些过程。在整个数据信息交流的过程中,可视化能起到十分重要的支持作用,但是它不应该是数据交流的唯一方式。我们应该专注于成功地进行故事叙述,而叙述的方法仅仅是一个达到目标的手段而已。


一、为什么要可视化


目前已知的对人类认知最有效的方式就是通过视觉感知。比如对于一个优秀的黑客来讲,他首先需要了解这个系统,理解它是怎么运行的(或者为什么不工作了),然后再利用这个认知系统来达到黑客的目的。在这里的应用场景下,这个目标就是快速有成效地与阅读者交流我们在数据中发现的故事。相比于其他的交流方式,使用数据可视化来交流具有很多优势。数据可视化具有如下的几个优势:


数据可视化能快速地进行复杂的信息交流。描述性的统计(均值、中位数、方差等)确实可以描述以及简化数据,但是却丢掉了数据之间一些细微的特性。而可视化却在最小化数据细节特征损耗的同时,使得在几秒钟时间内快速交流上百万个点信息成为可能。


数据可视化能识别潜在模式。一些模式特征通过统计学方法或扫描数据的方式永远不可能被发现,却可能通过可视化方法被揭示出来。而当在可视化展示数据的时候,存在于单个变量中的模式或者多个变量之间的关系可会显现出来。


数据可视化能对数据做质量控制。在收集和准备数据的过程中的错误通常能通过可视化的方式被发现。数据可视化是快速检测工作结果合理性的好方法。


数据可视化可起到缪斯之神一样的(引导发现知识)作用。据说科学界最具有突破性的发现并不是顺理成章的,而都是由一些“奇怪现象”引发的。通过视觉展示这些数据,能够给予阅读者一个新的观察视角并且有助于思考、发现的过程。


 解开视觉感知的奥秘 


人类处理视觉信息的系统是难以置信的复杂,我们的很多相关认知都在不断地发展变化。我们应该了解一些有关的基本(希望也是简单的)概念,因为了解人的大脑是怎么处理视觉信息有助于我们创造出优秀的可视化成果;同样重要的,这也能有效防止我们产生无效或者无意义的结果。


我们的眼睛将视觉刺激以光的形式转化成电信号,传递给大脑。这些信息经过视觉记忆(visual memory)的若干阶段,每个阶段都有特定的强度、限制以及功能。在我们能够意识到这些信息之前,大脑会快速扫描视觉区域,这就是所谓的前注意处理(Preattentive Processing)。最后,大脑会指示眼睛聚焦其他地方,并且经过一系列的扫视运动(saccadic movement),我们的眼睛会聚焦在不同的特征上,来帮助在脑中建立视觉画面。我们的目的是使用这三个人脑视觉处理系统的概念,为我们创建良好的视觉效果和图表打下稳固的基础。


1、视觉思维


这个部分贯穿了人脑视觉感知的各个视觉记忆的阶段:图像记忆、工作记忆以及长期记忆。


图像记忆是视觉信息在大脑停留的第一站。视觉信息在这里进行十分短暂的停留,只会持续到新的信息到来,或者最多大概半秒钟时间。在这个细小的时间窗口内发生的事情是形成良好的可视化和仪表盘的关键。对存储在图像记忆内的信息,大脑对它优先进行图像预处理,而不会对其做更多的有意识的关注。从进化的角度来看,这样做是相当有好处的:这个前注意处理的过程可帮助人们快速识别周围环境中可能的威胁。举个例子,当我们在开车过程中,一个动物突然冲到汽车前面,我们极可能在真正意识到危险之前就从大脑感受到了紧急情况,在完全处理威胁讯息之前就可以立即开始做出应急响应。即使您不想让可视化结果被视为警示信息,依然可以通过使用颜色、形状和其他线条,利用这种视觉搜索和前注意处理来抓住观众的注意力以及传递一些数据的基本属性信息。当开始有意识地处理视觉信息的时候,图像记忆的预处理将会使后续处理过程更加容易。


工作记忆是视觉信息在大脑停留的第二站,这里的处理就变得更复杂一点了。首先大脑会将视觉信息分为有意义的对象,工作记忆会保存这些分类信息。这里具有巨大的灵活性:当接收到更多的视觉信息的时候,大脑可以迅速更换或删除已有的对象,但这种灵活性是以处理能力为代价的。在工作记忆阶段,根据任务和对象的不同,大脑仅可容纳三到五个对象。当您在设计可视化效果和仪表盘展示的时候,了解这个限制是很重要的。如果您根据一个数据表来创建可视化效果,其中有10个不同的属性,观众将不断参考这个数据表,才能弄清楚他们正在看的内容。因此,当在传达您的数据故事时,应该限制每个视觉效果内有不超过五个对象(最好是四个)。


长期记忆并不直接参与视觉处理过程,而是在建立长期记忆的预期和范式的过程中影响视觉信息传递。为了让信息进入长期记忆,观众们需要观察“预演”信息,以便从工作记忆转化为长期记忆。如果阅读者已经见过可视化效果(他们极有可能),他们就会对所见的东西有一定程度的预期。例如,如果您创建一个散点图,阅读者期望图的起点是左下角,并且有标记了确定数值的数轴,分别向上和向右延伸。如果有多种颜色标记时,阅读者将期望并找到不同颜色代表的含义。了解这些范式和预期是非常重要的,如果您的可视化结果偏离了它们,且您有很充分的理由来这么做,就需要产生相应的视觉队列帮助人们了解这些偏差。


2、追踪眼球运动


当人们专注于像仪表盘或者计算机屏幕上的图表等东西时,他们并不是简单地把眼光固定在那里,然后把图像整个儿接收。实际上,他们的眼光快速在屏幕各处移动,在极短的时间内专注于很小的一部分,来在大脑中建立对应的图像。这些快速的眼球运动被称为眼扫视(saccade),而整个过程叫做扫视运动。他们可能聚焦在任何地方,但是却不是随机的。大脑有一套规则(真正的指导规则)来规定下一个注视点是如何优先选择的。举个例子,当一个人和您打招呼时,您的眼睛会扫描对方整个脸庞,在不同距离的特性跳跃(眼睛、鼻子、嘴巴),然后建立整个脸的轮廓。扫描扫视不仅帮助您识别人,而且也提供线索来让您来判断别人的情绪。


同样的过程也适用于可视化和仪表盘。人的眼睛会注视在有明显特征的区域,然后目光在重要的点之间跳跃,来回扫视。通过这一系列的动作后人就会建立起整个的图像。理解这些目光移动的规律有助于建立起看起来比较自然(至少不别扭)的可视化信息流。


扫视运动被认为是一种弹道(ballistic)运动,它是无意识的运动,一旦大脑启动了扫视运动,眼部肌肉就从头到尾地接管了眼球运动,负责处理快速的加速和减速过程。这个过程十分重要,原因有二:一旦扫视运动被启动了,中途是不能改变或终止的;同时此过程抑制了大量的视觉信息输入。我们要创建紧凑的可视化效果和仪表盘来局限眼球移动的距离。


我们将一些在眼球扫视运动中比较重要的知识点总结到一起,要知道眼球会在视觉特征之间跳跃,并理解弹道运动的本质,在创作仪表盘和图表时,我们还应该牢记如下几点:


不要在仪表盘上过多地展示视觉特征。要控制吸引眼球的视觉特征的数量,因为如果展示的所有内容在视觉上都是重要的,那么就没有内容能表现出重要性。并且,阅读者会耗费更多的精力去阐释理解可视化图像。


赋予重要信息更明显的视觉特征。正如我们扫描一个人的面部的重要部分一样,我们会在屏幕上寻找类似吸引眼球的视觉特征。要确保这些特征对观众是重要和明确的。


限制扫视运动耗费的时间。跳跃更长距离的扫视运动会花更多的时间,千万别把重要视觉特征放置在展板角落或者边缘。让观众在更长距离之间做扫视运动会减少他们真正观察视觉特性的时间(同时增加了扫视运动耗费的时间)。


相比在统计数据可视化方面,这个扫视运动的角色在仪表盘设计中具有更大的意义。一个统计类的可视化结果通常只有一个或许两个视觉特征(其意在引人注意),并且观众的眼球运动局限在一个相对紧凑的展示空间。而一个仪表盘可能用于同时表达好几个独立的具有不同紧迫性的信息。良好的仪表盘设计,会限制观众耗费在扫视运动上的时间,并且尝试突破眼球运动的效率。


3、前注意处理


最好的描述前注意处理的方式就是图片。看一看下边的图1,试着数一下在这些完全随机产生的字母数字组合里边有多少个X字符。

图1  数数“X”字符的个数

由于其中所有的字符都是同样的颜色,并且占据同样大小的相对空间,这些字符的任何信息都没有凸显出来,大脑只是简单地视它们为图形的集合。为了计算X字符的个数,您必须查看所有这4行字符之中的每一个字符。当您在查看字符的过程中,您必须记住当前统计的个数。与之相反的是,看看X字符被强调的完全随机组合的字母数字(见图2)。

图2  现在再统计“X”字符的个数

在这样的图中,能够立即识别出4个X字符。当您刚看到这个图时,大脑看出由灰色字符的图片背景以及4个相互相似而又与背景完全不同的对象。前注意处理会创建两类分组:一组包含了所有的灰色字符,另一组包含深红色的X字符。一瞬间之后,大脑有意识地将第二组识别为您更感兴趣的。您视觉上轻易地排除灰色字符,现在仅仅扫描剩下的一组字符就能完成任务。统计X字符的个数变得简单又快捷。


对于可视化来讲,您追求的是智能分组和轻松聚焦重要信息。您想要前注意处理毫不费劲地的处理相似的视觉对象,并且突出显示重点信息。但是必须记住,前注意处理并不是那么聪明。它不能表达意义、解释对象或者做有意义的关联(不止简单的可视化分组)。


通过数以百计的研究,研究人员已经可以基于前注意处理来区分可视化属性。可能其中的一些研究看起来有些傻或者抽象(例如,平行检测有多容易?),但是整体来看,我们可以归纳出一些基本的可以被前注意处理的视觉属性类别。


这些基本类别如下:


形式(线条、形状以及大小)

颜色(色调和饱和度)

空间位置(二维的、立体的)

运动(眨眼、方向)


上边的类别列表的细节解释可以足够长,但幸运的是,您可以通过一些图形实验来验证它们确实有道理。如果某个版本的设计不能凸显数据,那么试试其他设计方法。如果很容易就能够选出重要的内容,那么极有可能别人也会感到容易。当然,最好让别人来操作,作为健全性检查。图3展示了一些基于前注意处理属性进行区分的方法。

图3  前注意处理属性举例

并不是所有的前注意处理属性都是经过同样的过程被创建的。再看看图3的各个小图,虽然它们都强调了三个数据点,但是有些图就比其他图更容易让人看出重点来。例如其中(e)图,假如您使用粉色和红色,会更难看出颜色的细微差别。前注意处理属性的凸显程度取决于这些属性的差异大小。在(a)中的图形之间的差别比(b)中的圆形和矩形差别要大一些,并且比后者更容易区分出来。虽然在(b)图中也能区分出数据点的差别,但是并不及(a)那么明显。


这个前注意处理过程的概念应该仅仅被当做一种概念,前注意处理和有意识的处理之间的界限是模糊的。当看一个可视化效果的时候,更是可以快速地处理,悄然溜过。而当反复暴露时,却可以实际训练我们前注意处理过程。换句话说,随着时间推移,不管一个仪表盘被设计得如何糟糕,分析师们最终都会找到可行的方法,可以根据不同的环境和文化,快速地区分其中的重要特征。但是依然存在一点,如果您想要引导观众的关注点和注意力,应该利用一些前注意处理的基本元素,如形状和颜色来突出显示您要在数据中展示的点。


关于前注意处理过程的最后一点注意事项:这个过程可能会因为数据过载而抹杀了本来的优点。看一看图4就知道了。

图4  太多的属性

在(a)图中,我们把数据分成了不同的三组,然后用不同的颜色来标记它们,这样就很容易区分这些数据。它们不但在空间上进行了分组,并且还在颜色上凸显了各自的不同。


在(b)图中,我们把数据点分为了两组,和(a)图中的分组不同,然后用不同的形状来标记它们。这样区分这些数据点就稍显困难了,但是还能区分这两组。


在(c)图中,我们组合了前两种的标记方法,事情就变得更加复杂一些了。为了区分它们的形状,您不得不主动检查每个点,并且需要有意识地区分它们。


在这里我们得到的教训是,您必须要小心保持可视化展示的简洁性,尽可能简单地利用观众的前注意处理过程,这有利于他们进行后续视觉信息处理接收。

二、理解视觉交流的组件


前面分析了大脑可视化处理信息的过程。包含了怎样利用前注意处理以及扫视运动,来提高观众的视觉感知。接下来着重于视觉建立模块和必需的原料。您要着手开始处理数据,并且标记不同属性对应的值,比如位置、形状、长度和大小等属性。也许您还想用线条的倾斜度、角度或者单独的分类(由颜色色相、饱和度、亮度等来区分)来标记这些属性随时间的变化。如果结合到元素本身,您还能刻画它们之间的关系和分类。在可视化中您做的每一个选择都将会影响到他人对可视化数据的解码程度。


1、避免第三维


除非您是在制作一个实际的数据雕塑,或者在使用特殊的可支持三维建模的软件,我们默认是在做二维平面内的可视化。所有您看的屏幕、打印的报告,甚至投放在墙上的幻灯片都有一定的宽度和高度的限制。当然,您也可以模拟一个第三维的深度,但是这可是具有一定挑战性的,三维空间的模拟将会仅仅是一个模拟而已。


为了模拟深度,您需要变更使用的每一个数据属性,来表征数据的含义。模拟时,越近的元素需要拉大,同时远处的元素则需要缩小。从模拟后的产生的影响看,它会改变观众准确比较数据以及吸收数据知识的能力。出于这个原因,我们强烈建议不要在三维空间中制图。而且,二维图像提供了极大的灵活性。即便现在的一些例如Excel等桌面工具能够相当轻易地作出三维图标,让您有做三维图的冲动,但如果您的目的是和他人交流您的数据信息,那么您就应该克制住这个冲动。


不要认为二维空间对可视化工作的限制就仅如同半音音阶内仅有12个音符对于西方音乐的限制。已经有大量的关于在二维图像内做信息传递的研究,接下来我们着重看看由两位统计学家(William S.Cleveland和Robert McGill)在19世纪80年代中期发表的两篇开创性的论文。并且,他们也确实如论文中所述的那么做了。他们做了实验,将不同的主题放在不同图形中,并且测量了对定量信息做可视化解码的准确度。在他们的第二篇论文中,更新了实验结果,并且提出了一组有序的可视化编码结果和按照相对准确度排序的可视化解码类型,见图5。

图5  可视化解码精度

这些方法之间并不相互排斥,而且它们之间的区别还有一点儿模糊。例如,解码一个简单的柱状图,您可能用常规的图条的宽度来度量数量,然后却用长度来对比同一幅图中不同的图条。或者在一个饼图内,您可能主要使用扇形的度数来度量,但是扇形的面积或者扇形的弧长也可能让您有所考虑。这个研究中的成果应该作为一个数据可视化的指导准则。如果您想要准确地传达一些定量数据,柱状图总是优于饼图,同时分组的柱状图比堆砌的柱状图要好。


即便有了所有这些准则,您也可以稍微偏离这些准则。有时您并不想传递准确数量的数据,并且期望减少解码精度。举个例子,如图6所示,只看左边的饼图,很难衡量五个分组之间具体的差别。仅仅从饼图来看,您很有可能就认为各组的数量差不多是一样的。然而,如果您再看看右边的条形图,就能相当明显地看出各个分组之间的细小差别了,因为这是用了带有刻度的柱状图来表示数据的。很明显,如果您表达准确的数据,右边的柱状图远比左边的饼图更好地解释数据。但是,如果您的数据来源于一个小规模的观点调查,即便您有精确数据,但是数值之间的差别也许很容易受采样误差的影响,这样的情形下,您便会用更低精确度的方法来做数据可视化。

图6  饼图和柱状图的对比

如果您是刚接触数据可视化,那么当您遇到用cleveland的准确度列表(图5)底部的可视化技术时,会遇到两种本质上差别很大(有时甚至争论很激烈)的观点。饼图常常是争论的中心点,因为比起其他手段它被使用(甚至滥用)得更多。批判饼图的最核心的观点是:用其他方法,数据可以被展现得更好以及更加准确。正如Stephen Few在他2007年的一篇论文《Save the Pies for Dessert》中说到“在展示数量数据的可视化时,起到主要作用的所有图形中,饼图是目前为止最无效的方式。它的丰富多彩的类型很常见,却很少能被人理解,用它做数据交流犹如喃喃自语”。我们在此总结的另一个原因是:其数据交流的目标并不精确,导致沟通无力。同时,也有一些不怎么令人信服的论点在为饼图辩护,但是关于可视化的一个共识是:主动选择可视化方法,确保它能传达您真实的声音。


2、使用颜色


如果您还没有为一个项目选择颜色方案,那么这个简短的介绍会让您觉得选择颜色似乎很简单。有一些关于不同颜色的调色板搭配不同类型变量的准则,并且一些对颜色的深度研究也催生了若干比较简单的调色板设置的规则。Edward Tufte在他的著作《Envisioning Information》中提出“避免产生视觉破坏是选取颜色的第一要领。总之,不要破坏视觉感受”。即便如此,您也只是在自己的可视化内容中尝试一系列其他颜色方案之后,才能真切体会Edward的话。


有很多关于颜色应用理论的网站和工具,让配色选择相对不再那么痛苦。对自己的数据有一定了解之后,再挑选相关的配色是可视化工作中比较容易的部分。配色必须是宜人的,且能支撑甚至突出数据的消息,其因人而异,具有大量的主观元素,很有视觉故事的特性。这点导致了配色的挑战:您需要在若干颜色之间平衡功能、美学及理论。


(1)颜色是相对的


配色选择首要或者最重要的一点是:对颜色的感官总是相对于其背景色的。例如,图7显示了分布在黑白梯度渐变的背景上的两行灰色长方形。即便您已经知道每行都是一致的灰度阴影,但是当您从一边向另一边扫视时,也会感觉它们具有不同的灰色度的阴影。而在有些人看来,左上角和右下角的长方形看起来颜色相同。那是因为对于那些长方形的视觉感受是相对其背景颜色的。白色背景上的图块颜色显得更深,同时黑色背景上的图块颜色显得更浅。您可以利用这个事实带给自己好处。如果您想强调一个元素强于其他所有的元素,可以为它选择一个和其他元素对比鲜明的颜色。例如,红色的图形会在浅蓝色图形中凸显出来,却会在湮没在粉色以及橙色的图形中。

图7  视觉信号与噪声的误导

 我们是那10%,而非那99% 


世界上接近百分之十的男性以及百分之一的女性是色盲。这意味着在某一时刻(可能比您预期的还快)您的可视化效果和仪表盘将被无法识别彩虹整个光谱的人查阅。有一些对色盲类型的理解可以帮助您选择配色,让每个人都可以看到可视化效果。最大的色盲人群主要有红色弱(红色盲症)或绿色弱(绿色盲症),让红色和绿色出现在相同的图形中是一个糟糕的选择。有一些颜色选择工具(如ColorBrewer)会考虑色盲的因素,其有一个选项来控制选择对色盲安全的调色板。不管您的配色工具是什么,请记住这10%。


(2)调色板取决于数据本身


只有屈指可数的高层级数据类型需要您知晓,并且其中大部分被划入了分类或者定量的类型之中。


分类数据是指以不同的名字标记的数据分组,比如不同种类的操作系统分类或者编程语言的列表。分类数据有时候具有自然的排序。例如“第一”、“第二”、“第三”,或者“高”、“中”、“低”的排列被视为分类的数据值,只是它们具有了附加的顺序的属性。


定量数据是数值型的,例如您的一些计数或者测量数据,比如字节数、数据包数、会话数、服务器的数量等。


分类和定量的区别有时候会很棘手。举个例子,TCP/UDP协议的端口号具有定量的特性,因为它们是连续的到65535的整数,然而我们必须把他归为分类数据。我们从来不能通过一个echo命令(默认端口号7)加上两个telnet(默认端口号23)命令来得到DNS服务(默认端口号53),因为端口号的加法是毫无意义的。另外一个容易让人混淆的数据类型是日期/时间,大多数时间内,我们都会把它当做有序的分类变量来对待(比如年份、月份、星期几,等等),但是在一些情况下,为了方便时间和时间序列数据的计算,我们又会把它按照定量数据保存起来。


由于观众对颜色所代表具体数量的解码是相对不准确的,我们在使用颜色来表现定量数据的时候,一定要十分仔细。但是颜色却足以表达粗略的比较的情况。


图8展示了来自于ColorBrewer网站的三种不同调色板类型:连续、分散和定性。

图8  ColorBrewer调色板样例

3、拼在一起


到此,我们已经奠定了一些基本背景知识,是时候来看看怎么将这些东西合并起来,以达到交流数据信息的作用。这里将花较少的时间探讨怎么制作这些内容,同时花较多的时间来解释我们为什么这么做。用R语言和ggplot2来创建基本类型的绘图是相对容易的,大多数的图形都可以在一些更常见的工具中绘制,如Excel。


(1)使用点图


最简单的交流和比较两个定量变量的方法就是基本的散点图。散点图一般沿着一条轴线(x轴或者y轴)分布,点所在的位置让观众非常准确地知晓每个数据点的值,并且能很直观地在点与点之间做比较。用R语言的绘图函数plot(x,y)能够异常简单地创建散点图,所以您可以常常这么画图,仅仅是为了“看看”自己处理的数据。例如,在图9中,展示了8小时内的防火墙流量大小的情况,每个点都代表了防火墙在每个5分钟内处理的总数据包的数量(图中x轴)以及总的字节数(图中y轴)。

图9  基本散点图

这是一个很好的示例,能很快从图中得到模式。您能从总体上看到防火墙这天的流量分布在7GB至19GB,并且数据包数量是从1200万至2700万。其中的线性关系是非常明显的:更多的数据包,就有更多的流量字节数。现在这个图示内容并不是精确的数据的简讯,或者有很丰富的信息,当您不确定这些数据是否存在一定的规律的时候,它是一个能简单呈现数据模式的手段。图10显示了一个散点图,其揭示了一些您不知道内容。沿x轴是一天的时间,沿y轴是会话的数量。

图10  点图:按照时间统计传输的数据包

图10的散点图有一些额外的特征。注意图中数据点下边的虚线,它们勾画出了柱状图的身影,并且在视觉上将数据点与x轴各个点位绑定(并非杂揉在一起)起来了。为了突出显示时间元素的重复性,x轴上整点的线条变粗(同时线条落在网格上),这些点还会每30分钟将颜色改变成红色。在整点的位置上有比较明显的降低点而在中间其他位置上变化不大,这样的强调尤为重要,有助于进行比较。那么到底是什么引起了这样的降低点呢?可能是这个组织具有“爱开会”的企业文化,而当人们忙于参加会议的时候,网络流量下降了。仅仅从这个数据我们看不出来具体原因,但是从散点图很容易看出降低点的规律。


(2)用线条创造方向


您也许听说过“线就是移动的点”,这确实是真的,通常您会看到线条有一个指向。在这个部分,您也将接触防火墙数据流量,并且区分网络中设备的类型:工作站、服务器、打印机、网络设备。


您会看到两个图。首先是类似于时间的散点,然后是流量曲线图。


右图相当清晰地显示了发生的事情,并且很容易区分这四种不同设备的流量情况;而左图的散点图有些难以区分,但是能够看出不同种类设备流量的趋势和区别。曲线图擅长准确地表达数据,其能够在一定范围内比较数值点并且可以用线的斜率来表现数值的变化。例如,图中打印机数据流具有较大斜率。最常见的是曲线图一般在水平轴(通常是时间)上是有序的值并且在垂直轴线上有一个或多个刻度(可能会根据演示的需要翻转其方向)。在这个图例中,y轴上的刻度是每5分钟(按时间序)的网络数据包个数,其中每条曲线表示不同设备类型的流量统计。


 用对数刻度表示日志 


图11的y轴采用了对数刻度。留意下数轴上值是按照10的指数值来划分实际刻度的。如果图表是基于线性单位的,那么您将看到流量最高的曲线并且其他三条曲线将会被缩小得几乎看不到(太贴近x轴)。由于我们想要在同一个图内展现这些数据曲线,我们选择对数刻度,即便它们存在三个数量级的巨大差异也能表示出来。使用对数刻度时,请务必谨慎。大多商业人士习惯于看线性单位图表,并且会下意识地按照线性单位来做比较。举个例子,由于网络设备的流量曲线看起来只有工作站流量曲线的一半刻度,阅读者可能会认为网络设备的流量大概是工作站流量的一半;但实际上工作站的流量几乎是网络设备流量的10000倍。所以,如果您不清楚对数刻度,其极可能得出错误的结论。

图11  曲线图:设备流量图

(3)制作柱状图


针对一个变量是定量数据,另一个变量是分类数据的场景时,柱状图是最有效的数据表现方式之一,在基本柱状图基础上发展处好几类基本分支。图12展示了三种不同的漏洞计数以及按严重程度进行设备分类的展示方式。左边的柱状图使用了典型的垂直柱状图。为了让柱状图的图形是竖直的,改变了图示方向(图中没有标明)。因图标的位置而异,垂直柱状图和水平柱状图在美观上存有巨大差距。垂直柱状图简单直观:每条柱状线条的长度和每种设备类型的漏洞数量成正比。您可以很清楚地看出工作站类设备具有最多的漏洞,而服务器类的漏洞和前者接近,大概少了20%左右。相比之下,很明显网络设备和打印机的漏洞数量相当微小。

图12  柱状图:漏洞数量统计

另外两个图分别是叠加柱状图和分组柱状图,它们具有额外的一个分类变量:漏洞的严重性其值分别为高、中、低,使用了同系列颜色的方案来表示严重程度。在叠加柱状图中也很容易比较各个分类的总数,并且可以轻易看出工作站具有最多的漏洞数量。但是由于没有共同的单位,导致难于比较各个严重程度的总量。举个例子,尝试对比工作站和服务器的高危漏洞数量,由于这两个值的色块并没有对齐,不得不依靠其大概的长度去判断它们,这样便会使判断结果不太准确。


现在我们来看看分组柱状图,可以很明确快速地看出工作站比服务器具有更多的高危漏洞。分组柱状图的一个弊端是无法得到整体数量的比较,而当各个分类总量接近的时候,就更难从图中看出工作站具有最多的漏洞数量。选择图表类型主要取决于您想要传达的信息。


(4)利用透明度


另一个在图中表达不同变量值之间的差异技术是使用颜色的(或不透明度)。如果数据比较稠密,或者数据之间相互重叠,使用不透明的颜色会让人无法知道到底有多少个数据点堆积在一起。幸运的是,您可以简单依靠半透明颜色解决这个问题,这样就能呈现重叠在下方的点了。在R语言中有两种方法来实现。首先,在ggplot2中,大多数(或者所有)情况下的图表类型,都可以设置0到1之间的alpha值(alpha是在颜色规格中用来定义不透明度的术语)。或者直接将alpha的值添加到颜色编码第四个字节中,这样意味着红色值#FF0000和#FF0000FF(最末的FF表示将不透明度设置为最大值)相同。如果想将红色的透明度设置为50%,由于255÷2=128=0x80,于是可以将其设置为#FF000080,这样红色就是50%透明度。调整alpha值的好处可以在图13中显现出来。

图13  气泡图:用不透明度表现重叠

13中两个图展示了相同的数据:防火墙数据中网络设备的流量,每5分钟一个统计周期,共计8小时的数据。y轴是流量的大小(单位字节),x轴是网络会话的数目,图中点(气泡)的大小与其数据包计数成比例关系。其中的一个挑战就是多个气泡之间相互重叠。在右图中,将透明度alpha设置为1/3,我们就能看到被隐藏在其他气泡下边的任意气泡的信息。


作图的时候,将alpha值设为一个分数(比如1/3,而不是0.33)非常方便适用,因为这样就可以很明显地看出到底需要多少个点或者气泡能重叠起来,将图块填充到最大的不透明度取值(没有透明度,密实的)。并且这样也能方便地根据重叠的层数来调整alpha值。如果有50层的重叠,就可以将alpha值设置为1/50(作为对比,可以换算为0.02,再输入这个值)。


(5)对于值大小的编码


图13将另一个定量变量用圆圈(气泡)的大小(面积)来表现,它展示了每5分钟内的数据包的个数。回头看看图5,可以发现面积(area)的位置在可视化准确度列表中是比较低的。但是这个问题被整合到了图13中,因为在图中并没有气泡大小的图例(我们有意忽略了这个图例)。这里的目的只是关注数值的相对大小,数据包数量的相对大小。而在更加正式一点的图中,最好再加上描述性的标题,或者添加一些注释来说明下“气泡”大小的含义。而出于练习的目的,我们只是体验下表现明显的图形模式,而这类图只是表现了熟知的相对大小。这样的气泡图适合大致的数值估算,其表现数据的能力和饼图类似。


另一个具有这个特点的可视化方法是树图(treemap),树图使用面积以及颜色来表征两个定量变量(见图14)。树图的可视化方法依赖图块面积,因此在可视化准确度列表中处于较低的位置。

图14  树图:网络中的设备和流量

图14描绘了一个网络中的设备数量以及每种设备的流量,图中用长方形的大小来表征数量,用颜色来表示不同的数量变量。通常对长方形进行视觉分组来描绘他们之间的分类关系。在图14中,长方形的大小和网络中各种设备的数量成比例关系(工作站、服务器以及网络设备),并且每个长方形的浅色部分与其代表的设备产生的流量大小成正比例关系。

树图结合了两种相对的不准确的方法来表征数量值,这导致了其难于操作,并常带给阅读者困扰。适合饼图和气泡图的规则同样适用于树图,还会有更好的可视化方法来表现数据。


4、描述分布信息


有的时候我们只需要展示单一变量的数值和数值分布。在经典统计学中,我们有描述性统计来尝试压缩数值的分布情况。举个例子,我们再看看之前描述防火墙8小时数据的图9和图10,可以用类似下面的表格来描述每5分钟内所有会话的一个分布情况:

然而大多数的人不能看懂这些数值的含义,也无法看出任何细微的数据模式。描述性统计只是将数值的分布情况压缩到一系列的单一的数值中,这也正是可视化技术可以施以援手的地方。


(1)直方图和密度图


与其将数值分布压缩到几个描述性的统计值当中,不如将变量的每个值呈现出来。图15左右边分别展示了一个基本的直方图和一个基本的密度图,它们都描述了同样的一个数据集。

图15  防火墙会话数的直方图和密度图

用一个叫做“装桶”(banning)的过程来完成一个直方图。其首先在数值上划分等距离的所谓的“桶”(数值区间),然后计算每个“桶”内数值的个数。在这个例子中,我们创建了宽度为12000个会话的“桶”。我们可以看到,在图中峰值处即大约350000个会话处,大约有18次计数落在这个“桶”内。部分对直方图的批评提到,可以通过调整“桶”的大小和位置来影响直方图的样子。但是当想要获取数据分布的整体概况的时候直方图却是不可或缺的,并且可以通过直方图有效地得到数据分布的基本形状。


图15中右边的图表则是对应的密度图。使用和直方图一样的方法来生成它,但是密度图选取的“桶”很小,并且会做一些平滑处理。对比图中投影的直方图,我们可以看到密度图是如何削平波峰和削弱波谷的。这两种图之间没有孰对孰错,两者都使用了一些近似的策略。当您在探索数据的时候,可以很容易将数据传给hist()函数,并且瞬间(也许不是那么快)得到一个直方图。


(2)与箱线图搏击


另一个由John Tukey发明的方法就是箱线图,相比于其他图表,箱线图可能要求您具备更多一点的辅助知识。搭建了一个简单的蜜罐记录来自互联网的数据包。一个在线的主机到底有多频繁地被扫描呢?我们可在图16的箱线图中得到一个整体感受。

图16  蜜罐流量的箱线图

箱线图一开始会将数据分布的中位数(中间值)放置在图条的中心点,然后计算出第25、75的百分位数。这样表示25%的数据处于第25百分位数之下,25%的数据处于第75百分位数之上,并且有50%的数据处于两者之间。这两个数据点形成了箱线图框的长度,代表了箱线图的四分位数区间(inter-quartile range),又称IQR。


还有另外的一些用来表示线条长度的方法,其中最常用的就是将线放置在距离箱线图框1.5倍IQR远的位置,而其他方法将线条两端置于最小、最大值处。图17尝试用箱线图来表达大数据量的分布情况。

图17  箱线图:尝试攻击的数据包

图17有趣的地方在于其是通过对1亿条数据的处理产生的。它不只是传达了大量的数据,也能够代表这些数据的一定的可信度。在这个例子中,仅仅标明均值或者中位数是不够的,因为其中某些数据具有非常宽泛的观察范围。还有什么比分布的可视化能够更好地解释这些数值及其变化呢?


5、可视化时间序列


尽管在这里大多数的可视化示例中处理了一些时间序列相关的数据,但是还只是轻轻带过了相关的知识而已,时间序列数据是在同等时间间隔内收集起来的。在这里的大多数防火墙数据图表中,我们分析日志文件并计算它在每5分钟时间窗口内的字节数、会话数以及数据包数量。这样使得分散的数据条目整合为更易于管理的数据点。但是,取决于如何划分时间以及聚合数据,我们可能得到不同类型的结果。


图18关注于某21天的防火墙流量数据,这些数据被切分为每5分钟一个处理单元。该图是具有相当大数据量的一个小线图(几英寸的宽度内就有超过6000个数据点),而当我们试着重复用线条来表现其他数据的时候,这些线条会相互交织在一起,以至于让整个图表看起来像一条厚实紧密的线条。如果我们尝试换用每小时的均值来简化这个图表(见图18的中部图表),就会丧失极端数值以及数据的细节,这样在类似信息安全领域(十分关注极端情况)是不够好的。在图18底部的图表中,我们用数据点替换了第一条数据线,这样消除了大量的混乱情况,让我们能够看清楚数据的基本趋势以及极值点。

图18  时间序列:21天的网络流量

在将日志类数据进行可视化的时候,时间序列数据可能会变得相当密集。我们甚至用5分钟时间窗口取代1分钟时间窗口,来让可视化变得更容易。怎样准备数据以及可视化这些数据取决于我们要在数据中找寻什么样的信息。如果我们要发掘数据流量的特定峰值或者低谷,就要避免使用均值。但是,若我们需要找寻一般的数据模式,均值通常是足以满足需求的。


三、结语


本文通过可视化来表现数据可以快速地呈现复杂的数据内容及其内在关系,可以使用模式识别,发现异常情况,并获得新的观察视角。理解大脑是如何处理和存储信息的,可以让您创建的视觉效果能充分利用前注意处理的线索,并尽量减少扫视运动来提高效率。通过Clevaland和McGill的工作,可以学会一些用于表示定量数据的可视化方法。您应该把这些经验转化为绘图用的颜色、点、线和形状进行数据展现,来表达在数据中发现的故事。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存