手把手|在Python中用Bokeh实现交互式数据可视化

引言


最近,我一直在看美国德克萨斯州奥斯汀举办的SciPy 2015会议上的一段视频——“用Blaze和Bokeh创建Python数据应用程序”,并且情不自禁地反复思考这两个库赋予世界各地使用Python的数据科学家们的强大能力。在本文中,我将带你体验使用Bokeh实现数据可视化的各种可能途径,以及Bokeh为什么是每位数据科学家的必备“神器”。

◆ ◆ ◆

什么是Bokeh?

Bokeh是一个专门针对Web浏览器的呈现功能的交互式可视化Python库。这是Bokeh与其它可视化库最核心的区别。正如下图所示,它说明了Bokeh如何将数据展示到一个Web浏览器上的流程。

正如你所看到的,Bokeh捆绑了多种语言(Python, R, lua和Julia)。这些捆绑的语言产生了一个JSON文件,这个文件作为BokehJS(一个Javascript库)的一个输入,之后会将数据展示到现代Web浏览器上。

Bokeh可以像D3.js那样创建简洁漂亮的交互式可视化效果,即使是非常大型的或是流数据集也可以进行高效互动。Bokeh可以帮助所有人快速方便地创建互动式的图表、控制面板以及数据应用程序。

◆ ◆ ◆

Bokeh能为像我这样的数据科学家提供什么?

我起初是作为一名商业智能从业者(BI professional)开始我的数据科学之旅的,随后,又逐渐学习了预测建模,数据科学和机器学习。我主要使用QlikView和Tableau进行数据可视化,用SAS和Python来做预测分析和数据分析。我几乎没有用过JavaScript。

因此,对于我之前所有的数据产品或想法,我只能要么将其外包要么通过网站线框图向别人展示,这两者都不适合创建快速原型。现在,有了Bokeh,我就可以继续使用Python,并且快速创建这些原型。

Bokeh的优势:

  •  Bokeh允许你通过简单的指令就可以快速创建复杂的统计图,
  •  Bokeh提供到各种媒体,如HTML,Notebook文档和服务器的输出
  • ·我们也可以将Bokeh可视化嵌入flask和django程序
  •  Bokeh可以转换写在其它库(如matplotlib, seaborn和ggplot)中的可视化
  • ·Bokeh能灵活地将交互式应用、布局和不同样式选择用于可视化

综合Bokeh的优点及其面临的挑战,Bokeh是当前用于快速开发原型产品的理想工具。然而,如果你想在产品的环境下搞点新东西,D3.js可能仍然是你最好的选择。

Bokeh面临的挑战:

  • 与任何即将到来的开源库一样,Bokeh正在经历不断的变化和发展。所以,你今天写的代码可能将来并不能被完全再次使用。
  • 与D3.js相比,Bokeh的可视化选项相对较少。因此,短期内Bokeh无法挑战D3.js的霸主地位。

综合Bokeh的优点及其面临的挑战,Bokeh是当前用于快速开发原型产品的理想工具。然而,如果你想在产品的环境下搞点新东西,D3.js可能仍然是你最好的选择。

用Bokeh实现可视化

Bokeh提供了强大而灵活的功能,使其操作简单并高度定制化。它为用户提供了多个可视化界面,如下图所示:

  • 图表(Charts):一个高级接口(high-level interface),用以简单快速地建立复杂的统计图表。
  • 绘图(Plotting):一个中级接口(intermediate-level interface),以构建各种视觉符号为核心。
  • 模块(Models):一个低级接口(low-level interface),为应用程序开发人员提供最大的灵活性。

本文中,我们仅涉及前两个接口,图表(Charts)和绘图(Plotting)。

图表

如上所述,它是一个高级接口,用于通过标准的可视化方式呈现信息。这些方式包括箱形图、柱状图、面积图、热图、甜甜圈图和许多其它图形。你只需输入数据框(data frames)、numpy数组或字典就可以生成这些图。

让我们来看看创建一个图表的通用方法:

1. 导入库和函数/方法

2. 准备数据

3. 设置输出模式(Notebook文档、Web浏览器或服务器)

4. 创建图表并选择图表的样式(如果需要)

5. 可视化图表

为了更好地理解这些步骤,让我用下面的例子来演示一下:

