Gradio 月活用户达到 100 万!

阅读更多
Gradio logo
  1. 其他教程
  2. 使用 Google Sheets 创建实时仪表盘

使用 Google Sheets 创建实时仪表盘

Google Sheets 是一种以电子表格形式存储表格数据的简便方法。借助 Gradio 和 pandas,可以轻松地从公共或私有 Google Sheets 中读取数据,然后显示数据或绘制图表。在这篇博文中,我们将构建一个小型实时仪表盘,当 Google Sheets 中的数据更新时,该仪表盘也会更新。

构建仪表盘本身只需使用 Gradio 的 9 行 Python 代码,我们最终的仪表盘将如下所示

先决条件:本指南使用 Gradio Blocks,因此请确保您熟悉 Blocks 类。

根据您使用的是公共访问还是私有 Google Sheet,该过程略有不同。我们将介绍这两种情况,所以让我们开始吧!

公共 Google Sheets

借助 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 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 APIpip 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 中读取数据,然后在实时仪表板中显示和绘制数据。