译文出品 | Python数据之道 (ID:PyDataRoad)
本文通过一个项目案例,详细的介绍了如何从 Bokeh 基础到构建 Bokeh 交互式应用程序的过程,内容循序渐进且具有很高的实用性。本文共有两万字左右,属于纯干货分享,强烈推荐大家阅读后续内容。
如果觉得内容不错,欢迎关注『Python数据之道』并将内容分享到您的朋友圈。
本文由以下几个大的部分组成:
Bokeh 基础介绍
在 Bokeh 中添加主动交互功能
在 Bokeh 中创建交互式可视化应用程序
Tips:
本文源代码地址,可以在公众号『Python数据之道』后台回复 “code” 来获取。
关于 Bokeh 基础的详细介绍,可以参考以下内容:
Bokeh入门
figure 详细解读
Bokeh基础可视化图形
数据类型简介: ColumnDataSource
数据的添加、修改和筛选
图形与组件的布局简介
可用于数据科学的资源正在迅速发展,这在可视化领域尤其明显,似乎每周都有另一种选择。 随着所有这些进步,有一个共同的趋势:增加交互性。 人们喜欢在静态图中查看数据,但他们更喜欢的是使用数据来查看更改参数如何影响结果。 关于我的研究,一份报告告诉建筑物所有者他们可以通过改变他们的空调(AC)使用计划表节省多少电力是很好的,但是给他们一个交互式图表更有效,他们可以选择不同的使用计划表,看看他们的选择如何影响用电量。 最近,受到互动图的趋势和不断学习新工具的渴望的启发,我一直在使用 Bokeh,一个 Python 库。 我为我的研究项目构建的仪表板中显示了 Bokeh 交互功能的一个示例,如下:
虽然我不能分享这个项目背后的代码,但我可以通过一个使用公开数据构建完全交互式 Bokeh 应用程序的例子。 本文将介绍使用 Bokeh 创建应用程序的整个过程。 首先,我们将介绍 Bokeh 的基础内容, 我们将使用 nycflights13 数据集,该数据集记录了 2013年超过 300,000 个航班。首先,我们将专注于可视化单个变量,在这种情况下,航班的到达延迟时间为几分钟,我们将从构造基本直方图开始。
Bokeh 基础Bokeh 的主要概念是图形一次构建一层。 我们首先创建一个图形(figure),然后在图形中添加称为 图形符号(glyphs) 的元素。 glyphs 可以根据所需的用途呈现多种形状:圆形(circles),线条(lines) ,补丁(patches),条形(bars),弧形(arcs)等。 让我们通过制作带有正方形和圆形的基本图表来说明 glyphs 的概念。 首先,我们使用 figure 方法创建一个图,然后通过调用适当的方法并传入数据将我们的 glyphs 附加到 figure 中。 最后,我们展示了所做的图表。
# bokeh basics from bokeh.plotting import figure from bokeh.io import show, output_notebook # Create a blank figure with labels p = figure(plot_width = 600, plot_height = 600, title = \'Example Glyphs\', x_axis_label = \'X\', y_axis_label = \'Y\') # Example data squares_x = [1, 3, 4, 5, 8] squares_y = [8, 7, 3, 1, 10] circles_x = [9, 12, 4, 3, 15] circles_y = [8, 4, 11, 6, 10] # Add squares glyph p.square(squares_x, squares_y, size = 12, color = \'navy\', alpha = 0.6) # Add circle glyph p.circle(circles_x, circles_y, size = 12, color = \'red\') # Set to output the plot in the notebook output_notebook() # Show the plot show(p)图示如下:
现在让我们开始展示航班延误数据,在进入图表之前,应该加载数据并对其进行简要检查:
# Read the data from a csv into a dataframe flights = pd.read_csv(\'../data/flights.csv\', index_col=0) # Summary stats for the column of interest flights[\'arr_delay\'].describe() out[]: count 327346.000000 mean 6.895377 std 44.633292 min -86.000000 25% -17.000000 50% -5.000000 75% 14.000000 max 1272.000000上述统计数据提供了可以用来决策的信息:共有 327,346 次航班,最短延误时间为-86 分钟(意味着航班提前 86 分钟),最长延迟时间为 1272 分钟,惊人的 21 小时! 75% 的分位数仅在 14 分钟,因此我们可以假设超过 1000 分钟的数字可能是异常值(这并不意味着它们是非法的,只是极端的)。 下面将重点关注直方图的 -60 分钟到 +120 分钟之间的延迟。
直方图是单个变量的初始可视化的常见选择,因为它显示了数据的分布。 x 位置是被称为区间(bins)的变量的值,并且每个柱子的高度表示每个区间中的数据点的计数(数量)。 在我们的例子中,x 位置将代表以分钟为单位的到达延迟,高度是相应 bin 中的航班数量。 Bokeh 没有内置的直方图,但是我们可以使用 quad 来制作我们自己的直方图。