图表范例-1:使用Bokeh创建一个柱状图并在Web浏览器上显示

我们将遵循上述列出的步骤来创建一个图表:

#导入库函数

from bokeh.charts import Bar, output_file, show

#在电脑屏幕上使用 output_notebook来可视化数据

#准备数据 (模拟数据)

data = {"y": [1, 2, 3, 4, 5]}

#输出到Line.HTML

output_file("lines.html", title="line plot example")

#创建一个新的含有标题和轴标签的窗口在线窗口

p = Bar(data, title="Line Chart Example", xlabel='x', ylabel='values', width=400, height=400)

#显示结果

show(p)

在上面的图表中,你可以看到顶部的工具选项(缩放、调整大小、重置、旋转缩放),这些工具可以帮助你与图表进行互动。同时,你也可以看到多个图表选项(图例、X轴名标注、Y轴名标注、坐标网格线、宽度、高度等)和各种图表的范例。

图表范例-2:在Notebook文档中,利用箱线图比较IRIS数据集中的萼片长度(sepal length)和花瓣长度(petal length)的分布情况

要创建这个可视化图表,我首先要使用Sklearn库导入IRIS数据集。然后,按照上述步骤在ipython Notebook文档中进行图表可视化。

#IRIS 数据集

from sklearn.datasets import load_iris

import pandas as pd

iris = load_iris()

df=pd.DataFrame(iris.data)

df.columns=['petal_width','petal_length','sepal_width','sepal_length']

#导入库函数

from bokeh.charts import BoxPlot, output_notebook, show

data=df[['petal_length','sepal_length']]

#输出到电脑屏幕上

output_notebook()

#创建一个新的含有标题和轴标签的窗口在线窗口

p = BoxPlot(data, width=400, height=400)

# 显示结果

show(p)

图表范例-3:创建一个线图到Bokeh服务器

在绘制可视化图表到Bokeh服务器之前,你首先需要运行服务器。

如果你使用的是conda包,你可以在任何目录下使用运行命令“bokeh-server”。如果不是,“python ./bokeh-server”通常也可以。

在Bokeh服务器上进行可视化绘图有多个优点:

  • 图表有更多的受众
  • 可对大数据集进行交互式可视化
  • 可根据数据流自动更新图表
  • 创建控制面板和应用程序

开始在Bokeh服务器上绘图之前,我先运行了“bokeh-server”指令对其进行初始化,然后再运行用于可视化的相关指令。

from bokeh.plotting import figure, output_server, show

output_server("line")

p = figure(plot_width=400, plot_height=400)

# 添加线渲染

p.line([5, 2, 3, 4, 5], [5, 7, 2, 4, 5], line_width=2)

show(p)

绘图

Plotting是一个中级接口,是以构建视觉符号为核心的接口。在这里,你可以综合各种视觉元素(点、圆、线、补丁和许多其它元素)和工具(悬停、缩放、保存、重置和其它工具)来创建可视化。

使用Bokeh的Plotting接口创建的图表自带一组默认的工具和视觉效果。绘图可按照以下步骤进行:

1.导入库、方法或函数

2.选择输出方式(Notebook文档、Web浏览器、服务器)

3.激活图(类似matplotlib)

4.执行后续的绘图操作,这将影响已经生成的图形。

5.图表可视化

为了更好地理解这些步骤,让我举例演示:

绘图范例-1:在Notebook文档中创建二维散点图(正方形标记)

from bokeh.plotting import figure, output_notebook, show

# 输出到电脑屏幕上

output_notebook()

p = figure(plot_width=400, plot_height=400)

#添加一个矩形框,标有大小、颜色、alpha值

p.square([2, 5, 6, 4], [2, 3, 2, 1, 2], size=20, color="navy")

#显示结果

show(p)

同样,你可以创建各种其它类型的图:如线、角和圆弧、椭圆、图像、补丁以及许多其它的图。

绘图范例-2:将两种视觉元素合并在一张图中

from bokeh.plotting import figure, output_notebook, show

# 输出到电脑屏幕上

output_notebook()

p = figure(plot_width=400, plot_height=400)

#添加一个矩形框,标有大小、颜色、alpha值

