Module sktmls.utils.logic
Classes
class LogicProcessor
-
상품 선택 로직 등을 프로세스하는 클래스입니다.
아래 operations를 참조하여 json 형식의 로직을 구현하면 됩니다.
기본 문법
기본적으로 JSON 형태의 로직은 아래 포맷을 따릅니다.
{ "operator": [*args] }
각각의 arg는 또 다른 JSON 형태의 로직이 될 수 있으며 recursive하게 프로세스됩니다.
{ "and": [ {"==": [3, 3]}, {">": [ 5, {"max": [3, 10]} ]} ] }
피쳐 참조
피쳐를 참조하는 방법은
{ "var": ["feature_name", 기본값] }
형식입니다.
리스트 또는 딕셔너리 타입의 피쳐 값을 참조하는 경우
{ "var": ["feature_name.0", 기본값] }
{ "var": ["feature_name.key_name", 기본값] }
과 같은 형태로 하위 값에 접근이 가능합니다.
추가 키 참조
Recommendation API v3 이후부터 지원하는 추가 키(세컨 키 등) 리스트는
{ "var": ["additional_keys.0", 기본값] }
와 같이
additional_key.index
포맷으로 접근 가능합니다.연산자
==
: 두 값이 같은 경우 True. 타입을 고려하지 않음===
: 두 값이 같은 경우 True. 타입을 고려함!=
: 두 값이 다른 경우 True. 타입을 고려하지 않음!==
: 두 값이 다른 경우 True. 타입을 고려함<
: 왼쪽 값이 오른쪽 값보다 작은 경우 True<=
: 왼쪽 값이 오른쪽 값보다 작거나 같은 경우 True>
: 왼쪽 값이 오른쪽 값보다 큰 경우 True>=
: 왼쪽 값이 오른쪽 값보다 크거나 같은 경우 True!
: notand
: 모든 args가 True인 경우 Trueor
: 하나 이상의 args가 True인 경우 Trueany
: args[0]의 하나 이상의 element가 True인 경우 Trueall
: arg[0]의 모든 element가 True인 경우 True?:
: args[0]이 True이면 args[1] 반환, 아니면 args[2] 반환is
: args[0] is args[1]if
: args[0]이 True이면 args[1] 반환, 아닌 경우 만약 args[2]이 True이면 args[3] 반환, … , 조건이 모두 False면 args[-1] 반환if_min
: args[0], args[2], args[4]… 중 args[i]가 최소인 경우 args[i + 1] 반환if_max
: args[0], args[2], args[4]… 중 args[i]가 최대인 경우 args[i + 1] 반환if_closest
: args[1], args[3], args[5]… 중 args[0]과 가장 가까운 값이 args[i]인 경우 args[i + 1] 반환if_closest_upper
: args[1], args[3], args[5]… 중 args[0]보다 크면서 가장 가까운 값이 args[i]인 경우 args[i + 1] 반환if_closest_lower
: args[1], args[3], args[5]… 중 args[0]보다 작으면서 가장 가까운 값이 args[i]인 경우 args[i + 1] 반환all_in
: args[0]의 element가 모두 args[1]에 포함된 경우 Trueany_in
: args[0]의 element가 하나라도 args[1]에 포함된 경우 Truein
: 왼쪽 값이 오른쪽 값에 포함된 경우 Truecat
: args들을 문자열 joinjoin
: 리스트 args[0]을 args[1]을 구분자로 하여 문자열로 joinsplit
: 문자열 args[0]을 args[1]을 구분자로 하여 분할+
: args들의 합*
: args들의 곱-
: 왼쪽 빼기 오른쪽. args의 길이가 1인 경우 -args[0]/
: 왼쪽 나누기 오른쪽%
: 왼쪽 나누기 오른쪽한 나머지inner
: arg[0]과 arg[1]의 내적 (둘 모두 1차원 배열인 경우 숫자를 반환하고 2차원 배열인 경우 리스트 반환)exp
: 지수함수 값 반환sigmoid
: Sigmoid 함수 값 반환norm
: norm 값 반환min
: args 중 최소값max
: args 중 최대값argmin
: 최소값을 가지는 인덱스argmax
: 최대값을 가지는 인덱스get
: args[0]의 args[1]번째 element. 딕셔너리 타입의 경우 args[0]의 args[1] 키에 해당하는 값for_get
: args[0] 자료구조 내 모든 element들의 args[1]번째 값을 모아 리스트로 반환한다.int
: int 파싱float
: float 파싱str
: str 파싱list
: args들을 리스트에 넣어 그대로 반환dict
: {args[0]: args[1], args[2]: args[3], …}dict_keys
: 딕셔너리 타입의 args[0]의 키 리스트 반환dict_values
: 딕셔너리 타입의 args[0]의 값 리스트 반환pick
: args[0] 리스트 element 중 args[1]에서 정의한 인덱스만 뽑아냄pick_in
: args[0] 리스트 element 중 args[1]에 존재하는 것들만 필터remove
: args[1]에서 args[0] 값을 가진 element들을 삭제 후 반환remove_empty
: args[0]에서 빈 자료구조나 None인 element들을 삭제remove_duplicated
: 중복된 element들을 삭제. 순서가 앞인 element가 우선 (args[1]: 비교 index. None인 경우 element 자체를 비교).sample
: args[0] 중 args[1]개 만큼 랜덤 추출 (seed: args[2])first
: args[0] 중 첫 args[1]개를 반환replace
: args[2]의 element 중 args[0] 값을 args[1] 값으로 교체하여 반환repeat
: args[0]이 args[1]번 반복되는 리스트 반환range
: range 함수 값 반환len
: args[0]의 길이 반환empty
: args[0]의 길이가 0이면 Trueunique
: args[0] 리스트에서 중복값을 제거merge
: args들을 하나의 리스트로 합침vmerge
: 길이가 같은 리스트 args[0], args[1], args[2]… 의 같은 순서 element들끼리 묶어 반환count
: args의 길이abs
: args[0]의 절대값round
: 반올림 (args[0]을 args[1] 자리까지 반올림)mean
: 평균값 (리스트들이 args로 들어오는 경우 각 element의 평균값을 가지는 리스트 반환)closest
: args[1], args[2]… 중 args[0]과 가장 가까운 값closest_upper
: args[1], args[2]… 중 args[0]보다 크면서 가장 가까운 값closest_lower
: args[1], args[2]… 중 args[0]보다 작으면서 가장 가까운 값weekday
: 요일 인덱스 반환 (월요일 1 ~ 일요일 7)ndays
: 이번 달의 마지막 날짜day
: 오늘 날짜month
: 이번 달year
: 올해hour
: 시minute
: 분second
: 초microsecond
: 마이크로초now
: 현재 시각 반환 (datetime 객체)strptime
: 문자열을 시각으로 변환 (시각 문자열: args[0], 형식: args[1])strftime
: 시각을 문자열로 변환 (datetime 객체: args[0], 형식: args[1])timedelta
: 시간차 객체 반환 (relativedelta 객체) (참조)dt+
: datetime 객체와 relativedelta 객체들의 합을 반환 (datetime 객체)km_to_latitude_degrees
: km 거리를 위도상 각도로 변환 (args[0]: km)km_to_longitude_degrees
: km 거리를 경도상 각도로 변환 (args[0]: km, args[1]: 기준 위도)distance
: 유클리디안 거리 계산 (args: x1, y1, x2, y2)geo_distance
: 위경도 기반 거리 계산 (args: lat1, lon1, lat2, lon2) (단위: km)rand
: 0~1 사이의 난수 (seed: args[0])beta
: 베타 분포를 따르는 random variable (a: args[0], b: args[1], seed: args[2])pf
: 프로파일 API 조회 (api_type: args[0], profile_id: args[1], item_id/user_id: args[2], keys: args[3])with
: args[-1]의 프로세스에 {args[0]: arg[1], args[2]: args[3]…}의 데이터를var
로 참조 가능for
: args[0]를 iterator로 사용하여 args[1] 루프. {"var": "i"}, {"var": "i.0"} 등으로 iterator 참조 가능 (map과 유사)
Methods
def apply(self, tests, data=None, pf_client=None, graph_client=None, dynamodb_client=None)
-
Args
- tests: (dict) 테스트 할 json 형식의 로직
- data: (optional) (dict) 로직에서 참조할 데이터 dict (기본값: None)
- pf_client: (optional) (
MLSProfileAPIClient
) 로직에서 사용할 프로파일 API 클라이언트 (기본값: None) - graph_client: (optional) (
MLSGraphAPIClient
) 로직에서 사용할 그래프 API 클라이언트 (기본값: None) - dynamodb_client: (optional) (
DynamoDBClient
) 로직에서 사용할 DynamoDB 클라이언트 (기본값: None)