使用Python中的Bokeh包的数据可视化

Tavish Aggarwal.

I先前的帖子 使用Python的数据可视化,我们已经了解了绘制数据的各种可视化技术。我们看到海运和Matplotlib包提供了各种可视化。在此帖子中继续可视化数据,我们将研究使用Bokeh包可视化数据的技术。

在下面显示的示例中,我们将使用 屋产销售所 dataset from the kaggle. The data has been loaded in housePropertyDataset variable.

import pandas as pd

housePropertyDataset = pd.read_csv('house_property_sales.csv')

让我们开始吧。

bokeh是一个互动可视化库,用于针对现代Web浏览器进行演示。其目标是提供优雅,简洁地构建多功能图形,并在非常大或流的数据集中使用高性能交互来扩展这种能力。

Bokeh可以帮助任何希望快速轻松地创建交互式图,仪表板和数据应用程序的人。

让我们来看看示例代码以绘制散景可视化:

from bokeh.plotting import figure, show
from bokeh.io import output_file

p = figure(x_axis_label='Garbage Area', y_axis_label='Sales Price', tools='box_select')

p.circle(x=housePropertyDataset['GarageArea'], y=housePropertyDataset['SalePrice'], size=5, 
                   selection_color='green', nonselection_alpha=0.1, color='red', alpha=0.5)

output_file('out_sales_price_garbage_area.html')
show(p)

输出: 关联

这里在上面显示的示例中,我们使用圆形字形来生成可视化。散景包提供的线条,交叉,补丁等其他雕文有更多的雕文。

我们还通过了工具参数来计算方法。 Tools参数将包含逗号分隔值,该值将为绘图添加额外的功能。

绘图中使用的三个最重要的参数:大小,颜色和alpha。这些控制字形的大小,分别控制字形的颗粒的颜色和曲线的透明度。

ColumnDataSource.

我们甚至可以从数据集创建ColumnDataSource。 ColumnDataSource是存储Bokeh可视化数据的方法。让我们来看看下面显示的一个例子:

from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import output_file

p = figure(x_axis_label='Garbage Area', y_axis_label='Sales Price')
source = ColumnDataSource(housePropertyDataset)
p.circle(x= 'GarageArea', y = 'SalePrice', source=source)
output_file('out_sales_price_garbage_area_cds.html')
show(p)

输出: 关联

悬停工具

如前所述,我们可以将工具选项传递给图形方法,并指定我们想要在可视化中使用的工具。

以非常相似的方式,我们也可以使用悬停工具。 

from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import output_file
from bokeh.models import HoverTool

p = figure(x_axis_label='Garbage Area', y_axis_label='Sales Price')

source = ColumnDataSource(housePropertyDataset)

p.circle(x='GarageArea', y='SalePrice', size=10,
         fill_color='grey', alpha=0.1, line_color=None,
         hover_fill_color='firebrick', hover_alpha=0.5,
         hover_line_color='white', source=source)

hover = HoverTool(tooltips=[('sales price', '@SalePrice'),
                           ('Condition', '@SaleCondition')])
p.add_tools(hover)

output_file('out_sales_price_garbage_area_ht.html')
show(p)

输出: 关联

在上面显示的示例中,我们使用add_tools方法。现在我们将在悬停悬停中突出显示幽杯功能。

彩色映射

我们还可以使用散景包的颜色映射绘图,在那里我们可以基于该类别生成彩色绘图。

请参阅示例,如下所示:

from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import output_file
from bokeh.models import HoverTool, CategoricalColorMapper

p = figure(x_axis_label='Installment Commitment', y_axis_label='Credit Amount')
source = ColumnDataSource(housePropertyDataset)

color_mapper = CategoricalColorMapper(factors=['GasA', 'GasW', 'Grav', 'Wall', 'OthW', 'Floor'],
                                 palette=['red', 'green', 'orange', 'blue', 'pink', 'yellow'])

p.circle(x='GarageArea', y='SalePrice', source=source, 
         color=dict(field='Heating', transform=color_mapper), legend='Heating')

hover = HoverTool(tooltips= [('Heating','@Heating')], mode='hline')
p.add_tools(hover)
p.legend.location = 'top_right'
p.legend.background_fill_color = 'lightgray'
output_file('out_credit_score.html')
show(p)

输出: 关联

在上面显示的示例中,我们已定义一个类别彩色映射器,我们已经为特定类别指定了颜色。

定义类别彩色映射器后,我们已将映射器指定为字形功能(即圆函数)中的颜色参数。

