Bokeh数据 | 为交互式数据可视化库Bokeh提供数据的N种方式

Posted 荼蘼Studio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bokeh数据 | 为交互式数据可视化库Bokeh提供数据的N种方式相关的知识,希望对你有一定的参考价值。

没有数据,自然就没办法进行数据可视化,这一部分就介绍提供数据的几种方式,此外,还会介绍筛选器的使用。

 直接提供数据 

在Bokeh中,可以将值列表直接传递给绘制图表。 

from bokeh.plotting import figure

x_values = [1, 2, 3, 4, 5]

y_values = [6, 7, 2, 3, 6]

p = figure()

p.circle(x=x_values, y=y_values)

 ColumnDataSource 

ColumnDataSource是大多数Bokeh图的核心,用于提供可视化的数据,利用它,可以轻松地在多个图和小部件之间共享数据。当使用相同的ColumnDataSource来驱动多个渲染器时,也会共享数据源的选择。因此可以使用选择工具从一个绘图中选择数据点,并使它们在第二个绘图(链接选择)中自动高亮显示。

from bokeh.plotting import figure

from bokeh.models import ColumnDataSource

data = {'x_values': [1, 2, 3, 4, 5],
       'y_values': [6, 7, 2, 3, 6]}

source = ColumnDataSource(data=data)

p = figure()

p.circle(x='x_values', y='y_values', source=source)

数据参数也可以是Pandas DataFrame或GroupBy对象。

source = ColumnDataSource(df)

group = df.groupby(('colA', 'ColB'))

source = ColumnDataSource(group)

数据流

ColumnDataSource流是将新数据附加到CDS的有效方式。 通过使用流方法,Bokeh仅向浏览器发送新数据,而不是整个数据集。

source = ColumnDataSource(data=dict(foo=[], bar=[]))

# 对数据源中所有进行新的,相同长度的更新

new_data = {
   'foo' : [10, 20],
   'bar' : [100, 200],}

source.stream(new_data)

修补

ColumnDataSource修补是更新数据源切片的有效方法。 通过使用补丁方法,Bokeh只需将新数据发送到浏览器而不是整个数据集。

(index, new_value)  # 替换单个列值

# or

(slice, new_values) # 替换多个列值

 使用CDSView筛选数据 

通常,我们会需要关注从大数据中进行二次采样或筛选的一部分数据。 使用CDSView,底层数据不需要更改,并且可以在图中共享。 CDSView由一个或多个筛选器组成,用于选择应绑定到特定字形的数据源的行。

CDSView有两个属性,源和筛选器。 

from bokeh.plotting import figure

from bokeh.models import ColumnDataSource, CDSView

source = ColumnDataSource(some_data)

view = CDSView(source=source, filters=[filter1, filter2])

p = figure()

p.circle(x="x", y="y", source=source, view=view)

索引筛选器

索引筛选器( IndexFilter)是最简单的筛选器类型,是一个你想要包含在图中数据的索引。

from bokeh.plotting import figure, output_file, show

from bokeh.models import ColumnDataSource, CDSView, IndexFilter

from bokeh.layouts import gridplot

output_file("index_filter.html")


source = ColumnDataSource(data=dict(x=[1, 2, 3, 4, 5], y=[1, 2, 3, 4, 5]))

view = CDSView(source=source, filters=[IndexFilter([0, 2, 4])])tools = ["box_select", "hover", "reset"]


p = figure(plot_height=300, plot_width=300, tools=tools)

p.circle(x="x", y="y", size=10, hover_color="red", source=source)


p_filtered = figure(plot_height=300, plot_width=300, tools=tools)

p_filtered.circle(x="x", y="y", size=10, hover_color="red", source=source, view=view)


show(gridplot([[p, p_filtered]]))

布尔筛选器

布尔筛选器(BooleanFilter)通过布尔值属性中的True或False值列表从数据源中选择行。

from bokeh.plotting import figure, output_file, show

from bokeh.models import ColumnDataSource, CDSView, BooleanFilter

from bokeh.layouts import gridplot


output_file("boolean_filter.html")


source = ColumnDataSource(data=dict(x=[1, 2, 3, 4, 5], y=[1, 2, 3, 4, 5]))

booleans = [True if y_val > 2 else False for y_val in source.data['y']]

view = CDSView(source=source, filters=[BooleanFilter(booleans)])


tools = ["box_select", "hover", "reset"]

p = figure(plot_height=300, plot_width=300, tools=tools)

p.circle(x="x", y="y", size=10, hover_color="red", source=source)


p_filtered = figure(plot_height=300, plot_width=300, tools=tools, x_range=p.x_range, y_range=p.y_range)

p_filtered.circle(x="x", y="y", size=10, hover_color="red", source=source, view=view)


show(gridplot([[p, p_filtered]]))

组筛选器

组筛选器可以从数据集中选择具有分类变量特定值的行。 组筛选器有两个属性,column_name,ColumnDataSource中的列名和组,要选择的列的值。

在下面的例子中,花朵包含一个分类变量物种,它可以是setosa,versicolor或virginica。

from bokeh.plotting import figure, output_file, show

from bokeh.layouts import gridplot

from bokeh.models import ColumnDataSource, CDSView, GroupFilter


from bokeh.sampledata.iris import flowers


output_file("group_filter.html")


source = ColumnDataSource(flowers)

view1 = CDSView(source=source, filters=[GroupFilter(column_name='species', group='versicolor')])


plot_size_and_tools = {'plot_height': 300, 'plot_width': 300, 'tools':['box_select', 'reset', 'help']}


p1 = figure(title="Full data set", **plot_size_and_tools)

p1.circle(x='petal_length', y='petal_width', source=source, color='black')


p2 = figure(title="Setosa only", x_range=p1.x_range, y_range=p1.y_range, **plot_size_and_tools)

p2.circle(x='petal_length', y='petal_width', source=source, view=view1, color='red')


show(gridplot([[p1, p2]]))

以上是关于Bokeh数据 | 为交互式数据可视化库Bokeh提供数据的N种方式的主要内容,如果未能解决你的问题,请参考以下文章

Bokeh 0.12.3dev3,Python 交互式可视化库

超详细,Python库 Bokeh 数据可视化实用指南

Bokeh 0.12.2rc1 发布,Python 交互式可视化库

一个交互式可视化Python库——Bokeh

推荐一款数据可视化利器:Bokeh

不断更数据科学指南 可视化库Bokeh分享