【Gradio】从 BigQuery 数据创建实时仪表板

news2025/2/8 20:59:35

Google BigQuery 是一个基于云的服务,用于处理非常大的数据集。它是一个无服务器且高度可扩展的数据仓库解决方案,使用户能够使用类 SQL 查询分析数据。

在本教程中,我们将向您展示如何在 Python 中查询 BigQuery 数据集,并使用 gradio 实时更新的仪表板显示数据。仪表板将如下所示:

b1318773215632d1eecf923dc689c4b3.gif

我们将在本指南中介绍以下步骤:

  1. 设置您的 BigQuery 凭据

  2. 使用 BigQuery 客户端

  3. 仅用 7 行 Python 代码构建实时仪表板

我们将使用纽约时报的 COVID 数据集,该数据集作为公共数据集在 BigQuery 上可用。该数据集名为 covid19_nyt.us_counties ,包含了美国各县市最新的 COVID 确诊病例和死亡人数的信息。

先决条件:本指南使用 Gradio Blocks,因此请确保您熟悉 Blocks 类。

设置您的 BigQuery 凭证 

要将 Gradio 与 BigQuery 一起使用,您需要获取您的 BigQuery 凭证,并将其与 BigQuery Python 客户端一起使用。如果您已经有了 BigQuery 凭证(作为 .json 文件),您可以跳过这一部分。如果没有,您可以在短短几分钟内免费完成此操作。

  1. 首先,登录您的谷歌云账户,然后前往谷歌云控制台 ( https://console.cloud.google.com/)

  2. 在云控制台中,点击左上角的汉堡菜单,然后从菜单中选择“API 与服务”。如果您还没有现有的项目,您将需要创建一个。

  3. 然后,点击“+ 启用 API 与服务”按钮,这将允许您为您的项目启用特定服务。搜索“BigQuery API”,点击它,然后点击“启用”按钮。如果您看到“管理”按钮,那么 BigQuery 已经启用,一切就绪。

  4. 在 API 与服务菜单中,点击“凭证”标签,然后点击“创建凭证”按钮。

  5. 在“创建凭证”对话框中,选择“服务账户密钥”作为要创建的凭证类型,并给它命名。同时通过赋予它如“BigQuery 用户”这样的角色来授予服务账户权限,这将允许您运行查询。

  6. 在选择服务账户后,选择“JSON”密钥类型,然后点击“创建”按钮。这将下载包含您凭证的 JSON 密钥文件到您的电脑。它看起来会是这样的:

{
  "type": "service_account",
  "project_id": "your project",
  "private_key_id": "your private key id",
  "private_key": "private key",
  "client_email": "email",
  "client_id": "client id",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/email_id"
}

使用 BigQuery 客户端 

一旦你拥有了凭证,你将需要使用 BigQuery Python 客户端来使用你的凭证进行认证。为此,你需要通过在终端运行以下命令来安装 BigQuery Python 客户端:

pip install google-cloud-bigquery[pandas]

你会注意到我们已经安装了 pandas 附加组件,这将有助于将 BigQuery 数据集作为 pandas 数据框进行处理。客户端安装后,您可以通过运行以下代码使用您的凭证进行认证:

from google.cloud import bigquery


client = bigquery.Client.from_service_account_json("path/to/key.json")

凭借您的凭证经过认证后,您现在可以使用 BigQuery Python 客户端与您的 BigQuery 数据集进行交互。

这是一个函数的例子,它查询 BigQuery 中的 covid19_nyt.us_counties 数据集,以显示截至当天确诊病例最多的前 20 个县:

import numpy as np


# 定义查询语句,用于从 bigquery-public-data.covid19_nyt.us_counties 这个数据集中选取所有列的数据,
# 并按日期和确诊病例数降序排序,只取前20条记录
QUERY = (
    'SELECT * FROM `bigquery-public-data.covid19_nyt.us_counties` '
    'ORDER BY date DESC,confirmed_cases DESC '
    'LIMIT 20')


# 定义查询函数
def run_query():
    # 使用BigQuery客户端执行查询任务
    query_job = client.query(QUERY)
    # 获取查询结果
    query_result = query_job.result()
    # 将查询结果转换成DataFrame
    df = query_result.to_dataframe()
    # 选择一部分列,只包含"confirmed_cases","deaths","county","state_name"的数据
    df = df[["confirmed_cases", "deaths", "county", "state_name"]]
    # 将"deaths","confirmed_cases"两列数据类型转换为numpy的int64类型
    df = df.astype({"deaths": np.int64, "confirmed_cases": np.int64})
    # 返回处理后的DataFrame
    return df

这段代码查询了最近的20条疫情数据,并且选择了确诊病例数、死亡人数、县名和州名这四列数据,以便进行进一步的分析和处理。重点在于后续如何利用这个数据帧进行有所发现或解析出有用的信息。

建设实时仪表板 

一旦你有了一个查询数据的函数,你就可以使用 Gradio 库中的 gr.DataFrame 组件以表格格式显示结果。这是检查数据并确保已正确查询的一种有用方法。

这里是一个如何使用 gr.DataFrame 组件来显示结果的例子。通过将 run_query 函数传递给 gr.DataFrame ,我们指示 Gradio 在页面加载时立即运行该函数并显示结果。此外,您还需要传入关键字 every ,以告诉仪表板每小时刷新一次(60*60 秒)。

# 导入gradio库
import gradio as gr


# 利用gradio的Blocks类创建交互界面
with gr.Blocks() as demo:
    # 在交互界面上创建一个数据框组件,每60分钟运行一次run_query函数并显示函数返回的数据
    gr.DataFrame(run_query, every=60*60)


# 使用队列方式运行demo
demo.queue().launch(

‍这段代码在Gradio UI上创建了一个表格,该表格每小时更新一次,显示了由run_query函数返回的最新数据。这种方式可以在数据发生变化时,提供一个可视化的、实时更新的界面,让用户能够持续跟踪数据的变化。

也许您想在我们的仪表板中添加一个可视化。您可以使用 gr.ScatterPlot() 组件将数据以散点图的形式进行可视化。这使您能够看到数据集中不同变量(如病例数和病例死亡数)之间的关系,这对于探索数据和获得洞察力非常有用。同样,我们可以通过传入 every 参数来实时完成这一操作。

这里有一个完整的例子,展示了如何使用 gr.ScatterPlot 来进行可视化,除了用 gr.DataFrame 显示数据

# 导入gradio库
import gradio as gr


# 利用gradio的Blocks类创建交互界面
with gr.Blocks() as demo:
    # 在交互界面上添加Markdown组件,显示标题"Covid Dashboard (Updated Hourly)"
    gr.Markdown("# 💉 Covid Dashboard (Updated Hourly)")
    # 添加一个行组件,可以在这个行上添加其他的组件
    with gr.Row():
        # 在行组件上添加一个数据框组件,每60分钟运行一次run_query函数并显示函数返回的数据
        gr.DataFrame(run_query, every=60*60)
        # 在行组件上添加一个散点图组件,横坐标为"confirmed_cases",纵坐标为"deaths",提示信息为对应的"county",每60分钟运行一次run_query函数并生成散点图
        gr.ScatterPlot(run_query, every=60*60, x="confirmed_cases",
                        y="deaths", tooltip="county", width=500, height=500)


# 使用队列方式运行demo
demo.queue().launch()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1850647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读】-- 评估叠加时间序列和时间事件序列可视化中的对齐方法

中文标题 摘要1 引言2 相关工作2.1 时间事件序列可视化2.2 理解时间事件序列的任务 3个假设4 对比评价4.1 刺激和任务4.2 程序4.3 参与者4.4 测量与分析 5 结果与讨论5.1 前兆和后果事件5.2 中间事件 6 反思和设计意义7 结论致谢参考文献 期刊: IEEE VIS (发表日期:…

2024年【T电梯修理】免费试题及T电梯修理考试总结

题库来源:安全生产模拟考试一点通公众号小程序 T电梯修理免费试题参考答案及T电梯修理考试试题解析是安全生产模拟考试一点通题库老师及T电梯修理操作证已考过的学员汇总,相对有效帮助T电梯修理考试总结学员顺利通过考试。 1、【多选题】TSGT7005-2012《…

企业该如何防查盗版?如何防软件后台泄密数据?

随着信息化的发展,企业日常办公越来越依赖互联网。终端以及普通PC终端在访问互联网过程中,会遇到各种各样不容忽视的风险,例如员工主动故意的数据泄漏,后台应用程序偷偷向外部发信息,木马间谍软件的外联,以…

Android图片圆角转换 RoundedImageView开源项目 小记(1)

android:background“#7f000000” android:paddingLeft“8dp” android:paddingRight“8dp” android:textAppearance“?android:attr/textAppearanceMediumInverse” /> <TextView android:id“id/textView1” android:layout_width“wrap_content” android:la…

c++ 内存分析模型、引用

一、内存模型分区 内存四区的意义&#xff1a; 不同区域存放的数据&#xff0c;赋予不同的生命周期&#xff0c;给我们更大的灵活编程 &#xff08;一&#xff09;程序运行前 在程序编译后&#xff0c;生成了exe可执行程序&#xff0c;未执行程序前分为两个区域 代码区&…

Linux常用命令(14)—查看文件内容(有相关截图)

写在前面&#xff1a; 最近在学习Linux命令&#xff0c;记录一下学习Linux常用命令的过程&#xff0c;方便以后复习。仅供参考&#xff0c;若有不当的地方&#xff0c;恳请指正。如果对你有帮助&#xff0c;欢迎点赞&#xff0c;关注&#xff0c;收藏&#xff0c;评论&#xf…

基于Java技术的摄影跟拍预定管理系统

你好&#xff0c;我是热衷于计算机科学与技术研究的码农小野。如果你对摄影跟拍预定管理系统感兴趣或有相关开发需求&#xff0c;欢迎私信交流。 开发语言 Java 数据库 MySQL 技术 B/S模式&#xff0c;SpringBoot 工具 Eclipse&#xff0c;Navicat&#xff0c;Tomcat …

Nuxt3 [Vue warn]: Hydration node mismatch:【解决方案】

[Vue warn]: Hydration node mismatch: 水合节点不匹配 Server rendered element contains more child nodes than client vdom. 服务器呈现的元素包含的子节点多于客户端vdom。 这个问题解决起来也很好解决&#xff0c;看这个问题是怎么出来的&#xff0c;看代码&#xff1a;…

Unity 天空盒制作使用教程

文章目录 1.概念2.制作天空盒3.使用天空盒3.1 为场景添加3.2 为相机添加 1.概念 天空盒是包裹整个场景的环境效果。 2.制作天空盒 1、创建材质球。 2、设置材质球Shader为SkyBox/6 Sided&#xff0c;将六张贴图放到对应位置。 3.使用天空盒 3.1 为场景添加 方法一、直接…

Vue3 - 在项目中使用vue-i18n不生效的问题

检查和配置 Vue I18n 确保你已经正确安装了Vue I18n并且配置了组合API模式。 安装 Vue I18n npm install vue-i18nnext配置 i18n.js import { createI18n } from vue-i18n; import messages from ./messages;const i18n createI18n({legacy: false, // 使用组合 API 模式l…

【Mysql】DQL操作单表、创建数据库、排序、聚合函数、分组、limit关键字

DQL操作单表 1.1 创建数据库 •创建一个新的数据库 db2 CREATE DATABASE db2 CHARACTER SET utf8;•将db1数据库中的 emp表 复制到当前 db2数据库 ** 1.2 排序** 通过 ORDER BY 子句,可以将查询出的结果进行排序 (排序只是显示效果,不会影响真实数据) 语法结构&#xff1a;…

计算机系统基础实训八—ProxyLab实验

实验目的与要求 1、让学生应用套接字接口实现网络编程&#xff1b; 2、让学生理解Web服务器开发的相关知识&#xff1b; 3、让学生应用并发编程技术进行并发服务器的开发&#xff1b; 实验原理与内容 Web代理是一种在Web浏览器和终端服务器之间充当中介角色的程序。在Web代…

可灵王炸更新,图生视频、视频续写,最长可达3分钟!Runway 不香了 ...

现在视频大模型有多卷&#xff1f; Runway 刚在6月17号 发布Gen3 &#xff0c;坐上王座没几天&#xff1b; 可灵就在6月21日中午&#xff0c;重新夺回了王座&#xff01;发布了图生视频功能&#xff0c;视频续写功能&#xff01; 一张图概括&#xff1a; 二师兄和团队老师第一…

链表中环的入口节点

链表中环的入口节点 描述 链表中环的入口节点 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a; n≤10000&#xff0c; 1<结点值<10000 要求&#xff1a;空间复杂度 O(1)…

剪画音频提取:周杰伦音乐自由听,谁还付费听歌呀!

​作为周杰伦的狂热粉丝&#xff0c;你是否常常为各大音乐软件的会员限制而感到烦恼&#xff1f;每当想听一首心仪的周杰伦歌曲&#xff0c;却被“会员专享”这几个字挡住去路&#xff0c;实在是令人扫兴。但是别担心&#xff0c;今天我将为你揭示一个神奇的方法——把视频提取…

嵌入式通信协议----Wi-Fi协议详解(二)(基于STM32+有人物联网WIFI模块)

四、有人WIFI模块 1.模块介绍 Wi-Fi 模块用于实现串口到 Wi-Fi 数据包的双向透明转发&#xff0c;模块内部完成协议转换&#xff0c;通 过该模块&#xff0c;客户可以将物理设备连接到 Wi-Fi 网络上&#xff0c;从而实现物联网的控制与管理。 2.模块参数 Wi-Fi 模块的…

网格布局之跨行越列

网格布局之跨行越列 欢迎关注&#xff1a;xssy5431 小拾岁月 参考链接&#xff1a;https://mp.weixin.qq.com/s/xStfSmewncTW49N0Y_Vhow 点击查看 使用场景 在常见的页面布局中&#xff0c;我们往往会遇到那种类似合并单元格的布局。比如&#xff1a;成绩排名、产品排名等等…

个体核定征收双免个体户0税率大额核定税率全行业筹划

工商银行的会计政策和程序规定 工商银行会计政策和程序规定 工商银行的会计政策和程序规定 https://www.9733.cn/shop/ssch 一、个体工商户核定征收 核定征收是一种简化税收管理方式&#xff0c;适用于簿记不健全、难以准确核算收入和成本的个体。以下是主要特点&#xff1a…

领先GPT-4o:Anthropic 推出新一代模型 Claude 3.5 Sonnet|TodayAI

Anthropic&#xff0c;全球领先的人工智能实验室之一&#xff0c;近日发布了其最新的人工智能模型——Claude 3.5 Sonnet。该模型不仅速度更快&#xff0c;成本更低&#xff0c;而且在多个关键任务上的表现超过了其前代模型 Claude 3 Opus。 更强的视觉功能与幽默感 Claude 3…

基于Java的农机电招平台系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果你对农机电招平台系统感兴趣或有相关开发需求&#xff0c;可以私信联系我。 开发语言 Java 数据库 MySQL 技术 B/S结构&#xff0c;SpringBoot框架 工具 Eclipse&#xff0c;Navicat&#xff0c;Tomcat8.0 系…