p.square([2, 5, 6, 4], [2, 3, 2, 1, 2], size=20, color="navy")

p.line([1, 2, 3, 4, 5], [1, 2, 2, 4, 5], line_width=2) #added a line plot to existing figure

# 显示结果

show(p)

绘图范例-3:为上图添加一个悬停工具和坐标轴标签

from bokeh.plotting import figure, output_notebook, show

from bokeh.models import HoverTool, BoxSelectTool #For enabling tools

# 输出到电脑屏幕上

output_notebook()

#添加悬停工具

TOOLS = [BoxSelectTool(), HoverTool()]

p = figure(plot_width=400, plot_height=400, tools=TOOLS)

#添加一个矩形框,标有大小、颜色、alpha值

p.square([2, 5, 6, 4], [2, 3, 2, 1, 2], size=20, color="navy", alpha=0.5)

#显示轴标签

p.xaxis.axis_label = "X-axis"

p.yaxis.axis_label = "Y-axis"

# 显示结果

show(p)

绘图范例-4:使用纬度和经度数据来绘制印度地图

注:我已经有一个CSV格式的印度边界的纬度和经度的多边形数据。我将使用该数据来绘图。

在这里,我们将使用补丁绘图,让我们看看下面的命令:

#导入库函数

import pandas as pd

from bokeh.plotting import figure, show, output_notebook

#导入经纬度坐标

India=pd.read_csv('E:/India.csv')

del India['ID']

India.index=['IN0','IN1','IN2','IN3','IN4','IN5']

#如果数据框中的坐标是字符类型转换字符值为浮点值

for j in range(0,len(India)):

 a = India['lats'][j]

 India['lats'][j] = [float(i) for i in a[1:len(a)-1].split(",")]

for j in range(0,len(India)):

 a = India['lons'][j]

 India['lons'][j] = [float(i) for i in a[1:len(a)-1].split(",")]

#输出到电脑屏幕上

output_notebook()

# 创建画板

p = figure(plot_height=400, plot_width=400, toolbar_location="right",x_axis_type=None, y_axis_type=None)

p.patches(xs=India['lons'], ys=India['lats'], fill_color="white",line_color="black", line_width=0.5)

#可视化图标

show(p)

◆ ◆ ◆

结语

在本文中,我们讨论了用Bokeh创建可视化以及如何将可视化结果呈现在Notebook文档、html文档以及bokeh服务器上。我们还谈到了如何使用绘图接口创建个性化的可视化图表,通过该功能,你可以将多种视觉元素结合到一起来展示数据信息。

原文发布时间为:2016-03-24

时间: 2024-10-25 21:58:10

手把手|在Python中用Bokeh实现交互式数据可视化的相关文章

Python的Tornado框架实现数据可视化的教程

  这篇文章主要介绍了举例讲解Python的Tornado框架实现数据可视化的教程,Tornado是一个异步的高人气开发框架,需要的朋友可以参考下 所用拓展模块 xlrd: Python语言中,读取Excel的扩展工具.可以实现指定表单.指定单元格的读取. 使用前须安装. 下载地址:https://pypi.python.org/pypi/xlrd 解压后cd到解压目录,执行 python setup.py install 即可 datetime: Python内置用于操作日期时间的模块 拟实现

超赞的交互式数据可视化网站

根据国际数据公司(IDC)的估算,到2015年,全球的数据增长率将会是2012年的两倍,年数据量将达到5.6泽字节(1ZB = 1024的3次方 TB).那将会有非常庞大的数据需要消化,尤其是那些打印文本或索然无味的长达50页的PDF文档.大脑处理视觉的速度比处理文字快60000倍,这使人更容易理解数据的意义.模式.趋势和相关性在文字叙述性的数据中不容易被察觉,但在可视化图表上却是一目了然.尽管如此,复杂数据的可视化仍然会使人很困惑.这里,看一些非常棒的复杂数据的可视化例子! 1亿万富豪榜:世界

Python数据可视化1.4 可视化如何帮助决策

