【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…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...