1.4 数据可视化的开发工具
1.4.1 常用工具
1.Excel
Microsoft Office是一套由微软公司开发的办公软件套装,它可以在Microsoft Windows、Windows Phone、Mac系列、iOS和Android等系统上运行。与其他办公应用程序一样,它包括联合的服务器和基于互联网的服务。Excel是Microsoft Office系列中的一个软件,专门用于电子表格制作与分析。Excel有直观的界面,内嵌出色的计算功能和图表工具,是市场上较为流行的个人计算机数据处理软件之一。
Excel拥有强大的函数库,能快速创建各种数据图(条形图、饼图、气泡图、折线图、仪表盘图以及编辑图),是入门级的理想工具。但相比于专业图形化软件,Excel的图形化功能并不算强大,调整图表中的颜色、线条和样式的范围有限,十分难输出较为专业的可视化图表,尤其是多维图形。
2.SPSS
SPSS(Statistical Product and Service Solutions)是一款统计产品与服务解决方案软件,是由IBM公司推出的一系列用于统计分析运算、数据挖掘、预测分析和决策支持任务的软件产品及相关服务的总称,有Windows和mac OS X等版本。SPSS有专门的绘图工具,可以根据数据绘制各种图形[2]。
SPSS统计可视化图形能够简洁、直观地对主要的数据信息进行呈现,反映事物内在的规律和关联。根据统计图呈现变量的数量,可以将其分为单变量图(直方图、茎叶图、箱图、P-P图、饼图、条形图、Pareto图等)、双变量图(线图、条形图、马赛克图等)、多变量图(三维散点图等)。SPSS在常规图中引入了更多的交互图功能,例如:图组(Paneled Charts),带误差线的分类图形如误差线条形图和线图;三维效果的简单、堆积和分段饼图等;也有人口金字塔和点密度图等图形。虽然SPSS擅长统计分析,也有较多图表可视功能,但在输出专业的可视图表上也有一定的难度。
3.ECharts
ECharts(Enterprise Charts)是百度开发的一个开源的数据可视化工具,是一个基于JavaScript实现的开源可视化库,提供直观、生动、可交互、可个性化定制的数据可视化图表。它可以流畅地运行在PC和移动设备上,兼容较多浏览器(IE、Chrome、Firefox、Safari等),底层依赖轻量级的矢量图形库(ZRender),提供拖拽重计算、数据视图、值域漫游等功能,具有增强用户体验,提升数据挖掘、信息整合的能力。
ECharts提供常规的折线图、柱形图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、旭日图,多维数据可视化的平行坐标,还有用于商务智能(Business Intelligence,BI)的漏斗图或仪表盘,同时提供标题编辑、气泡详情、图例、值域、数据区域、时间轴、工具箱等可交互组件,支持多图表、组件的联动和混搭展现[3]。
4.Tableau
Tableau帮助人们看到和理解数据,该分析平台正在改变人们使用数据解决问题的方式。Tableau独创VizQL技术,具有SQL查询的综合性功能,又兼顾业务人员的便捷易用需求,只需要拖曳,就能生成可视化图形。Tableau在Tableau Desktop可视化工具的基础上新增Tableau Prep Builder,弥补了敏捷数据整理的短板。Tableau已从可视化分析工具逐步发展成为企业级的数据可视化分析平台。
Tableau定位数据可视化敏捷开发和实现的商务智能展现工具,具有以下核心优势:支持广泛的部署选择、丰富的交互渠道、模块化的产品组合、不断开放的开发接口等[13]。虽然Tableau入门容易,但较难精通掌握。
5.R语言
许多数据科学家使用R语言进行数据分析,R语言及其许多可用的包几乎为可以想象到的每种情况提供了许多不同形式的可视化。R语言具有丰富的作图功能,通过借助第三方包,比如graphics、gplot、ggplot2、lattice等可视化包,可以实现数据可视化功能。在使用R语言进行数据可视化之前,需要下载好各种可视化包,然后加载使用,调用可视化包里面的函数功能。
使用R语言进行数据可视化,虽要编程实现,但比C++或JavaScript等许多语言都要简单。因此,R语言并不太难学,但由于R语言最初是专门为统计学家和科学家设计的,因此入门门槛较高。
6.Python语言
和R语言一样,Python语言以其大量的开放库而闻名,有很多库可以用于绘图和可视化,如Matplotlib、Seaborn等。Python语言还拥有大量的机器学习库,包括Scikit-learn、XGBoost、TensorFlow、Keras和PyTorch等。Python中的Pandas库也可以兼容表格形式的数据,利用Pandas库处理CSV或Excel数据非常容易。除此之外,Python还有很优秀的科学计算软件包,比如Numpy库可以帮助用户瞬间完成复杂的数学计算,比如矩阵运算。所有这些包组合在一起,使Python语言成为专业级数据可视化的编程类流行工具。
Python语言的理念是强调代码的可读性和使编程变得简单或简洁,Python语言的设计者显然做到了,因为这种语言非常容易学习。虽然Python语言的语法灵感来自C语言,但与C语言不同的是,它的实现并不复杂。因此,Python语言作为初学者的计算机编程语言学习首选,用户可以在相对较短的时间内学会它。
由于Python语言在数据可视化方面的专业性和易学易用性,本书选择基于Python语言的可视化工具,详细介绍如何用Python实现数据可视化。
1.4.2 Python的数据可视化库
下面介绍几种常用的Python数据可视化库。
1.Matplotlib
Matplotlib是Python数据可视化库中的泰斗,尽管它已有十多年的历史,但仍然是Python社区中使用最广泛的绘图库,通过Matplotlib可以很方便地绘制二维、三维图表。但是在Matplotlib的使用过程中,也会受到图标控制参数不统一的困扰,如plot()函数参数中颜色参数用color,而散点图scatter()函数则用c[14]。
Matplotlib具有使用简单绘图语言实现复杂绘图、以交互式操作实现精细绘图、对图表的组成元素进行精细化控制等主要特点[15]。虽然Matplotlib使用起来有些复杂,上手有一定难度,但是它具有强大的数据可视化功能,因此,后来陆续出现的很多第三方库都是建立在Matplotlib库的基础上,有些甚至直接调取Matplotlib库中的方法,例如Pandas库、Seaborn库[16]。
2.Seaborn
Seaborn与Matplotlib一样,也是Python进行数据可视化的重要的第三方包。Seaborn是基于Matplotlib的图形可视化包,它在Matplotlib的基础上进行了更高级的API封装,提供了一种高度交互式界面,从而使得作图更加容易。我们用Seaborn能轻易做出各种有吸引力的统计图表。
Seaborn在Matplotlib的基础上,侧重于数据统计分析图表的绘制,包括带误差线的柱形图和散点图、箱体图、小提琴图、统计直方图与核密度估计图等。和Matplotlib绘图相比,Seaborn利用Matplotlib的强大功能,有以下几个优势:一是几行代码就能创建漂亮的图表;二是Seaborn可以快速设定图表颜色、主题和风格,以更美观、更现代的调色板进行可视化设计;三是Seaborn有图表分面展示[14]。
3.Bokeh
Bokeh是一个专门针对Web浏览器呈现功能的交互式可视化Python库,支持现代化Web浏览器展示(图表可以输出为JSON对象、HTML文档或者可交互的网络应用),这是Bokeh与其他可视化库最核心的区别。Bokeh提供风格优雅、简洁的D3.js图形化样式,并将此功能扩展到高性能交互的数据集、数据流上。使用Bokeh可以快速便捷地创建交互式绘图、仪表板和数据应用程序等[4]。
Bokeh基于The Grammar of Graphics,源自原生Python,而不是从R语言移植过来的。它的优势在于能够创建交互式网站图,可以很容易地输出为JSON对象、HTML页面或交互式Web应用程序[5]。其缺点是语法较复杂,不易上手。Bokeh提供三种不同的控制水平:最高级的控制管理水平可以帮助开发者快速地绘制常用图形,比如直方图、散点图等;中等的控制管理水平,与Matplotlib库原理相同,允许开发者控制图像的基本元素信息;最低级的控制管理水平主要是针对高端的开发者,需要定义图表中的每个元素[16]。
4.Plotly
Plotly是一个开源的、交互式和基于浏览器的Python图形库,可以创建在仪表板或网站上使用的交互式图表(可以将它们保存为HTML文件或静态图像)。Plotly基于plotly.js,而plotly.js又基于D3.js,因此它是一个高级图表库。Plotly的优势在于制作交互式图,包含了超过30多种图表类型,提供了一些在大多数库中没有的图表,如等高线图、树状图、科学图表、3D图表、金融图表等。Plotly绘制的图能直接在jupyter notebook中查看,也能保存为离线网页,或者保存在http://plot.ly云端服务器内,以便在线查看[6]。虽然Plotly功能较多,但Plotly的部分功能需付费使用。
5.Pyecharts
Pyecharts是基于Echarts开发的,是一个用于生成Echarts图表的类库。Echarts是一个百度开源的数据可视化JS库,凭借着良好的交互性、精巧的图表设计,得到了众多开发者的认可。更重要的是,该库的文档全部用中文撰写。Pyecharts实际上就是Echarts与Python的对接。
Pyecharts有支持交互式展示与点击、默认生成的样式美观、详细的中文文档与Demo、对中文开发者友好等特点。但Pyecharts不支持使用Pandas中的Series数据,需要将其转换为List数据才可以使用。
6.功能对比[7]
表1-1为Matplotlib、Seaborn、Bokeh、Plotly和Pyecharts在图形输出功能上的对比。
表1-1 Matplotlib、Seaborn、Bokeh、Plotly和Pyecharts的功能对比
注:〇表示支持不是很好;●表示支持较好;空白表示不支持。
由表1-1可以得出的结论是,Matplotlib可以制作基本图表、3D和多子图,但动画功能有限;Seaborn是Matplotlib的封装,功能比较有限,主要用于基本图表;Bokeh的控件功能比较多,但在绘制3D和动画图时要装插件;Pyecharts虽然动画好看,但是控件无法定制;和其他4个库相比,Plotly在功能上较为完善。