본문 바로가기
Tableau 흡수내용

[태블로(Tableau)]Tabpy를 사용하는 2가지 방법(직접입력,함수) -Tabpy_1(Tableau에서 python사용하는 방법)

by Mr.noobiest 2022. 3. 22.

Tabpy란?

TabPy는 Tableau + Python을 의미하며, Python에서 제공하는 라이브러리들을 사용하여 만든 모델들을 Tableau에서 사용할 수 있게 해준다.

 

간단한 예제로 Add 함수를 만들고 그것을 Tabpy서버에 Deployed 한후 사용하는 방법을 작성하겠다.

※ Python 설치와 Tabpy 설치는 검색해서 설치하자/필자는 Anaconda에서 설치하였다.

 

 


1) pip를 사용해서 Tabpy를 설치한다.

>> pip install tabpy

>> 설치 후 tabpy 타이핑

>> 자동으로 localhost:9004에 서버를 열어준다.

>> 인터넷 주소창에 localhost:9004을 쳐주면 tabpy로 이동한다.

localhost:9004

2) Tableau를 실행한다.


> 상위메뉴 > 도움말 > 설정 및 성능 > Analytics 확장 프로그램 연결 관리(X)를 눌러준다.

 

 


3) Tabpy를 선택한 후 다음과 같이 입력한다. > 연결 테스트 > 저장

호스트 이름 : localhost

포트 : 9004(기본)

 


4) Python을 실행해준다, 필자는 JupyterNotebook 사용

4-1) Tabpy를 사용하는 방법은 2가지가 있다.

      첫번째는 태블로에서 직접 Python 코드를 치는것과 

      두번째 Python에서 함수를 생성하고 해당 함수를 Tabpy서버에 게시한다음 그것을 사용하는 방법이다.

 


먼저 첫번째 방법을 사용해보자

 

태블로에서 직접 Python 코드를 치는것

Tableau에서 Tabpy를 실행하는 명령어는 4가지이다

- SCRIPT_STR() Return값이 문자열

- SCRIPT_BOOL() Return값이 Bool형

- SCRIPT_REAL() Return값이 실수형

- SCRIPT_INT() Return값이 정수형

사용 데이터는 : Super Store -sample

코드는 : numpy의 corrcoef <- 상관계수


 

Tableau 계산된 필드 >>

SCRIPT_REAL("
import numpy as np 
return np.corrcoef(_arg1,_arg2)[0,1]",
SUM([매출]),SUM([수익]))

※주의할점은 Return값은 단일값이여야한다. 여러값이 나올 경우 태블로에서 에러가 발생한다.

Return의 유형이 다르거나, 여러개일경우 다음과 같은 에러가 발생한다.

 

결과는 다음과 같다.

하위 범주를 기준으로 상관계수를 측정하면 다음과 같이 표시되는데,

 

매출과 수익은 비례하며(추세선),

서로 강하게 상관하고 있음(상관계 0.8이상)을 알 수 있다.

 

특히 기업보다 일반 소비자가 매출과 수익의 상관성이 크고, 기업의 경우 매출 외 다른 요소들도 수익이 관계있음을 유추할 수 있다.

 

 


 

 

4-2) 두번째 방법은 실행한 Tabpy에 원하는 함수를 게시(Deployed)하고 그것을 실행하는것인데,

이때 함수 내부에 미리 학습(Modeling)한 모델을 집어넣어 줄 수도 있다.

ML예시는 나중에하고 우선 간단한 덧셈 함수를 넣어줄 것이다.

 

Python에서 아래 코드를 순차적으로 실행한다.

from tabpy.tabpy_tools.client import Client

client = Client('http://localhost:9004/')

 

def addFunction(x,y):
    import numpy as np
    return np.add(x, y).tolist()

client.deploy('addFunction', addFunction, 'x랑 y를 더해준다.')

 

 

정상적으로 실행되면 Tabpy(localhost:9004) > Deployed Models에 내가 만든 함수가 게시되어 있을 것이다.

 

만일 이미 있는 함수를 덮어쓰고 싶다면 override=True를 추가해주면된다.

def addFunction(x,y):
    import numpy as np
    return np.add(x, y).tolist()

client.deploy('addFunction', addFunction, 'x랑 y를 더해준다.',override=True)

제거는 client.remove("없애고 싶음 함수명")

ex) client.remove("addFunction")

 


> 테스트를 위해 매개변수 2개를 만들어준다 Num_1, Num_2


>계산된 필드를 생성한다.

SCRIPT_REAL("
return tabpy.query('addFunction',_arg1,_arg2)['response']",[Num_1],[Num_2]
)


결론은 아래와 같다.

SCRIPT_xxxxxx("

return tabpy.query('내가만든함수명',_arg1,_arg2)['response']

" ,  _arg1에 넣어줄값(집계)  ,  _arg2에 넣어줄값(집계)

)

 

결과는 다음과 같다.

매개변수 값을 변경하면 자동으로 결과값도 변경된다.

 

두번째 함수 방법을 사용해서 ML을 활용할수도 있고, 다른 여러가지 단일 결과값을 사용하여 그래프상으로 표기도 가능하다. 예시로 Titanic Survivor ML를 활용한 대시보드 주소를 기재하였다.

그대로 따라만해도 어떤 느낌인지 알 수 있을 것이다.

https://towardsdatascience.com/the-quickest-way-to-deploy-your-machine-learning-model-12af348e0783

 

 

 

 

 


나중에 알게 되었는데 단일값 뿐만아니라 불연속형처럼 클러스터링이 가능하다고 한다, 나중에 테스트 해봐야 겠다.

 

 

빠른 요약

1) Tabpy를 설치하면

2) 직접 코드를 쓰거나, 함수를 서버에 게시하여

3) 사용할 수 있다.

 



How to use python script  tableau prep

만일 Prep에서 python script를 사용하려면 아래 게시글을 참조바란다.

https://mrnoobiest.tistory.com/327

 

[tabpy,tableau prep]prep을 사용할때 python script 사용하기(How to use python script in tableau prep) - Tabpy_3

Tableau Prep을 사용할때 tabpy를 활성화 하고, python코드를 .py로 만든뒤 사용하면 prep을 좀더 유의미하게 사용할 수 있다. 이번엔 특정 언어들로 이루어진 데이터를 python코드를 사용해서 번역 후 데

mrnoobiest.tistory.com

 

728x90
반응형