【Gradio】表格数据科学与图表-连接到数据库
简介
本指南解释了如何使用 Gradio 将您的应用程序连接到数据库。我们将连接到托管在 AWS 上的 PostgreSQL 数据库,但 gradio 对您连接到的数据库类型及其托管位置完全不可知。因此,只要您能够编写 Python 代码来连接到您的数据,您就可以使用 gradio 在 Web UI 中显示它 💪
概览
我们将分析芝加哥的共享单车数据。数据托管在这里的 kaggle 上。我们的目标是创建一个仪表板,使我们的业务利益相关者能够回答以下问题:
电动自行车比普通自行车更受欢迎吗?
前五大最受欢迎的出发自行车站是哪些?
芝加哥自行车共享仪表板
本演示从托管在 AWS 上的 postgresql 数据库中提取 2022 年 3 月的芝加哥自行车共享数据。本演示使用 psycopg2,但任何 postgresql 客户端库(如 SQLAlchemy)都与 gradio 兼容。
连接凭证由定义在 Space 中的环境变量作为秘密处理。
如果数据库中添加了数据,每当网页重新加载时,本演示中的图表就会更新。
本演示可作为您的数据库连接应用的起点!
第一步 - 创建您的数据库
我们将在亚马逊的 RDS 服务上托管的 PostgreSQL 上存储我们的数据。如果您还没有 AWS 账户,请创建一个,并在免费层上创建一个 PostgreSQL 数据库。
重要提示:如果您计划在 HuggingFace Spaces 上托管此演示,请确保数据库位于 8080 端口。Spaces 将阻止所有出站连接,除非它们是向端口 80、443 或 8080 发出的,如此处所述。RDS 不允许您在端口 80 或 443 上创建 PostgreSQL 实例。
创建数据库后,从 Kaggle 下载数据集并将其上传到您的数据库。为了这个演示,我们只会上传 2022 年 3 月的数据。
第 2.a 步 - 编写您的 ETL 代码
我们将查询我们的数据库,按自行车类型(电动,标准或停靠)分别统计骑行总数。我们还将查询每个站点出发的骑行总数,并取前 5 名。
然后,我们将使用 matplotlib 将我们的查询结果进行可视化。
我们将使用 pandas 的 read_sql 方法连接到数据库。这需要安装 psycopg2 库。
为了连接到我们的数据库,我们将把数据库用户名、密码和主机指定为环境变量。这将通过避免在我们的应用程序文件中以明文存储敏感信息,使我们的应用更加安全。
#导入os,pandas以及matplotlib.pyplot这三个库
import os
import pandas as pd
import matplotlib.pyplot as plt#获取环境变量"DB_USER"、"DB_PASSWORD"和"DB_HOST"的值,分别赋值给变量DB_USER,DB_PASSWORD和DB_HOST
#如果对应的环境变量不存在,这些值将为None
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_HOST = os.getenv("DB_HOST")#定义数据库端口号
PORT = 8080#定义数据库名称
DB_NAME = "bikeshare"#根据上述参数构建连接字符串
connection_string = f"postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}?port={PORT}&dbname={DB_NAME}"#定义函数get_count_ride_type,该函数用于获取不同类型的自行车的行程数,并将结果制作成柱状图
def get_count_ride_type():# 使用SQL语句从数据库中提取数据,并将结果转化为pandas dataframedf = pd.read_sql("""-- 计算 ride_id 的数量(代表行程数量),并命名为 n,选择 rideable_typeSELECT COUNT(ride_id) as n, rideable_type-- 从名为 rides 的表中选择数据FROM rides-- 根据 rideable_type 进行分组GROUP BY rideable_type-- 根据 n(行程数量)进行降序排序ORDER BY n DESC""",#连接数据库con=connection_string)#创建一张新的图表fig_m, ax = plt.subplots()#创建柱状图ax.bar(x=df['rideable_type'], height=df['n'])ax.set_title("Number of rides by bycycle type")ax.set_ylabel("Number of Rides")ax.set_xlabel("Bicycle Type")return fig_m# 定义函数get_most_popular_stations,该函数用于获取最受欢迎的5个自行车站点,并将结果制作成柱状图
def get_most_popular_stations():# 使用SQL语句从数据库中提取数据,并将结果转化为pandas dataframedf = pd.read_sql("""-- 选择 ride_id 的计数(表示行程数量)并命名为 n,以及起始站点名称的最大值(由于已经按照 start_station_id 分组,所以同一组内的 start_station_name 应该相同,使用 MAX 函数可以获取到当前组内的站点名称)并命名为 stationSELECT COUNT(ride_id) as n, MAX(start_station_name) as station-- 从名为 RIDES 的表中选择数据FROM RIDES-- 只选择起始站点名称不为 NULL 的数据WHERE start_station_name is NOT NULL-- 根据起始站点编号 start_station_id 分组GROUP BY start_station_id-- 按照 n(行程数量)从大到小排序ORDER BY n DESC-- 仅返回前5条记录LIMIT 5""",#连接数据库con=connection_string)#创建一张新的图表fig_m, ax = plt.subplots()#创建柱状图# 使用matplotlib的bar方法绘制柱状图,df['station']为X轴,df['n']为Y轴ax.bar(x=df['station'], height=df['n'])# 设置图表标题为"Most popular stations"ax.set_title("Most popular stations")# 设置Y轴标签为"Number of Rides"ax.set_ylabel("Number of Rides")# 设置X轴标签为"Station Name"ax.set_xlabel("Station Name")# 设置X轴刻度标签的显示方式,使用df['station']的值作为标签,设置标签旋转角度为45度,靠右对齐,用锚点方式进行旋转ax.set_xticklabels(df['station'], rotation=45, ha="right", rotation_mode="anchor") # 设置X轴的刻度标签字体大小为8ax.tick_params(axis="x", labelsize=8) # 调整子图参数,使子图适应图例,使之填满图像区域fig_m.tight_layout()return fig_m 如果您要在本地运行我们的脚本,您可以像这样将您的凭证作为环境变量传入
DB_USER='username' DB_PASSWORD='password' DB_HOST='host' python app.py 第 2.c 步 - 编写您的 gradio 应用程序
我们将使用 gr.Row() 并排显示两个独立的 gr.Plot 组件来展示或 matplotlib 图表。因为我们已经用 demo.load() 事件触发器包装了获取数据的函数,所以我们的演示将在每次网页加载时动态地从数据库中获取最新数据。🪄
# 导入 gradio 库并简化为 gr
import gradio as gr# 利用 gr.Blocks() 创建一个上下文环境,命名为 demo
with gr.Blocks() as demo:# 在 demo 中创建一个行布局(Row)with gr.Row():# 在创建的行布局中添加两个绘图空间,命名为 bike_type 和 stationbike_type = gr.Plot()station = gr.Plot()# 加载 get_count_ride_type 函数,并设置其输出到 bike_type 绘图空间demo.load(get_count_ride_type, inputs=None, outputs=bike_type)# 加载 get_most_popular_stations 函数,并设置其输出到 station 绘图空间demo.load(get_most_popular_stations, inputs=None, outputs=station)# 启动并呈现用户界面
demo.launch() 第 3 步 - 部署
如果您运行上面的代码,您的应用将开始在本地运行。通过传递 share=True 参数给 launch ,您甚至可以获得一个临时的可分享链接。
但是如果你想要一个永久的部署解决方案呢?让我们将我们的 Gradio 应用部署到免费的 HuggingFace Spaces 平台上。
如果你之前没有使用过 Spaces,请按照这里的前一个指南https://www.gradio.app/guides/using-hugging-face-integrations操作。你将需要添加 DB_USER 、 DB_PASSWORD 和 DB_HOST 变量作为“Repo Secrets”。你可以在“设置”标签中完成此操作。