此外,请注意,我们已将图例添加到绘图中,并将其定位在绘图的右上角。此外,我们已添加背景颜色以获取可见性。

布局

我们还可以在单​​个HTML文件中具有多个绘图。为此,我们需要定义绘图显示的布局。 Bokeh提供了我们可以使用的各种功能来定义布局。

在定义布局之前,让我们定义我们想要绘制的数字:

from bokeh.plotting import figure, ColumnDataSource

source = ColumnDataSource(housePropertyDataset)

p1 = figure(x_axis_label='Garbage Area', y_axis_label='Sales Price')
p1.circle(x='GarageArea', y='SalePrice', source=source)

p2 = figure(x_axis_label='Overall Qualification', y_axis_label='Sales Price')
p2.circle(x='OverallQual', y='SalePrice', source=source)

p3 = figure(x_axis_label='Total Basement Area', y_axis_label='Sales Price')
p3.circle(x='TotalBsmtSF', y='SalePrice', source=source)

p4 = figure(x_axis_label='Year Remod Add', y_axis_label='Sales Price')
p4.x(x='YearRemodAdd', y='SalePrice', source=source)

现在,我们有数据定义了我们需要绘制的。让我们定义布局来绘制数字。

行和列

我们可以定义行和列中的数字。让我们来看看下面显示的一个例子:

from bokeh.layouts import column, row
from bokeh.io import output_file

layout = column(row(p1, p2), row(p3, p4))
output_file('out_column_row.html')
show(layout)

输出: 关联

正如您在输出中看到的,所以在行和列时尚中绘制了四个图。

玻璃器皿

而不是使用行和列,我们可以使用将提供类似结果的网格图。并将很容易定义。

from bokeh.layouts import gridplot
from bokeh.io import output_file

row1  = [p1, p2]
row2  = [p3, p4]

layout = gridplot([row1, row2])

output_file('out_grid_output.html')
show(layout)

输出: 关联

标签布局

我们还可以创建图表的标签视图,以获得更好的用户体验。

from bokeh.models.widgets import Tabs, Panel
from bokeh.io import output_file

# Create tab1 from plot p1: tab1
tab1 = Panel(child=p1, title='Garbage Area vs Sales Price curve')

# Create tab2 from plot p2: tab2
tab2 = Panel(child=p2, title='Overall Qualification vs Sales Price curve')

# Create tab3 from plot p3: tab3
tab3 = Panel(child=p3, title='Total Basement Area vs Sales Price curve')

# Create tab4 from plot p4: tab4
tab4 = Panel(child=p4, title='Year Remod Add vs Sales Price curve')

# Create a Tabs layout: layout
layout = Tabs(tabs=[tab1, tab2, tab3, tab4])

# Specify the name of the output_file and show the result
output_file('out_tabs_output.html')
show(layout)

输出: 关联

联系地块

正如我们绘制了单个地块一样,是时候了解如何建立两个或两个以上的地块之间的关系。在这里,我们将讨论链接的轴,连接选择和连接的刷牙。

连接轴

连接轴图是与绘制的其他图表共用其Y轴或X轴的图。考虑下面显示的示例:

from bokeh.io import output_file

p1.y_range = p2.y_range
row1  = [p1, p2]

layout = gridplot([row1])

output_file('out_shared_axes_output.html')
show(layout)

输出: 关联

以下是我们使用的示例,其中我们使用的是布局部分中定义的相同图。由于您可能在输出中观察到的y轴在两个图中共享。

以非常相似的方式,我们也可以共享X轴或X轴和y轴。

联系选择

当使用其中一个绘图中使用选择器工具选择区域时,在所有其他地区中选择特定区域。这称为链接选择。

为了实现链接选择,我们必须确保这些数字共享相同的数据源(即columnDataSource对象)。由于我们的图形共享相同的源,您可以在上述任何示例中看到此发生。

概括

在这篇文章中,我们探索使用Bokeh包创建可视化。我们使用了各种工具,如悬停和颜色映射,以绘制Bokekh Plotots。在对Bokeh曲线的基本理解之后,我们将看待将多个绘图作为单个输出绘制的技术。然后,我们看到如何使用像链接轴,链接选择等的技术创建链接的图。

希望你喜欢帖子。不要忘记在下面的评论部分留下您的意见。

作者信息

Tavish Aggarwal.

网站: http://tavishaggarwal.com

Tavish Aggarwal.是一个数据科学家 在一个海德拉巴工作,具有广泛的经验,在跨电子商务,财务,医疗保健等等不同领域解决现实世界的业务问题。 他对技术充满热情,喜欢在团队中工作。