0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Python构建基于web应用程序的交互式仪表板

星星科技指导员 来源:NVIDIA 作者:Ajay Thorve 2022-04-21 14:54 次阅读

使用 Plotly 的 Dash 、 RAPIDS 和 Data shader ,用户可以构建 viz 仪表板,既可以呈现 3 亿多行的数据集,又可以保持高度的交互性,而无需预先计算聚合

使用 RAPIDS cuDF 和 Plotly Dash 在 GPU 上进行实时交互式可视化分析

Dash 是来自 Plotly 的一个开源框架,用于使用 Python 构建基于 web 应用程序的交互式仪表板。此外,开放源码软件( OSS )库的 RAPIDS 套件提供了完全在 GPU 上执行端到端数据科学和分析管道的自由。将这两个项目结合起来,即使在单个 GPU 上,也可以实现对数千兆字节数据集的实时、交互式可视化分析。

此人口普查可视化使用 dashapi 生成图表及其回调函数。相反, RAPIDS cuDF 被用来加速这些回调,以实现实时聚合和查询操作。

使用 2010 年人口普查数据的修改版本,结合 2006-2010 年美国社区调查数据(获得了 fantastic IPUMS.org 的许可),我们将 美国的每一个人 映射到位于相当于一个城市街区的单个点(随机)。因此,每个人都有与之相关联的独特的人口统计属性,这些属性支持以前不可能的细粒度过滤和数据发现。我们的 GitHub 上公开了代码、安装细节和数据警告。

第 1 部分:可视化的数据准备

虽然不是最新的数据集,但我们选择使用 2010 年人口普查,因为它具有高地理空间分辨率、大尺寸和可用性。经过一些修改, 3.08 亿行× 7 列( int8 型) 的最终数据集足够大,足以说明 GPU 加速的好处。

Census 2010 SF1 +形状文件数据

我们决定把重点放在人口普查数据集上;最明显的选择是搜索 census.gov 网站,其中包括许多表格文件供下载。最适用的概要文件 1 有一个人口计数部分,其属性包括性别、年龄、种族等。但是,该数据集是按 普查区水平 列表的,而不是按单个级别(出于各种隐私原因)。结果是 只有 211267 排, 每个街区一个,包括性别、年龄、种族。

我们选择使用人口普查块边界形状文件来扩展行计数,以使所有块的人口计数相等。然后,在边界内随机分配一个 lat long ,并为每个人创建一个唯一的行。为每个状态执行此操作的脚本可以在 Plotly-dash-rapids-census-demo 中找到。切换到由 IPUMS NHGIS 站点上的 数据查找工具 提供的更为用户友好的数据集文件( SF1 和 tiger 边界文件)可以加快这个过程。

在整个数据挖掘过程中,除了重复检查每个匹配块的聚合外,我们还使用我们自己的 cuxfilter 进行快速原型制作和视觉精度检查。在本例中,为 3.08 亿行创建一个交互式地理散点图非常简单:

import cuxfilter

import cudf

