舉個例子!Tableau技巧(27):如何在Tableau中用Python(技術乾貨,建議收藏)

weixin_34054866發表於2018-04-19

自從Tableau10.2發版,技術宅們欣喜若狂:Tableau中終於可以用Python啦!不過,究竟怎麼用?很多使用者就不是很清楚了。

10136054-cd1a06a4860057c1.jpg

關於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試試看吧!



文章部分資訊來源於網路,如有侵權請告知

相關文章