结论
恭喜你!你已经知道如何将你的 gradio 应用程序连接到云上托管的数据库了!☁️
我们的仪表板现在正在 Spaces 上运行。完整代码在这里
正如你所见,gradio 让你有能力连接到你的数据无论它在哪里,并且可以按照你想要的方式显示!🔥
相关文章:
【Gradio】表格数据科学与图表-连接到数据库
简介 本指南解释了如何使用 Gradio 将您的应用程序连接到数据库。我们将连接到托管在 AWS 上的 PostgreSQL 数据库,但 gradio 对您连接到的数据库类型及其托管位置完全不可知。因此,只要您能够编写 Python 代码来连接到您的数据,您就可以使用…...
艾多美用“艾”为生命加油,献血活动回顾
用艾为生命加油 6月10日~16日,艾多美中国开启献血周活动,已经陆续收到来自烟台总部、山东、广东、河南、四川、重庆、贵阳,乌鲁木齐,吉林,等地区的艾多美员工、会员、经销商发来的爱心助力,截止到目前&…...
人工智能在气象预报领域的崛起:GraphCast引领新纪元
最近,谷歌推出的天气预测大模型GraphCast在全球范围内引起了广泛关注,其卓越的表现不仅刷新了人们对AI能力的认知,更预示着传统天气预报工作模式的深刻变革。 GraphCast是一款基于机器学习技术的天气预测工具,它通过深度学习和大数…...
http和https的区别在哪
HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)之间存在几个关键区别主要涉及安全性、端口、成本、加密方式、搜索引擎优化(SEO)、身份验证等方面 1、安全性:HTTP(超文本传输协议…...
windows10远程桌面端口,Windows 10远程桌面端口修改的两个方法
在Windows 10系统中,远程桌面功能允许用户通过网络从一台计算机远程访问和控制另一台计算机。默认情况下,远程桌面服务使用的端口是3389。然而,出于安全考虑,许多管理员和用户希望修改这一默认端口。本指南将详细介绍如何在Window…...
力扣1504.统计全1子矩形
力扣1504.统计全1子矩形 开一个二维数组存每个点从它本身开始向左有多少连续的1 遍历矩形右下角(i,j) 再遍历行k in i每一行的矩形数量 minx min(minx,left(k,j)) class Solution {public:int numSubmat(vector<vector<int>>& mat) {int n mat.size();int…...
vue3高德地图组件化,解决复用地图组件时渲染失败问题
思路:多个页面都需要调用地图,将地图封装成一个组件进行复用,发现调用时只有第一次渲染成功了。 解决:相同 id 的地图渲染只能有一次,如果多个复用地图的页面不需要同时渲染,使用 v-if 来控制;…...
Langchain 如何工作
How does LangChain work? LangChain是如何工作的? Let’s consider our initial example where we upload the US Constitution PDF and pose questions to it. In this scenario, LangChain compiles the data from the PDF and organizes it. 让我们考虑我们最初的例子…...
【数据结构】顺序表实操——通讯录项目
Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…...
C++继承与多态—多重继承的那些坑该怎么填
课程总目录 文章目录 一、虚基类和虚继承二、菱形继承的问题 一、虚基类和虚继承 虚基类:被虚继承的类,就称为虚基类 virtual作用: virtual修饰成员方法是虚函数可以修饰继承方式,是虚继承,被虚继承的类就称为虚基类…...
论文阅读:基于谱分析的全新早停策略
来自JMLR的一篇论文,https://www.jmlr.org/papers/volume24/21-1441/21-1441.pdf 这篇文章试图通过分析模型权重矩阵的频谱来解释模型,并在此基础上提出了一种用于早停的频谱标准。 1,分类难度对权重矩阵谱的影响 1.1 相关研究 在最近针对…...
1.接口测试-postman学习
目录 1.接口相关概念2.接口测试流程3.postman基本使用-创建请求(1)环境(2)新建项目集合Collections(3)新建collection(4)新建模块(5)构建请求请求URLheader设…...
2024年码蹄杯本科院校赛道初赛(省赛)
赛时所写题,简单写一下思路,qwq 第一题: 输出严格次小值, //#pragma GCC optimize(2)#include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue> #incl…...
PHP蜜语翻译器在线文字转码解码源码
源码介绍 PHP蜜语翻译器在线文字转码解码源码 文字加密通话、一键转换、蜜语密码 无需数据库,可以将文字、字母、数字、代码、表情、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容!支持在线加密解密 有多种加密展示…...
安卓浏览器区分启动、打开、分享
搞了几个钟头,终于全兼容了,分享有2种类型! void getDataFromIntent(Intent intent) {if (intent.getAction().equals(Intent.ACTION_VIEW)) {urln intent.getDataString();if (urln ! null) {if (urln.contains("\n"))urln url…...
C/C++ 数组负数下标
一 概述 在 C 中,数组是一块连续的内存空间,数组的下标通常用来定位这段内存中的特定元素。下标通常从 0 开始,最大到数组长度减 1。例如,一个有 10 个元素的数组,其有效下标范围是从 0 到 9。 当你尝试使用负数下标来…...
钓鱼网站开发原理(社会工程学)
钓鱼网站开发原理(社会工程学) 一、课程简介1、课程大纲2、课程目标3、知识储备 二、钓鱼网站简介1、什么是钓鱼网站2、开发&原理 三、PHP环境搭建1、简介2、自动安装MySQL/apache/PHP3、安装navicat 四、PDO表单入库案例1、语法2、显示登录表单3、入…...
如何优雅地使用 console.log 打印数组或对象
一、背景 使用 console.log 在控制台中打印数组或者对象时,很多时候它们的字段都是默认关闭的,需要手动一个个的点开,非常不直观且麻烦。 二、解决方案 使用 JSON.stringify() 的第三个参数 我们来看一下官方对于 JSON.stringify 的介绍 三、…...
模式分解的概念(下)-无损连接分解的与保持函数依赖分解的定义和判断、损失分解
一、无损连接分解 1、定义 2、检验一个分解是否是无损连接分解的算法 输入与输出 输入: 关系模式R(U,F),F是最小函数依赖集 R上的一个分解 输出: 判断分解是否为无损连接分解 (1&#x…...
vue3父组件获取子组件的实例对象
一,ref 在父组件的模板里,对子组件的标签定义ref属性,并且设置属性值,在方法里获取ref()获取实例对象。 父组件: <template><div ><div>我是父组件</div><<SonCom ref"sonComRe…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
