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
    +关注

    关注

    59

    文章

    4892

    浏览量

    90422
  • 数据集
    +关注

    关注

    4

    文章

    1242

    浏览量

    26298
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    S32K系列引导加载程序应用程序跨不同定制电路设计的跳转问题求解

    应用程序和固件升级 - 2:相同的引导加载程序项目失败 - 无法跳转到用户应用程序 **董事会之间的主要区别:** - UART 通信引脚分配 - I2C 通信引脚分配 - 其他
    发表于 04-22 07:02

    构建示例应用程序MCSPTR2AK396的问题求解

    显示任何消息。 此外,如果我选择“更新代码”,则所有驱动程序都将从项目中删除。 关于我遗漏了什么有什么提示吗? 安装的软件堆栈与示例应用程序的发行说明中测试的软件堆栈几乎相同 Design
    发表于 04-20 13:11

    如何构建蓝牙应用程序

    应用程序使用蓝牙(blueZ)。 我已经安装了 gcc-riscv64-linux-gnu。 但是,没有安装 blueZ 标头和库。 如何构建我的蓝牙应用程序
    发表于 04-01 07:31

    请问如何构建和运行视频编解码器示例应用程序

    如何构建和运行视频编解码器示例应用程序
    发表于 03-10 06:27

    Python运行本地Web服务并实现远程访问

    本文介绍使用Python搭建本地Web服务并结合 ZeroNews 实现公网访问。
    的头像 发表于 02-06 11:39 446次阅读
    <b class='flag-5'>Python</b>运行本地<b class='flag-5'>Web</b>服务并实现远程访问

    思必驰助力智元精灵G2重新定义工业级交互式具身作业机器人

    2025年全运会期间,智元机器人推出的工业级交互式具身作业机器人一智元精灵G2,在广州的交通枢纽承担乘客引导、问题解答及安全巡查等核心任务,此外还支持全场景全向避障与高精度力控作业,应用于汽车零部件
    的头像 发表于 12-19 11:23 762次阅读

    AMD Alveo MA35D加速器:开启大规模交互式流媒体新时代

    AMD Alveo MA35D加速器:开启大规模交互式流媒体新时代 在当今全球视频市场被直播主导的背景下,低延迟应用不断涌现,对基础设施和视频处理技术的成本结构及部署策略产生了深远影响。AMD推出
    的头像 发表于 12-15 14:35 644次阅读

    【EASY EAI Nano-TB(RV1126B)开发试用】命令行功能测试-红绿灯按钮项目-Python实现简单的Web服务器

    Nano-TB(RV1126B)****开发‌,构建一个能够通过Web服务读取物理按键三色LED灯状态的设备监控系统,打造符合简单状态显示需求的服务器。 硬件 EASY EAI Nano-TB
    发表于 11-16 16:35

    河南移动携手华为完成交互式UE Logo全球首呼

    河南移动携手华为成功打通全球首个交互式UE Logo First Call,正式开启5G-A“体验经营2.0”新时代,在网络能力产品化与用户体验升级领域树立先锋里程碑。
    的头像 发表于 10-21 09:55 1146次阅读

    Nuvoton ChipCorder在汽车仪表板中的应用

    的调查结果强调了对汽车音频的需求不断增长,特别是在标准仪表板配置中。这需要能够快速传递各种紧急警报并提供直接、快速的语音提示的直观功能,确保及时向驾驶员传递信息。 预编程播放录制的音频文件 各种车辆信息
    发表于 09-05 06:07

    如何使用 CyCloneTCP 和 FreeRTOS 在 NuMaker IoT 构建 Web 服务器?

    使用 CyCloneTCP 和 FreeRTOS 在 NuMaker IoT 构建 Web 服务器
    发表于 09-04 08:10

    如何使用 Mbed OS 在 NuMaker IoT 构建 Web 服务器?

    使用 Mbed OS 在 NuMaker IoT 构建 Web 服务器
    发表于 09-04 06:33

    如何使用 SEGGER emWin AppWizard 工具为仪表板界面设计图形用户界面?

    如何使用 SEGGER emWin AppWizard 工具为仪表板界面设计图形用户界面 (GUI)。它集成了控制 MA35H0 系列评估上的 LED 和按钮的功能。
    发表于 08-19 07:23

    OBOO鸥柏丨AI室外触摸屏查询一体机户外交互式触控终端信息发布大屏招投标标底参数要求

    整机参数要求:21.5寸/23.8寸/32英寸/43寸/49寸/55寸/65寸/75寸/85-86寸/98寸/100寸/110寸/115寸室外触控一体机户外交互式查询触摸一体机高清信息发布宣传大屏
    的头像 发表于 08-12 10:42 1674次阅读
    OBOO鸥柏丨AI室外触摸屏查询一体机户外<b class='flag-5'>交互式</b>触控终端信息发布大屏招投标标底参数要求

    请问是否可以在通用Windows平台中构建OpenVINO™ GenAI C++ 应用程序

    无法在通用 Windows 平台中构建OpenVINO™ GenAI C++ 应用程序
    发表于 06-24 07:35