Gradio 月活用户达到 100 万!
阅读更多Gradio 月活用户达到 100 万!
阅读更多Google Sheets 是一种以电子表格形式存储表格数据的简便方法。借助 Gradio 和 pandas,可以轻松地从公共或私有 Google Sheets 中读取数据,然后显示数据或绘制图表。在这篇博文中,我们将构建一个小型实时仪表盘,当 Google Sheets 中的数据更新时,该仪表盘也会更新。
构建仪表盘本身只需使用 Gradio 的 9 行 Python 代码,我们最终的仪表盘将如下所示
先决条件:本指南使用 Gradio Blocks,因此请确保您熟悉 Blocks 类。
根据您使用的是公共访问还是私有 Google Sheet,该过程略有不同。我们将介绍这两种情况,所以让我们开始吧!
借助 pandas
库,从公共 Google Sheet 构建仪表盘非常容易
1. 获取您要使用的 Google Sheets 的 URL。为此,只需转到 Google Sheets,点击右上角的“共享”按钮,然后点击“获取可共享链接”按钮。这将为您提供一个 URL,如下所示
https://docs.google.com/spreadsheets/d/1UoKzzRzOCt-FXLLqDKLbryEKEgllGAQUEJ5qtmmQwpU/edit#gid=0
2. 现在,让我们修改此 URL,然后使用它将 Google Sheets 中的数据读取到 Pandas DataFrame 中。(在下面的代码中,将 URL
变量替换为您公共 Google Sheet 的 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 Sheet 中提取数据。
对于私有 Google Sheets,该过程需要更多的工作,但也没那么多!主要区别在于,现在您必须进行身份验证以授权访问私有 Google Sheets。
要进行身份验证,请从 Google Cloud 获取凭据。这是如何设置 Google Cloud 凭据
1. 首先,登录您的 Google Cloud 帐户并转到 Google Cloud Console (https://console.cloud.google.com/)
2. 在 Cloud Console 中,点击左上角的汉堡菜单,然后从菜单中选择“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 Sheets
1. 点击 Google Sheets 右上角的 “共享” 按钮。将 Google Sheets 与身份验证小节步骤 5 中的服务电子邮件地址共享(此步骤非常重要!)。然后点击 “获取共享链接” 按钮。这将为您提供一个如下所示的 URL
https://docs.google.com/spreadsheets/d/1UoKzzRzOCt-FXLLqDKLbryEKEgllGAQUEJ5qtmmQwpU/edit#gid=0
2. 安装 gspread
库,它使您可以通过在终端中运行以下命令,轻松地在 Python 中使用 Google Sheets API:pip install gspread
3. 编写一个函数以从 Google Sheet 加载数据,如下所示(将 URL
变量替换为您私有的 Google Sheet 的 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 Sheet 中拉取数据。
就是这样!只需几行代码,您就可以使用 gradio
和其他库从公共或私有 Google Sheet 中读取数据,然后在实时仪表板中显示和绘制数据。