본문 바로가기
Tableau 흡수내용

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

by Mr.noobiest 2023. 10. 10.

Tableau Prep을 사용할때 tabpy를 활성화 하고, python코드를 .py로 만든뒤 사용하면 prep을 좀더 유의미하게 사용할 수 있다.

 

이번엔 특정 언어들로 이루어진 데이터를 python코드를 사용해서 번역 후 데이터로 추출하는 prep을 만들어 볼 것이다.

 


 

필요한것 : 1) 우선 tabpy 서버가 활성화 되있어야 한다.
설치 방법 : cmd / terminal 
      - pip install tabpy
      - tabpy

위의 순서대로 명령어를 실행하면 localhost:9004에 기본적으로 tabpy가 설치되어 있을 것이다.

 

      - nohup tabpy & 

위 명령어를 실행하면 백그라운드에 서버(컴퓨터)를 끄지 않는한 tabpy가 꺼지지 않도록 할 수 있다.


아래 이미지 처럼 되어 있으면 정상적으로 설치된것이다, 안될경우 tabpy의 환경 변수를 변경하도록 하자.

tabpy가 정상적으로 실행중이다.

 

 


2) Prep에서 Tabpy와 연결이 되어 있어야 한다.

도움말(help) -> 설정 및 성능(Settings and Performance) -> Analytics 확장 프로그램 연결 관리(Manage Analytics Extension Connection)으로 이동하여 tabpy를 연결하면 된다.

 


3) 스크립트를 작성하자. Python코드로 .py 형태로 저장하면 된다.

3-1) 사용한 데이터는 .xlsx이고 아래처럼 각기다른 언어로 이루어진 [Prodcut] 컬럼이 있다고 하자.

Product -> 번역(translate) -> Prdocut_trans라는 컬럼에 영어로 번역된  값으로 추출할 것이다.


결과 예시

 

 


Tableau Prep script 흐름 생성 시 사용할 .py의 전문

import pandas as pd
from googletrans import Translator

#여기에 내가 원하는 동작을 하는 함수를 넣어주면 된다. df는 자동으로 input 데이터를 가져온다.
#또한 return df에 별다른 동작을 하지 않아도 알아서 get_output_schema가 실행되어 return된 df를 prep에 사용할 수 있는 형태로 가공한다.
def translate_product(df):
    translator = Translator()
    df['Product_trans'] = df['Product'].apply(lambda x: translator.translate(x, dest='en').text)
    df['Language'] = df['Product'].apply(lambda x: translator.detect(x).lang)
    return df

def get_output_schema():
    return pd.DataFrame({
        'Product': prep_string(),
        'Product_trans': prep_string(),
        'Language': prep_string()
    })

 

여기서 중요한 것이 get_output_schema이다. 무조건 있어야 하는 함수로,

Prep에서 자동으로 해당 함수를 가져와서 return df를 prep에서 사용가능한 형태로 가공하는 함수다.

df는 별도로 지정을 안해줘도 input(입력)을 알아서 가져온다.

 


4) 위 python 코드를 Product_trans.py로 저장해준다.

5) Prep에서 script를 흐름을 만들어주고 아래와 같이 세팅해준다.

 

Function Name은 .py에 입력한 함수를 넣어주면 된다.

 


결과

위에서는 단순하게 번역하는 함수를 사용하였지만, ML이나 다른 함수들을 사용하면 데이터를  여러방법으로  전처리할 수 있다.

 

 

끝.

728x90
반응형