이전 포스팅에서 KNIME에서 Loop 노드가 어떤 역할을 하는지와 Counting Loop Start 노드 및 Flow variable에 대해 알아보았다.
2024.08.28 - [KNIME] - [KNIME] Loop 실습(1)
이어서 다른 loop 노드들도 알아보도록 하겠다.
(사용할 데이터는 이전 포스팅에 첨부되어있다.)
2. Group Loop Start
Group Loop Start는 어떤 Group 별로 반복을 수행할 때 사용하는 노드이다.
예로 제품이 여러개인 데이터에 대해서 각 제품별로 모델을 따로 만들고 싶을 때 활용할 수 있다.
먼저 isExit(하차 여부) 를 기준으로 Group Loop Start 노드를 사용해보도록 하겠다.
옵션창으로 들어가서 isExit 컬럼만 Include에 남겨주고 실행시킨다.
실행 시 첫 번째 Loop에 대한 결과가 나온다.
Group Loop Start 노드의 Flow Variables를 확인해보면 currentIteration은 0이고 그 때의 isExit은 o이다.
isExit 컬럼은 o와 x로만 이루어진 컬럼이므로 o 끼리, x 끼리 Grouping이 되며
첫 번째 loop는 isExit이 o인 데이터가 대상이 된 것을 확인할 수 있다.
Loop End 노드를 붙여주고 실행시켜주면
다음과 같은 결과를 얻을 수 있다.
isExit이 o와 x 뿐이므로 Iteration은 두 번만 돈다.
첫 번째 Iteration은 isExit이 o일때, 두 번째 Iteration은 isExit이 x일때가 대상이된다.
Start 와 End 노드 사이에 아무 노드도 없으므로 대상이 되는 데이터만 불러와졌다.
Loop End노드가 실행된 상태에서 Group Loop Start 노드를 눌러보면 가장 마지막 Iteration의 결과를 확인 할 수 있다.
Flow Variables를 확인해보면 currentIteration이 1이고 그때의 isExit은 x인걸 확인할 수 있다.
이번에는 Group Loop Start 노드를 활용하여 여자들은 여자키 평균값을 빼주고 남자들은 남자키 평균값을 빼주는 작업을 해보도록 하겠다.
동일한 성별 별로 키의 평균값을 구해야 하므로 Group Loop Start 노드에서 gender 컬럼만 Include에 남겨준다.
각 Group 별 키의 평균값을 구해서 빼줘야하므로 Math Formula 노드를 연결한다.
옵션창을 열어서 height에서 height의 평균을 빼주는 수식을 작성한다.
Math Formula 노드 뒤에 Loop End 노드 연결하고 실행하면 다음과 같은 결과를 얻을 수 있다.
(gender 값이 female인 사람들 키의 평균은 168.567이고 male인 사람들 키의 평균은 176.775이다.)
각 gender 별로 여자들은 여자들 키 평균을 뺀 값이, 남자들은 남자들 키 평균을 뺀 값이 new column에 생성되었다.
3. Column List Loop Start
이번에는 Column List Loop Start 노드에 대해 알아보겠다.
여러개 컬럼에 대해 동일한 처리를 해줄 때 사용하는 노드이다.
isExit과 gender 컬럼의 값을 모두 대문자로 변경하는 실습을 해보겠다.
옵션창을 켜서 대상이되는 isExit과 gender 컬럼만 Include에 남겨준다.
Column List Loop Start 노드를 실행하면 첫 번째 loop에 대한 결과가 뜬다.
이때 Flow Variables는 다음과 같다.
첫 번째 loop이므로 currentIteration은 0이고 현재 대상이되는 컬럼은 isExit이다.(currentColumnName)
그래서 실행 결과를 보면 isExit과 gender 중 현재 대상이 되는 컬럼이 isExit이기때문에 gender 컬럼은 빠진 것을 볼 수 있다.
이제 현재 대상 컬럼(currentColumnName)을 대문자로 바꿔주기위해 String Manipulation 노드를 사용한다.
대문자로 바꾸기 위해 upperCase() function을 사용하여 수식을 써주며,
다음 loop에서는 isExit이 아니라 gender가 대상이 되어야하므로 Column 명을 직접 써주는게 아니라 Flow Variables를 활용하여 다음과 같이 써준다.(왼쪽에 currentColunnName 더블클릭)
upperCase($${ScurrentColumnName}$$)
OK 하고 실행시키면 다음과같이 잘못된 결과가 나온다.
원한건 x를 X로, o를 O로 바꿔주는것인데 isExit이라는 문자가 ISEXIT으로 변했다.
Flow Variables를 컬럼명의 의미로 전달해준건데 문자 그대로 받아드렸기 때문이다.
따라서 Column List Loop Start 뒤에 바로 String Manipulation 노드를 붙여서 사용하는게 아니라
현재 대상이 되는 컬럼의 컬럼명을 다른 이름으로 바꿔주고 그 다음에 String Manipulation 노드로 대문자로 변환해주는 방식으로 해야한다.
즉, 다음과같이 Column Renamer 노드를 활용하여 현재 대상이 되는 컬럼명을 먼저 변경한다.
옵션창을 켜서 현재 대상이되는 컬럼명을 Flow Variables로 전달해야 하는데,
기본적으로 옵션창 키면 왼쪽에 이름을 변경할 컬럼을 선택하고 오른쪽에 변경할 이름을 설정한다.
이름을 변경할 컬럼을 Flow Variables로 설정할 때는 아래와 같이 한다.
그리고 대상이 되는 컬럼의 컬럼명을 rename으로 변경한다.
그럼 isExit의 컬럼명이 rename으로 변한걸 볼 수 있다.
이제 String Mainipulation 노드로 rename 컬럼의 값을 대문자로 바꿔준다.
단, Append Column으로 설정하지말고 Replace Column(rename)으로 설정해서 새로운 컬럼을 만드는 대신 rename 컬럼을 그대로 대체해주도록 설정한다.
OK하고 실행 시 아래처럼 rename 컬럼의 값이 대문자로 잘 변경된 것을 볼 수 있다.(o->O, x->X)
이제 다시 rename으로 바꾼 컬럼명을 isExit으로 바꿔준다.
Column Renamer 노드를 사용하며, Flow Variables를 활용한다.
컬럼명을 바꿀 컬럼은 rename 컬럼이며, 바꿀 이름은 Flow Variables로 설정한다.
실행 시 rename 컬럼의 컬럼명이 isExit이 된 걸 확인할 수 있다.
즉, 현재 loop에서 대상이 되는 컬럼의 컬럼명을 rename으로 바꾸고 -> rename 컬럼을 대문자로 바꾼 후 -> 다시 컬럼명을 바꿔주었다.
이제 Loop End 노드를 붙이고 실행해주면 되는데, 그냥 Loop End 노드를 붙이면 다음과 같은 에러가 난다.
에러가 나는 이유는 isExit과 gender 컬럼 중
첫 번째 loop의 대상은 isExit으로, Column List Loop Start 실행 결과에 gender 컬럼은 포함되어있지 않다.
두 번째 loop의 대상은 gender로, Column List Loop Start 실행 결과에 isExit 컬럼은 포함되어있지 않다.
즉, name, isExit, birth, height로 구성된 첫 번째 데이터와
name, gender, birth, height로 구성된 두 번째 데이터의 컬럼이 다르게 구성되어있어 하나로 합칠 수 가 없기때문에 난 에러이다.
이럴 땐 Loop End 노드가 아니라 Loop End (Column Append) 노드를 사용한다.
실행 시 다음과 같이 isExit 컬럼과 gender 컬럼의 값이 모두 대문자로 변경된걸 볼 수 있다.
단, name, birth, height에 대해서는 동일한 컬럼이 중복되어 합쳐졌기 때문에 Column Filter 노드로 제외한다.
옵션창 들어가서 모두 Includes에 넣은 다음 "iter" 검색해서 나오는 모든 노드를 Excludes로 보내주면 된다.
실행 시 다음과 같이 원하는 결과가 된다.
마지막으로 Window Loop Start와 Generic Loop Start에 대해 다음 포스팅에 이어서 작성하도록 하겠다.
'KNIME' 카테고리의 다른 글
[KNIME] Hyper parameter optimization (1) | 2024.09.02 |
---|---|
[KNIME] Loop 실습(3) (0) | 2024.08.29 |
[KNIME] Loop 실습(1) (5) | 2024.08.28 |
[KNIME] String to Date&Time 노드 실습(format 설정) (4) | 2024.08.27 |
[KNIME] 엑셀(xlsx) 파일 읽기 :: Excel Reader (0) | 2024.08.27 |