특성 생성
수식을 사용하여 새로운 열을 생성하는 노드입니다.
설명
특성 생성 노드는 기존 데이터를 기반으로 수식을 사용하여 새로운 열을 생성합니다.
@ 기호를 사용하여 기존 열을 참조하고, 다양한 연산자와 함수를 사용하여 새로운 특성을 만들 수 있습니다.
포트 구성
입력 포트
- 데이터셋
출력 포트
- 데이터셋: 새로운 특성이 생성된 데이터셋
속성
새 열 이름
생성될 특성의 이름을 입력합니다.
수식
특성 생성 시 사용할 수식을 입력합니다.
@열이름 형식으로 기존 열을 참조할 수 있습니다.
예시:
@나이 * 2: 나이 열의 값을 2배로@가격 * 1.1: 가격 열의 값에 10% 추가@국어 + @영어 + @수학: 세 과목 점수의 합
수식 문법
지원하는 연산자
사칙연산:
+: 덧셈 (문자열에 사용하면 문자열 연결)-: 뺄셈 (단항으로 사용 시 부호 반전:-@값)*: 곱셈/: 나눗셈
비교 연산: (결과: True / False)
>: 크다>=: 크거나 같다<: 작다<=: 작거나 같다==: 같다!=: 다르다
비트 연산: 비교 결과(True/False)들을 결합할 때 사용합니다.
&: AND (그리고)|: OR (또는)~: NOT (부정)
복합 조건을 만들 때 각 조건은 반드시 괄호로 감싸야 합니다.
(@나이 >= 19) & (@나이 < 65): 성인이고 65세 미만(@점수 >= 90) | (@출석 == 'A'): 점수 90 이상 또는 출석 A~(@상태 == 'inactive'): 비활성 상태가 아님
수학 함수
abs(x): 절댓값pow(x, y): 제곱 (x의 y승)sqrt(x): 제곱근mod(x, y): 나머지 (x를 y로 나눈 나머지)ln(x): 자연로그 (밑이 e)log(x): ln과 동일log2(x): 이진 로그 (밑이 2)log10(x): 상용 로그 (밑이 10)exp(x): 지수 함수 (e의 x승)ceil(x): 올림floor(x): 버림round(x): 반올림
문자열 함수
len(str): 문자열 길이upper(str): 모두 대문자로lower(str): 모두 소문자로substr(str, start, end):start번째 글자부터end - 1번째 글자까지 잘라냅니다 (Python slice 방식, 0부터 시작하며end는 포함하지 않음)replace(str, old, new):old를new로 치환contains(str, pattern):pattern이 포함되어 있는지 (True/False)startswith(str, pattern):pattern으로 시작하는지 (True/False)endswith(str, pattern):pattern으로 끝나는지 (True/False)in(target, val1, val2, ...):target값이 나열된 값들 중 하나와 일치하는지 (True/False)
substr('Hello', 0, 3) → 'Hel' (0, 1, 2번째 글자, 3번째는 포함하지 않음)
조건문
[True일 때 값] if [조건] else [False일 때 값]
예시:
'pass' if @점수 >= 60 else 'fail': 60점 이상이면 'pass', 아니면 'fail''yes' if 2 > 1 else 'no': 결과는 'yes'
조건문은 중첩해서 등급을 나누는 데에도 사용할 수 있습니다.
'A' if @점수 >= 90 else ('B' if @점수 >= 80 else ('C' if @점수 >= 70 else 'F'))
조건이 많을 때는 줄바꿈을 넣어 가독성을 높일 수 있습니다. 줄바꿈은 공백으로 처리되므로 동작에 영향이 없습니다.
'A' if @점수 >= 90
else 'B' if @점수 >= 80
else 'C' if @점수 >= 70
else 'F'
⚠️ 마지막 조건이 거짓일 때의 값(else …)을 반드시 포함해야 합니다. 누락 시 수식 오류가 발생합니다.
문자열 연결
+ 연산자로 문자열을 이어 붙일 수 있습니다. 문자열과 숫자가 함께 있어도 자동으로 문자열로 변환되어 연결됩니다.
@성 + @이름: 성과 이름을 이어 붙임@이름 + '님': 이름 뒤에 '님' 붙이기'코드-' + @id: 숫자 id 앞에 접두어 붙이기 (예:'코드-' + 100→'코드-100')
사용 방법
- 노드를 캔버스에 추가합니다
- 데이터셋을 입력 포트에 연결합니다
- 속성에서 새 열 이름을 입력합니다
- 속성에서 수식을 작성합니다 (
@기호로 기존 열 참조) - 노드를 실행하면 새로운 열이 추가됩니다
수식 예시:
| 목적 | 수식 |
|---|---|
| 총점 계산 | @국어 + @영어 + @수학 |
| 평균 계산 | (@국어 + @영어 + @수학) / 3 |
| 할인가 계산 | @가격 * 0.9 |
| 성인 여부 | '성인' if @나이 >= 19 else '미성년' |
| BMI 계산 | @몸무게 / pow(@키, 2) |
| 절댓값 차이 | abs(@예측 - @실제) |
| 로그 변환 | log(@매출 + 1) |
| 반올림 | round(@평균) |
활용 예시
1. 점수 등급화 (중첩 조건문)
학생들의 점수를 A/B/C/D/F 등급으로 변환합니다.
-
새 열 이름:
등급 -
수식 (여러 줄로 작성):
'A' if @점수 >= 90
else 'B' if @점수 >= 80
else 'C' if @점수 >= 70
else 'D' if @점수 >= 60
else 'F'
2. 복합 조건으로 타겟 고객 분류
20대~30대이면서 구매 횟수가 5회 이상인 고객을 '타겟'으로 분류합니다.
-
새 열 이름:
타겟여부 -
수식:
'타겟' if (@나이 >= 20) & (@나이 < 40) & (@구매횟수 >= 5) else '비타겟'
3. 이메일 도메인 분류
이메일 주소가 특정 도메인으로 끝나는지 확인하여 분류합니다.
-
새 열 이름:
소속 -
수식:
'회사' if endswith(@이메일, '@company.com') else ('학교' if endswith(@이메일, '.ac.kr') else '기타')또는 도메인 부분만 통째로 치환해서 ID만 추출할 수도 있습니다.
replace(@이메일, '@company.com', '')
4. 이름과 직함 결합 (문자열 연결)
이름 뒤에 직함을 붙여 표시용 라벨을 만듭니다.
-
새 열 이름:
호칭 -
수식:
@이름 + ' ' + @직함 + '님'
5. 카테고리 일치 여부 확인 (in 함수)
직업이 전문직(교사, 의사, 변호사) 중 하나인지 확인합니다.
-
새 열 이름:
전문직여부 -
수식:
'전문직' if in(@직업, '교사', '의사', '변호사') else '일반'
6. 표준화된 텍스트 정규화
대소문자가 섞인 데이터를 소문자로 통일하고 공백을 제거합니다.
-
새 열 이름:
정규화_이메일 -
수식:
lower(replace(@이메일, ' ', ''))
7. 이상치 클리핑 (조건문)
값이 100을 초과하면 100으로, 0 미만이면 0으로 잘라냅니다.
-
새 열 이름:
정규점수 -
수식:
100 if @점수 > 100 else (0 if @점수 < 0 else @점수)
8. 결측치 대체 (특정 값 확인)
값이 비어 있거나 특정 문자열인 경우 기본값으로 대체합니다.
-
새 열 이름:
정리된_도시 -
수식:
'미상' if (@도시 == '') | (@도시 == 'N/A') else @도시
9. 카테고리 → 그룹 매핑
분류 값을 더 큰 그룹으로 묶습니다. 같은 결과가 여러 카테고리에 매핑되는 경우 in() 함수로 묶으면 간결해집니다.
-
새 열 이름:
상품_대분류 -
수식:
'의류' if in(@상품_소분류, '셔츠', '바지', '재킷')
else '신발' if @상품_소분류 == '운동화'
else '가방' if @상품_소분류 == '백팩'
else '액세서리' if in(@상품_소분류, '시계', '벨트', '모자')
else '기타'