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

    关注

    56

    文章

    4831

    浏览量

    87658
  • 数据集
    +关注

    关注

    4

    文章

    1225

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    python入门圣经-高清电子书(建议下载)

    生成交互式的信息图,以及创建和定制简单的Web 应用,并帮读者解决常见编程问题和困惑。 纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
    发表于 04-10 16:53

    树莓派新玩法:基于WiFi的CPU温度与内存使用Web-GUI监控系统

    WiFi网络远程监控RaspberryPi的CPU温度。该GUI可通过浏览器直接访问,操作便捷且用户友好。NiceGUI是一个优秀的Python库,能大幅简化交互式现代
    的头像 发表于 03-25 16:39 ?457次阅读
    树莓派新玩法:基于WiFi的CPU温度与内存使用<b class='flag-5'>Web</b>-GUI监控系统

    中国移动携手华为打造全国首个5G新通话交互式客服

    近日,中国移动在线服务公司与华为深度合作,基于中国移动10086热线,打造了全国首个5G新通话交互式客服。中国移动10086热线是全球最大的单体呼叫中心系统,5G新通话交互式客服的全新10086将有望服务超过10亿个人用户和3亿家庭用户。
    的头像 发表于 03-07 15:41 ?785次阅读

    是否可以使用OpenVINO?部署管理器在部署机器上运行Python应用程序

    使用 OpenVINO?部署管理器创建运行时软件包。 将运行时包转移到部署机器中。 无法确定是否可以在部署机器上运行 Python 应用程序,而无需安装OpenVINO? Toolkit 和 Python
    发表于 03-05 08:16

    AWTK-WEB 快速入门(6) - JS WebSocket 应用程序

    WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用Javacript语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。用AWTKDesigner新建一个应用程
    的头像 发表于 02-26 11:42 ?391次阅读
    AWTK-<b class='flag-5'>WEB</b> 快速入门(6) - JS WebSocket <b class='flag-5'>应用程序</b>

    AWTK-WEB 快速入门(5) - C 语言 WebSocket 应用程序

    导读WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用C语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。用AWTKDesigner新建一个应用程序先安装
    的头像 发表于 02-19 11:49 ?498次阅读
    AWTK-<b class='flag-5'>WEB</b> 快速入门(5) - C 语言 WebSocket <b class='flag-5'>应用程序</b>

    通过STM32CubeMonitor,实现对MCU数据监控

    的 STM32CubeMonitor 还提供基于流程的图形编辑器,可以轻松构建自定义仪表板,并快速添加仪表、条形图和绘图等小部件。通过非侵入监控,STM32CubeMonitor 保
    的头像 发表于 01-27 08:00 ?851次阅读
    通过STM32CubeMonitor,实现对MCU数据监控

    AWTK-WEB 快速入门(4) - JS Http 应用程序

    导读XMLHttpRequest改变了Web应用程序与服务器交换数据的方式,fetch是其继任者。本文介绍一下如何使用JS语言开发AWTK-WEB应用程序,并用fetch访问远程数据。
    的头像 发表于 01-22 11:31 ?492次阅读
    AWTK-<b class='flag-5'>WEB</b> 快速入门(4) - JS Http <b class='flag-5'>应用程序</b>

    AWTK-WEB 快速入门(2) - JS 应用程序

    导读AWTK可以使用相同的技术栈开发各种平台的应用程序。有时我们需要使用Web界面与设备进行交互,本文介绍一下如何使用JS语言开发AWTK-WEB
    的头像 发表于 12-05 01:04 ?539次阅读
    AWTK-<b class='flag-5'>WEB</b> 快速入门(2) - JS <b class='flag-5'>应用程序</b>

    AWTK-WEB 快速入门(1) - C 语言应用程序

    导读AWTK可以使用相同的技术栈开发各种平台的应用程序。有时我们需要使用Web界面与设备进行交互,本文介绍一下如何使用C语言开发AWTK-WEB应用
    的头像 发表于 11-27 11:46 ?787次阅读
    AWTK-<b class='flag-5'>WEB</b> 快速入门(1) - C 语言<b class='flag-5'>应用程序</b>

    使用OpenVINO? ElectronJS中创建桌面应用程序

    ? 最近,我完成了一个 demo 演示,展示了 OpenVINO 在 Node.js 框架中的强大功能。得益于与 Electron.js 的集成,该演示不仅能够高效地执行神经网络推理,还提供了交互式
    的头像 发表于 11-25 11:35 ?636次阅读
    使用OpenVINO? ElectronJS中创建桌面<b class='flag-5'>应用程序</b>

    交互式ups和在线UPS不同点,超过限值

    不间断电源UPS是指在输入电源或主电源发生故障时为负载提供应急电源的电源系统,被视为对输入电源中断的近乎瞬时保护。现代UPS系统的三个一般类别是在线UPS,线路交互式UPS和离线UPS。交互式ups
    的头像 发表于 11-22 10:13 ?774次阅读
    <b class='flag-5'>交互式</b>ups和在线UPS不同点,超过限值

    使用OpenVINO GenAI API在C++中构建AI应用程序

    许多桌面应用程序是使用 C++ 开发的,而将生成AI(GenAI)功能集成到这些应用程序中可能会很具有挑战性,尤其是因为使用像 Hugging Face 这样的 Python 库的复
    的头像 发表于 10-12 09:36 ?1200次阅读
    使用OpenVINO GenAI API在C++中<b class='flag-5'>构建</b>AI<b class='flag-5'>应用程序</b>

    交互式低延迟音频解码器

    普通音频解码器在处理音频时可能会引入较高的延迟,通常适合于音乐播放或录音等场景。而交互式低延迟音频解码器则专为实时应用设计,延迟通常在10毫秒以内。这种快速响应对于游戏、在线会议和直播等场景至关重要,能够确保参与者几乎没有时间差。
    的头像 发表于 09-28 11:15 ?611次阅读
    <b class='flag-5'>交互式</b>低延迟音频解码器

    使用 TPS1HC100-Q1 高效驱动汽车仪表板负载应用说明

    电子发烧友网站提供《使用 TPS1HC100-Q1 高效驱动汽车仪表板负载应用说明.pdf》资料免费下载
    发表于 09-12 10:41 ?0次下载
    使用 TPS1HC100-Q1 高效驱动汽车<b class='flag-5'>仪表板</b>负载应用说明