Datapane 008 - 团队版
共 9331字,需浏览 19分钟
·
2021-01-21 01:13
Datapane 团队版 - 简介
Python 开源生态系统的灵活与强大已被众多数据团队认可,但把 Python 分析结果转化为可分享、自动化、能提供商业价值的最后一步却难的让人望而却步。Datapane 团队版的 API 平台利用 Python 实现在公司内部生成与分享数据报告。让数据团队使用自己熟悉的工具驱动商业决策,让相关方自行浏览分析报告,无需每次都要等待别人生成报告。
除了安全、可验证的报告分享机制之外,Datapane 团队版还支持在云端部署 Python 脚本和 Jupyter Notebook,自动生成报告。通过网页表单输入参数,即可生成自定义报告,还可以按计划定时生成报告,或通过我们的 HTTP 和 Python API 按需生成报告。
验证与分享
Datapane 团队版为分享报告、脚本、Blob 对象、密钥等对象提供了安全、可验证的方式。Datapane 虚拟机(如,https://acme.datapane.net)的每个用户都有自己私有的、受密码保护的账户。
每个 Datapane 虚拟机都存在于独立的数据库租户里,因此,不同虚拟机之间的账户并不互通,同一个账户不能在不同虚拟机之间进行验证。
Datapane 虚拟机上创建的项目都有 visibility
设置项,用于管理有访问权限的用户。这些 visibility
选项包括 PUBLIC
、PRIVATE
、ORG
。创建对象时,一般都要配置这个选项,默认值是 ORG
。
以下列报告为例:
# 任何人都可见
report.publish(visibility='PUBLIC')
# 只有在 Datapane 虚拟机上的注册用户可见
report.publish(visibility='ORG')
# 只有账户所有者本人可见,其它用户不可见
report.publish(visibility='PRIVATE')
在网页界面上也可以设置报告或脚本的 visibility
选项。
访问 Token
如需向客户、合同商等外部人员分享私有报告,请用 Share 按钮旁的链接生成带安全标记的 Token。这个链接包含的 Token 可以让任何持有此链接的人访问报告,无需注册 Datapane 账户。
此 Token 也适用于嵌入式报告,比如,嵌入到 Confluence 或网页等平台的报告。为了安全起见,24 小时后会重置访问 Token,因此,这种方式不适合长期分享。
下一节,介绍如何部署 Datapane 团队版的脚本与 Jupyter Notebook。
脚本与 Jupyter 部署
简介
Datapane 团队版支持脚本运行器,可在云端通过参数运行部署的 Python 脚本或 Jupyter Notebook。即,除在本机生成报告之外,还支持部署后自动生成报告。
脚本或 Notebook 部署后,可用以下三种方式运行:
网页表单
通过界面友好的网页表单输入参数即可运行脚本,为相关方创建的交互、自助式报告工具。
参数与表单(详见下文)
计划定时
使用脚本按计划定时生成、更新报告,创建“实时”仪表盘与自动报告。
按计划运行报告(详见下文)
调用 API
通过 API 生成报告,利用 Slack、Teams 或您自己产品中触发事件生成报告。
部署脚本
通过 CLI 把调用 Report.publish
方法(参阅创建报告小节)创建报告的 Python 脚本或 Notebook 部署到 Datapane。下面以上文中的新冠脚本为例,用 Datapane 的 CLI 部署该脚本。通过 Datapane 网页界面运行脚本时,用该代码发布的报告将返回给用户。
建议:一个脚本只创建一个报告。虽然一个脚本里可以创建多个报告,但网页界面只能追踪每个脚本里最后的报告。
# simple_script.py
import pandas as pd
import altair as alt
import datapane as dp
dataset = pd.read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv')
df = dataset.groupby(['continent', 'date'])['new_cases_smoothed_per_million'].mean().reset_index()
plot = alt.Chart(df).mark_area(opacity=0.4, stroke='black').encode(
x='date:T',
y=alt.Y('new_cases_smoothed_per_million:Q', stack=None),
color=alt.Color('continent:N', scale=alt.Scale(scheme='set1')),
tooltip='continent:N'
).interactive().properties(width='container')
dp.Report(
dp.Plot(plot),
dp.Table(df)
).publish(name='covid_report', open=True)
部署报告时,使用 Datapane 的 CLI。
datapane script deploy --script=simple_script.py --name=covid_script
Uploaded simple_script.py to https://acme.datapane.net/leo/scripts/covid_script/
该操作把脚本部署至私有虚拟机,您可以把它分享给别人。分享脚本后,点击 Run 按钮,就可以用上面的示例代码动态生成报告。
每次运行脚本,都会重新提取新冠数据,并生成全新的报告,继而可以用于分享或嵌入到其它平台。
配置
上例部署了单一脚本,并通过命令行参数设置了脚本名称与文件位置。对于单一脚本,这种操作没有问题,但很多时候,还需要配置脚本的其它选项,比如参数定义、设置部署文件与文件夹、Python、系统需求等。
Datapane 的配置文件是 datapane.yaml
。运行 deploy
命令时,Datapane 自动查找这个文件。继续下一步操作前, 先用 script init
命令创建项目架构,该命令将生成 datapane.yaml
示例文件及示例脚本文件。
~/C/d/d/my-new-proj> datapane script init
Created script 'my-new-proj', edit as needed and upload
~/C/d/d/my-new-proj> ls
datapane.yaml dp-script.py
下一步操作要使用的是上例中的脚本文件,所以请删除该命令生成的 dp-script.py
示例脚本文件。这里替换了默认脚本,因此,要在 datapane.yaml
的 script
项里指定脚本的文件名。在这个文件里,还可以指定报告名称。
# datapane.yaml
name: covid_script
script: simple_script.py # this could also be ipynb if it was a notebook
在这个文件夹里运行 datapane script deploy
命令,Datapane 使用 datapane.yaml
里的设置部署代码。因为该文件里设置的脚本名称与上例中的名称一样,该操作将生成 covid_script
脚本的第 2 个版本。
与报告类似,脚本也支持多版本,可以生成或迭代单一 Python 项目。
下一节,介绍向脚本添加参数,基于用户输入的内容动态生成报告。
脚本参数
脚本支持参数,通过网页表单或 API 可以动态生成报告。
概览
相关方通常需要配置脚本,以实现自助生成报告。Datapane 允许向脚本中传递参数,并以网页表单的形式展现给终端用户。这种方式让其他在虚拟机上有账户的用户不必操心代码、Notebook、设置 Python 环境,就能够生成报告。
运行与参数
在 datapane.yaml
配置文件里,写清楚输入内容的架构与配置即可定义可以输入哪些参数。在 Python 代码中,在本文件里定义的这些参数通过 Params
字典访问。用 Params.get([value_name], [default_value])
,就能从字典里提取所需的项目。
这里继续沿用上节的例子,提取的数据集里还包含一些用户在可视化时需要的其它参数。下面将 new_case_smoothed_per_million
、new_deaths_smoothed_per_million
、median_age
、gdp_per_capita
等内容添加到终端用户可选择的内容里。此外,终端用户还要能为可视图选择 continents
的子集。
基于以上内容,要向 datapane.yaml
的 parameters
项中添加两个参数:plot_field
与 continents
。要配置终端用户的表单,需要选择 widget 类型。针对上例,选择 enum
(下拉菜单,用户必须选择其中一个选项)、list
(用户可以选择预定义列表中的一项或多项内容)。还可以为每项输入内容与描述设置默认参数。
参数配置与可用的字段请参与 API 参考手册(下期发布)
# datapane.yaml
name: covid_script
script: simple_script.py # this could also be ipynb if it was a notebook
parameters:
- name: field_to_plot
description: Field to plot
type: enum
choices:
- new_cases_smoothed_per_million
- new_deaths_smoothed_per_million
- median_age
- gdp_per_capita
- name: continents
description: Field to plot
type: list
choices:
- Africa
- Asia
- Europe
- Oceania
- North America
- South America
default:
- Asia
- North America
设置完成后,在 Datapane 虚拟机上运行时,就可以用 Params
对象,基于用户的输入自定义数据与可视图。
# simple_script.py
import pandas as pd
import altair as alt
import datapane as dp
dataset = pd.read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv')
# 获取输入的参数
continents = dp.Params.get('continents', ['Asia', 'North America'])
field_to_plot = dp.Params.get('field_to_plot', 'new_cases_smoothed_per_million')
df = dataset[dataset.continent.isin(continents)].groupby(['continent', 'date'])[plot_field].mean().reset_index()
plot = alt.Chart(df).mark_area(opacity=0.4, stroke='black').encode(
x='date:T',
y=alt.Y(field_to_plot, stack=None),
color=alt.Color('continent:N', scale=alt.Scale(scheme='set1')),
tooltip='continent:N'
).interactive().properties(width='container')
dp.Report(
dp.Plot(plot),
dp.Table(df)
).publish(name='covid_report', open=True)
运行 script deploy
命令,Datapane 会部署脚本的新版本,并用定义的参数生成下图所示的表单:
终端用户可以输入参数,并基于这些字段自助生成自定义报告。
定时运行报告
按计划安排的节奏生成报告,并创建实时仪表盘。
有时,需要按计划让部署到 Datapane 的脚本或 Jupyter Notebook 自动生成报告 -- 比如,每天从数据仓库中更新数据,或定期查询内部 API 的变化。
新建计划使用 create
命令:
$ datapane schedule create