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

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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDE 插件开发 | (十)主题插件开发入门

系列文章 本系列文章已收录到专栏,交流群号:689220994,也可点击链接加入。 前言 在前面的章节中,我们介绍的都是功能性插件的开发内容,本文则会介绍一下主题类插件的开发方式。不过本文也只是带大家入个门&#xff…

书生·浦语大模型LagentAgentLego智能体应用搭建 第二期

文章目录 智能体概述智能体的定义智能体组成智能体范式 环境配置Lagent:轻量级智能体框架实战Lagent Web Demo用 Lagent 自定义工具 AgentLego:组装智能体“乐高”直接使用AgentLego作为智能体工具使用 用 AgentLego 自定义工具 智能体概述 智能体的定义…

aardio - 【库】lock 跨进程读写锁

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right272;bottom203;topmost1) winform.add( button{cls"button";text"无锁演示";left27;top132;right120;bottom184;z2}; button2{cls"button";text"有锁演示…

邀请函 | 人大金仓邀您相聚第十三届中国国际国防电子展览会

盛夏六月 备受瞩目的 第十三届中国国际国防电子展览会 将于6月26日至28日 在北京国家会议中心盛大举办 作为数据库领域国家队 人大金仓 将携系列行业解决方案 和创新实践成果亮相 期待您莅临指导 ↓↓↓↓↓↓ CIDEX 2024 中国国际国防电子展览会(简称CIDEX&#xf…

Linux环境搭建之CentOS7(包含静态IP配置)

🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:虚拟机 🌠 首发时间:2024年6月22日 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾 安装VMw…

在scrapy中使用Selector提取数据

经院吉吉: 首先说明一下,在scrapy中使用选择器是基于Selector这个对象滴,selector对象在scrapy中通过XPATH或是CSS来提取数据的,我们可以自己创建selector对象,但在实际开发中我们不需要这样做,因为respons…

【Linux系统】多线程

本篇博客继上一篇《线程与线程控制》,又整理了多线程相关的线程安全问题、互斥与锁、同步与条件变量、生产消费模型、线程池等内容,旨在让读者更加深刻地理解线程和初步掌握多线程编程。(欲知线程的相关概念、线程控制的相关接口等&#xff0…

基于SpringBoot+协同过滤算法的家政服务平台设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

小米红米全机型TWRP下载刷入教程-获取root权限--支持小米14/红米K7Pro/红米Turbo3等机型

刷机注意: 本教程为小米红米全机型专用TWRP_Recovery合集,ROM乐园独家首发整理。请确保你的电脑能正确连接你的手机,小米红米手机需要解锁BL,请参照下面教程 小米MIUI澎湃OS解锁BL教程:小米手机官方解锁BootLoader图文…

Python发送Email的性能怎么样?如何配置?

Python发送Email怎么配置SMTP?批发邮件的方法技巧? Python是一种广泛使用的编程语言,因其简洁和强大的功能深受开发者喜爱。在许多应用场景中,Python发送Email是一个常见需求。那么,Python发送Email的性能怎么样呢&am…

【SpringBoot】Spring Boot 中高级特性详解

文章目录 1. 异步处理1.1 什么是异步处理?1.2 实现异步处理1.2.1 启用异步支持1.2.2 使用 Async 注解1.2.3 调用异步方法 2. 安全管理2.1 Spring Security 集成2.2 基础安全配置2.2.1 添加依赖2.2.2 默认配置2.2.3 自定义用户认证 3. 监控和调试3.1 Spring Boot Act…

fastapi教程(一):初识 fastapi

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。 关键特性: 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 …

Excel 如何复制单元格而不换行

1. 打开excle, sheet1右键单击>查看代码>插入>模块 输入代码 Sub CopyText() Updated by NirmalDim xAutoWrapper As ObjectSet xAutoWrapper New DataObject or GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")xAutoWrapper.SetText ActiveC…

数据库精选题(一)(关系数据库设计)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀数据库 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 练习题 题型一:判断关系…

【CV炼丹师勇闯力扣训练营 Day8】

CV炼丹师勇闯力扣训练营 代码随想录算法训练营第8天 ● 344.反转字符串 ● 541. 反转字符串II ● 卡码网:54.替换数字 一、344 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额…

Redis实战—Redis分布式锁

本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于Redis的分布式锁 Redis锁代码实现 修改业务代码 分布式锁误删问题 分布式锁原子性问题 Lua脚本 编写脚本 代码优化 总结 分布式锁介绍…

【技巧】Leetcode 201. 数字范围按位与【中等】

数字范围按位与 给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输出:4 解题思路 …

vscode禅模式怎么退出

1、如何进入禅模式:查看--外观--禅模式 2、退出禅模式 按二次ESC,就可以退出。

公共 IP 地址和私有 IP 地址的区别总结

什么是IP地址? IP 地址,即互联网协议地址(Internet Protocol Address),是网络设备在网络中进行通信的标识。IP 地址可以看作是设备在网络中的“地址”,有助于数据包在网络中找到正确的接收端。IP 地址主要…

计算机系统基础实训七-MallocLab实验

实验目的与要求 1、让学生理解动态内存分配的工作原理; 2、让学生应用指针、系统级编程的相关知识; 3、让学生应用各种动态内存分配器的实现方法; 实验原理与内容 (1)动态内存分配器基本原理 动态内存分配器维护…