df = cudf.read_parquet(‘。/data/census_data.parquet/*’)

#create cuxfilter dataframe

cux_df = cuxfilter.DataFrame.from_dataframe(df)

chart0 = cuxfilter.charts.scatter_geo(x=‘x’, y=‘y’)

chart1 = cuxfilter.charts.bar(‘age’)

chart2 = cuxfilter.charts.bar(‘sex’)

d = cux_df.dashboard([chart0, chart1, chart2], layout=cuxfilter.layouts.feature_and_double_base

d.show()

图 1 : Cuxfilter census dashboard ver 。 1

ACS 2006 – 2010 数据

出于好奇,我们是否可以结合其他有趣的属性进行交叉筛选,例如收入、教育程度和工人阶级,我们添加了 5 年的 2006-2010 年美国社区调查( ACS )数据集。该数据集在普查区块组上聚合(比普查区块大一级)。因此,我们决定在块组上进行聚合,并将其任意分布到每个个体上,同时仍保持块组级别的聚合值。修改后的数据集包括:

按年龄划分的性别。

按教育程度分列的 25 岁及以上人口的性别。

16 岁及以上人口过去 12 个月收入(按 2010 年通货膨胀调整后的美元计算)的性别。

按工人阶级分列的 16 岁及以上平民就业人口的性别。

公共列是 Sex ,用于合并所有数据集。然而,虽然这种方法提供了其他有趣的属性来进行过滤,但结果有几个注意事项:

在地理位置或单个列上进行交叉过滤将为所有其他列生成准确的计数。

同时交叉过滤多个非地理列不一定会产生真实的计数。

与个人相关的属性只是统计性的,不能反映真实的人。但是,当汇总到人口普查区块组级别或更高级别时,它们是准确的。

执行该过程的笔记本可以在 plotly-dash-rapids-census-demo 上找到。最终的数据集如下所示:

图 2 :最终普查数据集的 Dataframe 视图。

下面是一个用于验证数据集值的快速 cuxfilter 仪表板:

import cuxfilter

import cudf

df = cudf.read_parquet(‘。/data/census_data.parquet/*’)

#create cuxfilter dataframe

cux_df = cuxfilter.DataFrame.from_dataframe(df)

#declare charts

chart0 = cuxfilter.charts.scatter_geo(x=‘x’, y=‘y’)

chart1 = cuxfilter.charts.bar(‘age’)

chart2 = cuxfilter.charts.bar(‘sex’)

chart3 = cuxfilter.charts.bar(‘cow’)

chart4 = cuxfilter.charts.bar(‘income’)

chart5 = cuxfilter.charts.bar(‘education’)

d = cux_df.dashboard(

[chart0, chart1, chart2, chart3, chart4, chart5],

layout=cuxfilter.layouts.feature_and_five_edge,

d.show()

图 3 : Cuxfilter census dashboard ver 。 2 。

资源链接:

最终修改数据集 (~ 2 。 9 GB 焦油拼花文件)

所有数据准备代码 ( GitHub )

第 2 部分:使用 Plotly Dash 构建交互式仪表板

Dash 支持在仪表板中添加单独的 Plotly chart 对象,以及使用 Python 为每个对象图形、选择和布局单独回调。例如,仪表板中基于上述数据集的图表如下:

Scattermapbox :个体的种群分布

此图表由两层组成:

Scattermapbox 层。

Datashader 在上面生成了一个输出图像。

‘data’: [{

‘type’: ‘scattermapbox’,

‘lat’: lat, ‘lon’: lon,

}],

‘layout’: {

‘mapbox’: {

‘layers‘: [{

“sourcetype”: “image”,

“source”: datashader_output_img,

}],

}

图 4 :美国人口的破折号数据阴影+地图框聚集人口过剩计数。

图表更新回调在以下位置触发:

“重新布局数据”(向内滚动、向外滚动、鼠标平移)根据缩放级别重新渲染数据阴影图像,以便分辨率保持不变。

下拉选择“颜色依据”。

教育、收入、工人阶级和年龄图表的方框选择。

地图上的方框选择。

条形图:教育程度、收入、工人阶级、年龄

‘data’: [

{‘type’: bar, ‘x’: Education, ‘y’: Count},

{‘type’: bar, ‘x’: Education, ‘y’: Count},

{‘type’: bar, ‘x’: Education, ‘y’: Count},

{‘type’: bar, ‘x’: Education, ‘y’: Count}

图 5 :教育、收入、工人阶级和年龄直方图。

图表更新回调在以下位置触发:

教育、收入、工人阶级和年龄图表的方框选择。

地图上的方框选择。

下拉选择“颜色依据”。

GPU 的适用范围和帮助方式:

此仪表板中的每个图表都从 GPU 加速到 cuDF :使用 GPU – 加速模式,在 24GB NVIDIA Titan NVIDIA RTX 上进行过滤或缩放交互通常需要 0.2 – 2 秒。在高端 CPU 和 64GB 系统内存上运行,相同的交互通常需要 10-80 秒。通常, cuDF GPU 模式比 pandas CPU 模式快 20 倍以上 根据图表。 20 倍的不同之处在于将报表仪表板转换为交互式可视分析应用程序。

数据可视化是一个迭代设计过程

尽管像人口普查中这样一个记录良好且可用的数据集,但了解这些数据并制定一个 viz 来有效地与之交互似乎总是比对数据集 MIG 的任何初步研究都要花费更长的时间。

与所有数据可视化一样,最终结果通常取决于在可用的数据和图表、您试图传达的故事以及您正在通过的媒介(和硬件)之间找到适当的平衡。例如,我们对列格式进行了多次迭代,以确保 GPU 的使用可靠地保持在 24GB 单个 GPU 限制之下,同时仍然允许多个图表之间的平滑交互。

处理数据是复杂的,而处理大型数据集则更为复杂,但通过将 Plotly Dash 与 RAPIDS 相结合,我们可以提高分析师和数据科学家的能力。这些库允许用户在熟悉的环境中工作,并生成更大、更快、更具交互性的可视化应用程序,为开箱即用的生产做好准备—将传统可视化分析的边界推向高性能计算领域。

关于作者

Ajay Thorve 是 NVIDIA 的软件工程师, RAPIDS 组织的可视化团队的一部分。 Ajay 的背景是全栈开发和数据科学,主要兴趣包括 JavaScript / TypeScript 和 Python 。目前, Ajay 在 RAPIDS viz 团队的工作主要集中在为 cuXfilter 和 node- RAPIDS 项目做出贡献。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83476
  • 数据集
    +关注

    关注

    4

    文章

    1179

    浏览量

    24356
收藏 人收藏

    评论

    相关推荐

    使用Docker部署Go Web应用程序步骤

    大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版和配置文件。而当一个项目中有很多文件的时候,由于很多文件没有同步就会导致错误的发生并且产生很多的问题。
    发表于 04-20 09:33 233次阅读
    使用Docker部署Go <b class='flag-5'>Web</b><b class='flag-5'>应用程序</b>步骤

    鉴源实验室 | Web应用程序常见漏洞浅析

    在如今的数字化时代,Web应用程序已经渗透到我们生活的每个角落。从购物平台、社交媒体到企业级系统,无论是用户还是组织,都依赖于这些应用程序来满足各自的业务需求。
    的头像 发表于 01-26 11:33 574次阅读
    鉴源实验室 | <b class='flag-5'>Web</b><b class='flag-5'>应用程序</b>常见漏洞浅析

    web前端开发和前端开发的区别

    、CSS和JavaScript等技术来构建用户界面,实现用户与应用程序交互Web前端开发包括网页设计、网页编码、前端框架使用以及优化页面性能等任务。 前端开发是一个更广泛的概念,它
    的头像 发表于 01-18 09:54 967次阅读

    Python自带的命令窗口

    Python自带的命令窗口,也称为Python交互式解释器,是Python编程语言的一个重要工具,它允许用户在命令行界面中输入和执行Python
    的头像 发表于 11-22 14:02 432次阅读

    python怎样运行代码

    Python是一种广泛使用的编程语言,用于开发各种类型的应用程序。它具有简单易学的语法和强大的功能,可以用于编写简单的脚本、开发桌面应用、构建Web应用、进行科学计算等多种用途。在本文
    的头像 发表于 11-22 10:31 644次阅读

    如何实现Pandas的DataFrame转换交互式表格

    Pivottablejs是一个通过IPython widgets集成到Python中的JavaScript库,允许用户直接从DataFrame数据创建交互式和灵活的汇总报表。可以进行高效、清晰的数据分析和表示,帮助将数据从Pandas DataFrame转换为易于观察的
    的头像 发表于 11-21 16:15 381次阅读
    如何实现Pandas的DataFrame转换<b class='flag-5'>交互式</b>表格

    一行代码将Python程序转换为GUI应用程序

    Gooey项目支持用一行代码将(几乎)任何Python 2或3控制台程序转换为GUI应用程序。 1.快速开始 开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以
    的头像 发表于 10-17 11:41 428次阅读
    一行代码将<b class='flag-5'>Python</b><b class='flag-5'>程序</b>转换为GUI<b class='flag-5'>应用程序</b>

    如何在交互式人脸检测演示中将Web浏览器流用作目标输入?

    无法将 Web 浏览器流用作交互式人脸检测演示的目标输入。
    发表于 08-15 06:02

    Web 应用程序防火墙 (WAF) 相关知识介绍

    Web应用程序防火墙(WAF)如何工作?Web应用防护系统(也称为:网站应用级入侵防御系统。英文:WebApplicationFirewall,简称:WAF)。利用国际上公认的一种说法:Web
    的头像 发表于 07-31 17:37 863次阅读
    <b class='flag-5'>Web</b> <b class='flag-5'>应用程序</b>防火墙 (WAF) 相关知识介绍

    Arduino BME280气象站仪表板

    电子发烧友网站提供《Arduino BME280气象站仪表板.zip》资料免费下载
    发表于 07-12 09:37 0次下载
    Arduino BME280气象站<b class='flag-5'>仪表板</b>

    构建一个移动应用程序

    电子发烧友网站提供《构建一个移动应用程序.zip》资料免费下载
    发表于 07-04 14:33 0次下载
    <b class='flag-5'>构建</b>一个移动<b class='flag-5'>应用程序</b>

    基于OBD2的仪表板

    电子发烧友网站提供《基于OBD2的仪表板.zip》资料免费下载
    发表于 06-16 14:51 1次下载
    基于OBD2的<b class='flag-5'>仪表板</b>

    离线仪表板开源分享

    电子发烧友网站提供《离线仪表板开源分享.zip》资料免费下载
    发表于 06-16 09:57 0次下载
    离线<b class='flag-5'>仪表板</b>开源分享

    大学教师仪表板开源分享

    电子发烧友网站提供《大学教师仪表板开源分享.zip》资料免费下载
    发表于 06-12 09:58 0次下载
    大学教师<b class='flag-5'>仪表板</b>开源分享

    简述后端应用程序的工作原理

    一个Java后端应用程序要想运行起来需要两步,第一步是搭建Web应用服务器,为后端应用程序提供运行环境,第二步是把后端应用程序放到Web应用
    的头像 发表于 05-05 16:45 1305次阅读
    简述后端<b class='flag-5'>应用程序</b>的工作原理