举个栗子!Tableau技巧(27):如何在Tableau中用Python(技术干货,建议收藏)

自从Tableau10.2发版,技术宅们欣喜若狂:Tableau中终于可以用Python啦!不过,究竟怎么用?很多用户就不是很清楚了。

关于Python在Tableau的用法,我查阅相关资料,找到了这篇内容完整并且满满干货的分享文章。英文原文链接接:tableau/TabPy

在这里,我将原文做了翻译,分享给技术达人们!

——————————————————————————————————》》

期《举个栗子》,阿达要给大家分享的Tableau技巧是:如何在Tableau中用Python。

在Tableau中用Python,首先需要添加TabPy服务器。TabPy服务器是Tableau的Python集成的服务器组件,它是一个基于Tornado和其他Python库的Python进程。

一、在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)。

二、在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访问任务管理器)

三、手动安装

如果您熟悉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。

更新TabPy

您可以使用pip中的--upgrade选项来更新到较新版本。

pip install --upgrade tabpy-server

为了使其成功,如果您在Conda环境中安装了TabPy,请确保它处于活动状态。

扩展环境

如果您的功能取决于未包含的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_

您可以在服务器进程运行时在单独的终端中执行此操作 - 无需重新启动。

REST接口

服务器进程暴露了几个REST API以获取状态并执行Python代码并查询已部署的方法。

1、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

2、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

3、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

4、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

6、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: http://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 \“]”}'

7、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到了吗?赶快打开你的Tableau试试看吧!



文章部分信息来源于网络,如有侵权请告知

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容