举个栗子!Tableau 技巧(27):如何在 Tableau 中用 Python(技术干货,建议收藏)
自从 Tableau10.2 发版,技术宅们欣喜若狂:Tableau 中终于可以用 Python 啦!不过,究竟怎么用?很多用户就不是很清楚了。
关于 Python 在 Tableau 的用法,我查阅相关资料,找到了这篇内容完整并且满满干货的分享文章。英文原文链接接:https://github.com/tableau/TabPy/blob/master/server.md
在这里,我将原文做了翻译,分享给技术达人们!
本期《举个栗子》,阿达要给大家分享的 Tableau 技巧是:如何在 Tableau 中用 Python。
在 Tableau 中用 Python,首先需要添加 TabPy 服务器。TabPy 服务器是 Tableau 的 Python 集成的服务器组件,它是一个基于 Tornado 和其他 Python 库的 Python 进程。
Part 1:在Linux / MacOS上安装
在基于 Linux 的系统上,您可以使用脚本 setup.sh 从头开始安装 TabPy。
首先点击 TabPy 存储库着陆页右上角的绿色克隆或下载按钮并下载 zip 文件。解压缩后,导航到终端窗口中包含 setup.sh 的文件夹,然后键入 ./setup.sh。
在 MacOSX 上,您可能还需要通过键入以下命令来为文件授予权限:chmod + x setup.sh
该脚本执行以下操作:
- 下载并安装Anaconda,除非Anaconda在PATH或文件夹Anaconda在当前文件夹中找到。 Anaconda提供了一套详尽的Python包,包括可由服务器执行的Python代码使用的ML相关库。
- 创建一个名为Tableau-Python-Server的Python环境(如果尚不存在)。然后脚本激活环境,并将服务器文件夹添加到PYTHONPATH(这是服务器脚本在同一个文件夹中查找其Python依赖项所必需的)。
- 将所需的Python包安装到新环境以及客户端软件包中,因为它包含服务器所依赖的常用功能。
- 初始化服务器,显示安装位置和下次启动服务的说明。
安装完成后,或根据启动服务器的说明运行startup.sh时,应该会看到如下输出:
INFO:__ main __:{“INFO”:“Loading state from state file”}
INFO:__ main __:{“INFO”:“Initializing tabpy”}
INFO:__ main __:{“INFO”:“Done initializing tabpy”}
INFO:__ main __:{“INFO”:“Web service listening on port 9004”}
此时,服务器可以远程执行Python代码或部署Python函数。
您可以通过终止进程来停止服务器(例如,使用CTRL-C)。
Part 2:在 Windows 上安装
在 Windows 上,您可以使用脚本 setup.bat 从头开始安装 TabPy。
首先点击TabPy存储库着陆页右上角的绿色克隆或下载按钮并下载zip文件。解压缩后,使用Windows命令行导航到包含setup.bat的文件夹,然后键入setup.bat。
脚本执行以下步骤:
- 下载并安装Anaconda,在当前用户帐户下,例如C:\ users \ yourUserName \,除非Anaconda在PATH中或具有注册表项。 Anaconda提供了一套详尽的Python包,包括可由服务器执行的Python代码使用的ML相关库。
- 创建一个名为Tableau-Python-Server的Python环境(如果尚不存在)。脚本然后激活环境。
- 将所需的Python包安装到新环境以及客户端软件包中,因为它包含服务器所依赖的常见功能。
初始化服务器,显示安装位置和下次启动服务的说明。
安装完成后,或者根据启动服务器的说明运行startup.bat时,应该会看到如下输出:
INFO:__ main __:{“INFO”:“Loading state from state file”}
INFO:__ main __:{“INFO”:“Initializing tabpy”}
INFO:__ main __:{“INFO”:“Done initializing tabpy”}
INFO:__ main __:{“INFO”:“Web service listening on port 9004”}
此时,服务器可以远程执行Python代码或部署Python函数。
您可以通过终止可以在Windows任务管理器中看到的python2.7进程来停止服务器。 (按Ctrl + Shift + Esc访问任务管理器)
Part 3:手动安装
如果您熟悉Python环境并且已经设置了一个,或者不喜欢使用Anaconda,并且只想启动服务器进程,则可以跳过安装脚本,安装依赖项并直接从命令行运行该进程。手动安装说明假定Conda或Python被定义为PATH的一部分。
它是可选的,但建议您为此项目创建一个新的Conda环境:
conda create --name Tableau-Python-Server python = 2.7 anaconda
上面的示例创建了一个Python 2.7环境,但Python 2.7+和Python 3.5+都支持Tableau Python Server。
现在激活新创建的环境。
在Linux / MacOS上:
source Tableau-Python-Server
在Windows上:
activate Tableau-Python-Server
由于TabPy在PyPI上可用,您可以通过简单的运行以下命令进行安装。
pip install tabpy-server
随着软件包的安装,您将看到命令行中列出的安装位置。这些可能看起来像/Users/username/anaconda/envs/Tableau-Python-Server/lib/python2.7/site-packages或\ Users \ username \ anaconda \ envs \ Tableau-Python-Server \ lib \ site-packages,取决于你的环境。
导航到site-packages下的tabpy_server文件夹,并分别在Windows和Linux / MacOS上运行startup.bat或startup.sh。您可以指定自定义端口号作为参数。 startup.bat 9001。
Part 4:更新TabPy
您可以使用pip中的--upgrade选项来更新到较新版本。
pip install --upgrade tabpy-server
为了使其成功,如果您在Conda环境中安装了TabPy,请确保它处于活动状态。
Part 5:扩展环境
如果您的功能取决于未包含的Python软件包,则需要将它们安装到Python环境中,以使其可用于服务器进程。
以下代码段假设您已经运行setup.sh或setup.bat,它创建了一个Conda环境,并在该环境中启动了服务器进程。
通过添加包名称,它可用于在服务器中执行的任何Python代码:
在Linux / MacOS上:
/Anaconda/bin/source activate Tableau-Python-Server
pip install _names_of_packages_here_
在Windows上:
/ Anaconda / Scripts / activate Tableau-Python-Server
pip install _names_of_packages_here_
如果您在默认的Python框架中安装了没有Anaconda的TabPy,那么您可以通过以下方式实现:
pip install _names_of_packages_here_
您可以在服务器进程运行时在单独的终端中执行此操作 - 无需重新启动。
Part 6:REST接口
服务器进程暴露了几个REST API以获取状态并执行Python代码并查询已部署的方法。
http:get :: / info
获取有关服务器的静态信息。
☞示例请求:
GET /info HTTP/1.1
Host: localhost:9004
Accept: application/json
☞响应示例:
HTTP / 1.1 200 OK
Content-Type:application / json
{“description”:“”,
“creation_time”:“0”,
“state_path”:“/ Users / username / my-server-state-folder”,
“server_version”:“dev”,
“name”:“my-server-name”}
- description是在state.ini文件中硬编码的字符串,可以在那里编辑。
- creation_time是自1970-01-01以来的创建时间(以秒为单位),硬编码在state.ini文件中,可在其中进行编辑。
- state_path是服务器的状态文件路径(服务器启动时环境变量TABPY_STATE_PATH的值)。
- server_version是由服务器提供的硬编码字符串(在server / common / config.py中定义)。客户可以使用此信息进行兼容性检查。
☞使用卷曲
curl -X GET http:// localhost:9004 / info
http:get :: / status
获取部署端点的运行时状态。如果在服务器中未部署端点,则返回的数据是空的JSON对象。
☞示例请求:
GET /status HTTP/1.1
Host: localhost:9004
Accept: application/json
☞响应示例:
HTTP / 1.1 200 OK
Content-Type:application / json
{"clustering": {
"status": "LoadSuccessful",
"last_error": null,
"version": 1,
"type": "model"},
"add": {
"status": "LoadSuccessful",
"last_error": null,
"version": 1,
"type": "model"}
}
☞使用卷曲:
curl -X GET http:// localhost:9004 / status
http:get :: / endpoints
获取部署的端点及其静态信息的列表。如果在服务器中未部署端点,则返回的数据是空的JSON对象。
☞示例请求:
GET /endpoints HTTP/1.1
Host: localhost:9004
Accept: application/json
☞响应示例:
HTTP / 1.1 200 OK
Content-Type:application / json
{"clustering":
{"description": "",
"docstring": "-- no docstring found in query function --",
"creation_time": 1469511182,
"version": 1,
"dependencies": [],
"last_modified_time": 1469511182,
"type": "model",
"target": null},
"add": {
"description": "",
"docstring": "-- no docstring found in query function --",
"creation_time": 1469505967,
"version": 1,
"dependencies": [],
"last_modified_time": 1469505967,
"type": "model",
"target": null}
}
☞使用卷曲:
curl -X GET http:// localhost:9004 / endpoints
http:get :: / endpoints /:endpoint
获取特定部署端点的描述。端点必须首先部署在服务器中。
☞示例请求:
GET /endpoints/add HTTP/1.1
Host: localhost:9004
Accept: application/json
☞响应示例:
HTTP / 1.1 200 OK
Content-Type:application / json
{"description": "", "docstring": "-- no docstring found in query function --",
"creation_time": 1469505967, "version": 1, "dependencies": [],
"last_modified_time": 1469505967, "type": "model", "target": null}
☞使用卷曲:
curl -X GET http:// localhost:9004 / endpoints / add
http:post :: / evaluate
执行一个Python代码块,用提供的值替换命名参数。
预期的POST主体是一个带有两个元素的JSON字典:
- 包含传递给代码的参数值的值的关键数据data。这些值是按键名称(_arg1,_arg2等)的特定约定的键值对。
- 包含Python代码(一行或多行)的值的关键脚本scritp。对参数名称的任何引用将根据数据被其值替代。
☞示例请求:
POST /evaluate HTTP/1.1
Host: localhost:9004
Accept: application/json
{"data": {"_arg1": 1, "_arg2": 2}, "script": "return _arg1+_arg2"}
☞响应示例:
HTTP / 1.1 200 OK
Content-Type:application / json
3
☞使用卷曲:
curl -X POST http:// localhost:9004 / evaluate \
-d'{“data”:{“_arg1”:1,“_arg2”:2},“script”:“return _arg1 + _arg2”}'
可以通过预定义的函数tabpy.query从代码块中调用已部署的函数。此函数的工作方式与客户端库的查询方法类似,并返回相应的数据结构。该功能必须首先作为服务器端点部署。
☞以下示例在部署deploy-function部分时调用端点集群:
POST /evaluate HTTP/1.1
Host: example.com
Accept: application/json
{ "data":
{ "_arg1": [6.35, 6.40, 6.65, 8.60, 8.90, 9.00, 9.10],
"_arg2": [1.95, 1.95, 2.05, 3.05, 3.05, 3.10, 3.15]
},
"script": "return tabpy.query('clustering', x=_arg1, y=_arg2)"}
☞下一个示例显示如何使用curl从终端调用评估;此代码查询部署在deploy-function中的方法add:
curl -X POST http:// localhost:9004 / evaluate \
-d'{“data”:{“_arg1”:1,“_arg2”:2},
“script”:“return tabpy.query(\”add \“,x = _arg1,y = _arg2)[\”response \“]”}'
http:post :: / query /:endpoint
在指定的端点执行一个函数。该功能必须首先部署。
该界面希望具有数据键的JSON体,根据其原始定义指定函数的值。在下面的例子中,函数聚类被定义为两个参数x和y的签名,期望数字数组。
☞示例请求:
POST / query / clustering HTTP / 1.1
Host:localhost:9004
Accetp:application / json
{“data”:{
“x”:[6.35,6.40,6.65,8.60,8.90,9.00,9.10],
“y”:[1.95,1.95,2.05,3.05,3.05,3.10,3.15]}}
☞响应示例:
HTTP / 1.1 200 OK
Content-Type:application / json
{“model”:“clustering”,“version”:1,“response”:[0,0,0,1,1,1,1]
“uuid”:“46d3df0e-acca-4560-88f1-67c5aedeb1c4”}
☞使用卷曲:
curl -X GET http:// localhost:9004 / query / clustering -d \
'{“data”:{“x”:[6.35,6.40,6.65,8.60,8.90,9.00,9.10],
“y”:[1.95,1.95,2.05,3.05,3.05,3.10,3.15]}}'
今天的Tableau技巧你Get到了吗?把它分享给你的朋友吧~