2.2 声明式统计可视化的意义和优势
作为Python绘图可视化库中的一员,与Matplotlib、Plotly、Bokeh等比较来看,Altair与众不同的地方是它的声明式统计可视化。所谓声明式就是描述、陈述和交互的过程。之所以称为统计可视化而不是数据可视化,原因在于Altair的设计理念是更好地认识数据和理解数据,这也是统计的价值所在,而不将关注点放在复杂的可视化效果上。这也使我们认真思考可视化的意义和价值:绘制酷炫的图形不如深刻地理解数据,回归可视化的初心。
接下来,我们以一个示例具体地解释Altair的声明式统计可视化的意义和优势。“我们想使用散点图分析汽车马力(Horsepower)和加速度(Acceleration)的相关关系,其中,x轴是马力,y轴是加速度,使用的数据还是cars数据集。”这就是一段描述和陈述数据分析过程的需求,统计可视化就是使用散点图分析两个变量的相关关系。Altair的声明式统计可视化的实现过程如下所示。
(1)导入需要的包。
(2)加载数据。
(3)数据的视觉编码样式采用圆形。
(4)将马力变量作为x轴,加速度变量作为y轴,使用这两个通道将数据编码,映射成需要的视觉暗示效果:圆形。输出结果如图2.22所示。
通过上面步骤(4)的第一行代码就可以把尝试实现的数据分析需求简洁地描述出来。从Altair的语法规则来讲,这是一种链式法则:首先,使用类alt.Chart()指定使用的数据集,获得对象Chart;然后,使用实例方法mark_*()设定编码数据的样式;接着使用实例方法encode()设定位置通道的映射变量(字段)和变量类型。使用每个实例方法都会返回对象,使得对象可以继续调用实例方法,从而将不同功能的实例方法链接起来,形成一个紧密协作的过程。这样一个过程很像自行车链条,如果有其他的数据转换、分类汇总等数据处理需求,可以继续把相应的实例方法放在相对应的环节位置上,一环扣一环地延续下去,将实现统计可视化需要的环节线性有序地排列在一起,形象地展示链式法则的实现方法,如图2.23所示。
图2.22
图2.23
从语言角度来讲,链式法则很像我们的“翻译”过程,这是一个“汉译英”的过程,这个“翻译”过程大致包括加载数据集、预处理数据集、指定编码数据的标记样式、将不同的变量放置在不同的映射通道里。当然,我们也可以通过步骤(4)中的代码清晰、直观地理解数据的视觉编码样式与映射通道的数量和变量,这就是一个“英译汉”的过程,这个过程的运行机制如图2.24所示。
图2.24
因此,Altair这种优雅的简洁意味着使用最少的代码就可以高效地实现数据分析的目标,将更多的时间和精力放在探索数据、认识数据和理解数据上面。