1.4 可视化如何帮助决策 数据有多种视觉展示的方式.然而,其中仅有少数方式能够用人们视觉上看得懂且观察到的新模式来刻画数据.数据可视化并不像看起来那么简单:它是一门艺术,且需要很多实践经验.(就像画一幅画,一个人不可能一天之内成为绘画大师,它需要很多实践经验.) 人类感知在数据可视化领域扮演着重要角色.健康人的眼睛具有水平方向大约200度的视野范围(两只眼睛共享大约120度的视野).大概人类大脑的四分之一涉及可视化处理,这比其他任何感官都要多.在听觉.视觉和嗅觉中,人的视觉占据最多(约为60%

数据可视化,我应从何开启?

我喜欢数据并将它广为人知. 如果您最近和我参加聚会我在您耳边说的都是有关数据可视化工具或者最近使用的酷R包对此我在这向您表示歉意. 如果您和我玩范特西游戏欢迎您来到图表世界这里有很多的图表. 不要为越来越频繁地听到下面的问题感到惊讶"Nick我想走向数据分析和数据可视化我应该从哪里开始 不幸的是没有一个完美的答案适合所有的人–每一个人的需求不同且人们已经知道的东西相差很大.但令我高兴的是一件关于最近科技/教育/商业环境事情 来自不同职业道路和背景的聪明人都对自己说"我需要从数据中得到更

如何让金融数据可视化

在互联网金融和金融互联网化的时代,日常生活被海量的数据化信息围绕.从设计层面来说,也是一项新领域的挑战.数据可视化设计是否有规律可循,从设计作品中能否发现其设计的共性和特点,如何从层层数据信息中提取重要的信息内容,通过简介易懂的设计语言准确表达.用设计师的眼睛,看见产品的连贯性.通过设计的信息会更合理,更能讲故事,让我们只关注信息的重点.否则视觉只是中看不中用. 数据可视化是什么 The main goal of data visualization is its ability to visu

4款开源免费的数据可视化JavaScript库

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   HTML5中新的图形元素和JavaScript引发了交互式数据显示技术的复兴.如今的浏览器用户界面不仅功能丰富.令人赏心悦目,而且还作为数据可视化的载体,用于显示柱状体.气泡图和丰富多彩的地图等. 交互式数据可视化在很大程度上取决于JavaScript库的任务能力.在这篇文章中,我们将看看四个JavaScript库:D3,InfoVis,Processing.j

悉尼科技大学数据场馆实现数据可视化

文章讲的是悉尼科技大学数据场馆实现数据可视化,2015年9月1日(悉尼)悉尼科技大学数据场馆(Data Arena)身临其境的视觉和听觉观感将大数据研究发现带入新领域. 多家媒体受邀体验了这一挑战观感并潜力无限的艺术呈现装置.目前这一装置位于Ultimo Broadway的悉尼科技大学工程和信息技术大楼一层运行. 作为澳洲唯一.全球为数不多的类似装置的领跑者,悉尼科技大学数据场馆(Data Arena)旨在简化人们每天收集到并试图理解的大量繁复多样的数据,并帮助人们从中受益. 悉尼科技大学副校长

大数据可视化的最新动态

引言 数据可视化 是将数据以不同形式展现在不同系统中,其中包括属性和变量的单位信息.基于可视化发现数据的方法允许用户使用不同的数据源,来创建自定义分析.先进的分析集成了许多方法,为了支持交互式动画在台式电脑.笔记本电脑或平板电脑.智能手机等移动设备上创建图形桌面.根据调查,表1显示了数据可视化的好处. 对于可视化有以下几点建议 大数据 是大容量.高速度并且数据之间差异很大的数据集,因此需要新的处理方法来优化决策的流程.大数据的挑战在于数据采集.存储.分析.共享.搜索和可视化[5] 1."所有数据

数据可视化的7个好处

数据可视化是指以饼状图等图形的方式展示数据.这帮助用户能够更快地识别模式.交互式可视化能够让决策者深入了解细节层次.这种展示方式的改变使得用户可以查看分析背后的事实. 以下是数据可视化影响企业做决策和战略调整的七种方式. 1.动作更快 人脑对视觉信息的处理要比书面信息容易得多.使用图表来总结复杂的数据,可以确保对关系的理解要比那些混乱的报告或电子表格更快. 这提供了一种非常清晰的沟通方式,使业务领导者能够更快地理解和处理他们的信息.大数据可视化工具可以提供实时信息,使利益相关者更容易对整个企业进