Gradio Agents & MCP 黑客马拉松
获奖者Gradio Agents & MCP 黑客马拉松
获奖者Google表格是存储表格数据(以电子表格形式)的简便方法。使用Gradio和pandas,可以轻松地从公共或私人Google表格中读取数据,然后显示数据或绘制图表。在这篇博客文章中,我们将构建一个小型实时仪表板,它会在Google表格数据更新时进行更新。
构建仪表板本身只需使用Gradio编写9行Python代码,最终的仪表板将如下所示:
前提条件:本指南使用Gradio Blocks,请确保您熟悉Blocks类。
根据您使用的是公共可访问的Google表格还是私人Google表格,过程略有不同。我们将涵盖这两种情况,现在开始吧!
多亏了pandas
库,从公共Google表格构建仪表板非常容易。
1. 获取您要使用的Google表格的URL。要做到这一点,只需访问Google表格,点击右上角的“分享”按钮,然后点击“获取可分享链接”按钮。这将为您提供一个类似于此的URL:
https://docs.google.com/spreadsheets/d/1UoKzzRzOCt-FXLLqDKLbryEKEgllGAQUEJ5qtmmQwpU/edit#gid=0
2. 现在,让我们修改此URL,然后使用它将数据从Google表格读取到Pandas DataFrame中。(在下面的代码中,将URL
变量替换为您的公共Google表格的URL)
import pandas as pd
URL = "https://docs.google.com/spreadsheets/d/1UoKzzRzOCt-FXLLqDKLbryEKEgllGAQUEJ5qtmmQwpU/edit#gid=0"
csv_url = URL.replace('/edit#gid=', '/export?format=csv&gid=')
def get_data():
return pd.read_csv(csv_url)
3. 数据查询是一个函数,这意味着使用gr.DataFrame
组件实时显示它,或者使用gr.LinePlot
组件实时绘制它都很容易(当然,根据数据,可能需要不同的图表)。为此,只需将该函数传递给相应的组件,并根据您希望组件刷新频率(以秒为单位)设置every
参数。以下是Gradio代码:
import gradio as gr
with gr.Blocks() as demo:
gr.Markdown("# 📈 Real-Time Line Plot")
with gr.Row():
with gr.Column():
gr.DataFrame(get_data, every=gr.Timer(5))
with gr.Column():
gr.LinePlot(get_data, every=gr.Timer(5), x="Date", y="Sales", y_title="Sales ($ millions)", overlay_point=True, width=500, height=500)
demo.queue().launch() # Run the demo with queuing enabled
就是这样!您现在拥有一个每5秒刷新一次的仪表板,从您的Google表格中提取数据。
对于私人Google表格,过程需要多一点工作,但并不多!主要区别在于,您现在必须进行身份验证以授权访问私人Google表格。
要进行身份验证,请从Google Cloud获取凭据。以下是如何设置Google Cloud凭据。
1. 首先,登录您的Google Cloud账户并前往Google Cloud控制台(https://console.cloud.google.com/)。
2. 在Cloud控制台中,点击左上角的汉堡菜单,然后从菜单中选择“API和服务”。如果您没有现有项目,则需要创建一个。
3. 然后,点击“+启用API和服务”按钮,它允许您为您的项目启用特定服务。搜索“Google Sheets API”,点击它,然后点击“启用”按钮。如果您看到“管理”按钮,则表示Google Sheets已经启用,您已准备就绪。
4. 在“API和服务”菜单中,点击“凭据”选项卡,然后点击“创建凭据”按钮。
5. 在“创建凭据”对话框中,选择“服务账户密钥”作为要创建的凭据类型,并为其命名。记下服务账户的电子邮件地址。
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://#/o/oauth2/auth",
"token_uri": "https://#/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"
}
获取凭据.json
文件后,您可以使用以下步骤查询您的Google表格:
1. 点击Google表格右上角的“分享”按钮。将Google表格分享给身份验证子部分步骤5中的服务账户的电子邮件地址(此步骤很重要!)。然后点击“获取可分享链接”按钮。这将为您提供一个类似于此的URL:
https://docs.google.com/spreadsheets/d/1UoKzzRzOCt-FXLLqDKLbryEKEgllGAQUEJ5qtmmQwpU/edit#gid=0
2. 安装gspread
库,它使在Python中处理Google Sheets API变得容易,通过在终端中运行:pip install gspread
3. 编写一个函数来从Google表格加载数据,如下所示(将URL
变量替换为您的私人Google表格的URL):
import gspread
import pandas as pd
# Authenticate with Google and get the sheet
URL = 'https://docs.google.com/spreadsheets/d/1_91Vps76SKOdDQ8cFxZQdgjTJiz23375sAT7vPvaj4k/edit#gid=0'
gc = gspread.service_account("path/to/key.json")
sh = gc.open_by_url(URL)
worksheet = sh.sheet1
def get_data():
values = worksheet.get_all_values()
df = pd.DataFrame(values[1:], columns=values[0])
return df
4. 数据查询是一个函数,这意味着使用gr.DataFrame
组件实时显示它,或者使用gr.LinePlot
组件实时绘制它都很容易(当然,根据数据,可能需要不同的图表)。为此,我们只需将该函数传递给相应的组件,并根据您希望组件刷新频率(以秒为单位)设置every
参数。以下是Gradio代码:
import gradio as gr
with gr.Blocks() as demo:
gr.Markdown("# 📈 Real-Time Line Plot")
with gr.Row():
with gr.Column():
gr.DataFrame(get_data, every=gr.Timer(5))
with gr.Column():
gr.LinePlot(get_data, every=gr.Timer(5), x="Date", y="Sales", y_title="Sales ($ millions)", overlay_point=True, width=500, height=500)
demo.queue().launch() # Run the demo with queuing enabled
您现在拥有一个仪表板,它每5秒刷新一次,从您的Google表格中提取数据。
就是这样了!只需几行代码,您就可以使用gradio
和其他库从公共或私人Google表格中读取数据,然后在实时仪表板中显示和绘制数据。