HoloView -- Tabular Datasets

原文地址HoloView – Tabular Datasets

表格数据集

正如我们已经发现的那样,元素是围绕数据的简单包装,提供了语义上有意义的视觉表示。HoloViews可以处理多种数据类型,但其中许多可以分类为:

  • Tabular: 表格数据
  • Gridded: 阵列数据
    我们将分成两个章节来描述上述的两种结构,在本篇文章中描述表格数据,包括下述的各种类型(包括NumPy array组成的字典类型,pandas的DataFrames, dask DataFrames, 和 xarray DataArrays ``Datasets`)。

表格化

Tabular data (also called columnar data) is one of the most common, general, and versatile data formats, corresponding to how data is laid out in a spreadsheet.
表格数据(也称为柱状数据)是最常见、通用和通用的数据格式之一,对应于数据在电子表格中的布局方式。
有很多方法可以将数据转化为表格形式,对于交互式分析,tidy data提供了简单与灵活的方法。对于整齐的数据,表格的表示变量维度表示观察值。理解这种格式的最佳方法是查看这样的数据集:

import numpy as np
import pandas as pd
import holoviews as hv
from holoviews import opts
hv.extension('bokeh', 'matplotlib')```

```python
path = r"C:\Users\samsung\AppData\Local\Programs\Python\Python38\Lib\site-packages\holoviews\examples\getting_started"
import os
os.chdir(path)
diseases = pd.read_csv('../assets/diseases.csv.gz')
diseases.head()

在这里插入图片描述
这个特殊的数据集是[华尔街日报]((http://graphics.wsj.com/infectious-diseases-and-vaccines/#b02g20t20w15)一篇优秀的视觉新闻报道的主题。华尔街日报的主题详细的诉说了各种疾病随时间的发生率,该数据可以从匹兹堡大学的相应项目中下载University of Pittsburgh’s Project Tycho。我们可以看到,我们有5个数据列,每个数据列对应于指定特定测量值的自变量(“年”、“周”、“州”),或报告当时实际测量值/因变量(“麻疹”或“百日咳”发病率)。
了解变量之间的两两关系对于可视化是至关重要的,但是在表格中并没有这些信息。显然绘制“周”与“州”之间的关系图没有任何意义,而每个州下的麻疹率(在其他维度上求平均)的结果将很适合,但是并无法从表格格式中去推断这些约束。因此我们会先创建一个Dataset这个HoloView对象,该Dataset声明了自变量(kdims 这个维度)和因变量(vdims这个维度)。

vdims = [('measles', 'Measles Incidence'), ('pertussis', 'Pertussis Incidence')]
ds = hv.Dataset(diseases, ['Year', 'State'], vdims)

这里,我们使用了可选的基于元组的语法**(name,label)**来为vdims这个维度制定了更有意思的描述,而对于kvdims,这里就是用了默认的字符。从上述可以看到,我们并没有声明如何去处理“Week”,因为我们这里只对"Year"和"State"感兴趣。

ds = ds.aggregate(function=np.mean)
ds

在这里插入图片描述
“repr”向我们显示了“Dataset”的“kdims”(在方括号中)和“vdims”(在括号中)。因为“数据集”可以容纳维度的任意组合,所以它不是立即可见的。从这四个维度到二维页面没有单一的清晰映射,因此上面显示了文本表示。
为了使这些数据可视化,我们需要提供更多的元数据,方法是选择一个大型元素库来帮助回答我们想要询问的有关数据的问题。也许这个数据集最明显的表现形式是一条“曲线”,显示了每个州每年的发病率。我们可以从原始数据集中逐个拉出各个列,但现在我们已经声明了有关维度的信息,最干净的方法是使用数据集的维度映射到元素的维度。到

layout = (ds.to(hv.Curve, 'Year', 'measles') + ds.to(hv.Curve, 'Year', 'pertussis')).cols(1)
layout.opts(
    opts.Curve(width=600, height=250, framewise=True))

在这里插入图片描述
在这里,我们指定了两个分别显示麻疹和百日咳发病率的“曲线”元素(vdims),每年(kdim),并将其放置在垂直列中。您会注意到,尽管我们只为值维度指定了短名称,但图中显示了我们在“数据集”上声明的较长名称(“麻疹发病率”、“百日咳发病率”)。
您还会注意到,我们自动收到一个下拉菜单,选择要查看的“州”。每个“曲线”都忽略了未使用的值维度,因为额外的测量不会相互影响,但HoloViews必须对每个这样的图的每个关键维度做一些事情。如果“州”(或任何其他关键维度)没有以某种方式绘制或聚合,则HoloViews必须让用户为其选择一个值,因此选择小部件。关于如何处理额外维度或只是额外数据范围的其他选项如下所示。

selecting

我们经常想做的事情就是我们只选择数据的一个子集。select方法使这个变得非常简单,可以让我们只选择一个数据,list或者tuple。这里我们使用select方法选择四个州的麻疹发病率,当应用了这个selectH后,我们用 .to方法使其使用直方图的形式展现出来,使用Year和State作为kdims,‘Measles Incidence’ 作为vdims

states = ['New York', 'New Jersey', 'California', 'Texas']
bars = ds.select(State=states, Year=(1980, 1990)).to(hv.Bars, ['Year', 'State'], 'measles').sort()
bars.opts(
    opts.Bars(width=800, height=400, tools=['hover'], xrotation=90, show_legend=False))

在这里插入图片描述
编者注:
实话实说,自己直接用Bokeh也不一定能出来这个效果,但看到目前位置,总感觉能控制的东西相对少了些,不如直接写bokeh来的踏实,但是毕竟希望能用它驯服大数据的绘图,还是先都过一遍吧

Faceting(翻译成镶嵌?)

上面我们已经看到了我们没有使用“to”方法显式分配给元素的关键维度的情况:它们被分组,弹出一组小部件,以便用户可以选择要在任何时候显示的值。然而,使用小部件并不总是查看数据的最有效方式,“数据集”允许您使用“数据集”指定其他替代方法。覆盖。网格。布局``方法。例如,我们可以使用“.grid”分别布置每个状态:

grouped = ds.select(State=states, Year=(1930, 2005)).to(hv.Curve, 'Year', 'measles')
gridspace = grouped.grid('State')
gridspace.opts(
    opts.Curve(width=200, tools=['hover'], color='indianred'))

在这里插入图片描述
除了选择数据子集,HoloViews支持的另一个常见操作是计算聚合。当我们首次加载此数据集时,我们在“周”列上进行聚合,以计算每年的平均发病率,从而显著减少了我们的数据。因此,“聚合”方法对于根据我们的数据计算统计数据非常有用。
使用我们的数据集的一个简单示例是按“年”计算麻疹发病率的平均值和标准差。我们可以简单地通过传递关键维度来表示这一点(在本例中只是“年”),以及一个函数和可选的“spreadfn”来计算我们想要的统计数据。“spreadfn”将把函数名附加到维度名之后,这样我们可以单独引用计算值。计算完聚合后,我们可以简单地将其转换为“曲线”和“误差条”:

agg = ds.aggregate('Year', function=np.mean, spreadfn=np.std)
errorbars = hv.ErrorBars(agg,vdims=['measles', 'measles_std']).iloc[::2]
overlay =  (hv.Curve(agg) * errorbars).redim.range(measles=(0, None))

overlay.opts(width=600)

在这里插入图片描述
通过这种方式,我们可以将多维数据集概括为可以直接可视化的数据集,同时允许我们沿维度计算任意统计信息。

最后

欢迎各种牛一起加入学习探讨,关于python可视化的交流,刚新建的群,主要专注于bokeh与Holoview

可在QQ搜索群 python bokeh, 群号859297380,随时交流,互通有无

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值