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

    文章

    4795

    浏览量

    84657
  • 数据集
    +关注

    关注

    4

    文章

    1208

    浏览量

    24694
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    交互式低延迟音频解码器

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

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

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

    华纳云:java web和java有什么区别java web和java有什么区别

    的平台,Java可以用于开发桌面应用程序、移动应用程序、企业级应用程序等。 – Java Web是Java语言在Web开发领域的应用,它使用
    的头像 发表于 07-16 13:35 798次阅读
    华纳云:java <b class='flag-5'>web</b>和java有什么区别java <b class='flag-5'>web</b>和java有什么区别

    深耕交互式人工智能领域,声通科技为用户提供更加智能的解决方案

    在数字化浪潮席卷全球的今天,人工智能已成为推动社会进步的重要力量。作为中国交互式人工智能(CoAI)领域的开拓者与领军者,上海声通信息科技股份有限公司(以下简称“声通科技”)凭借其创新
    的头像 发表于 05-16 09:42 352次阅读

    使用Redis和Spring Ai构建rag应用程序

    随着AI技术的不断进步,开发者面临着如何有效利用现有工具和技术来加速开发过程的挑战。Redis与SpringAI的结合为Java开发者提供了一个强大的平台,以便快速构建并部署响应AI应用。探索这一
    的头像 发表于 04-29 08:04 1033次阅读
    使用Redis和Spring Ai<b class='flag-5'>构建</b>rag<b class='flag-5'>应用程序</b>

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

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

    市场前景向好,交互式人工智能提供商声通科技迎广阔发展空间

    根据艾瑞咨询报告,2022年中国企业级交互式人工智能解决方案的市场渗透率仅为10.4%,美国市场渗透率为16.7%。目前中国企业级交互式人工智能解决方案的市场渗透率仍有巨大提升空间,预计2027年
    的头像 发表于 04-11 14:12 340次阅读

    声通科技全栈交互式人工智能,助力企业智能化升级

    的研发实力和创新能力,为企业级用户打造了一套交互式人工智能解决方案,帮助企业实现智能化升级,提升运营效率。 据声通科技IPO招股书显示,公司深耕企业级交互式解决方案近二十年,构建了集融合融信、人工智能以及产品引
    的头像 发表于 03-20 09:56 353次阅读

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

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

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

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

    如何构建linux开发环境和编译软件工程、应用程序

    前文介绍了如何使用官方提供的镜像文件启动开发,本文将说明如何构建linux开发环境和编译软件工程、应用程序
    的头像 发表于 01-03 12:31 2045次阅读
    如何<b class='flag-5'>构建</b>linux开发环境和编译软件工程、<b class='flag-5'>应用程序</b>