KNIME

[KNIME] Loop 실습(1)

슈퍼짱짱 2024. 8. 28. 11:20
반응형

KNIME 노드에 loop를 검색하면 다양한 노드들이 나온다.

 

loop 검색

 

오늘은 이 Loop 노드들에 대해서 알아보고 실습해보겠다.

 


 

Loop 노드는 이름에서 알 수 있듯이 뭔가를 반복적으로 수행하는 노드이다.

Loop Start 노드와 Loop End 노드가 짝꿍이며, 그 사이에 들어간 노드들을 반복 수행하는 역할을 한다. 

 

Loop Start, End 노드 예시

 

Loop Start 노드도 종류가 여러개이고 Loop End 노드도 종류가 여러개인데 

어떤 기준으로 반복하느냐에 따라 종류가 나뉜다.

 

예를 들어 그냥 n번 반복 수행하고 싶으면 Counting Loop Start 노드를 사용하고

여러 컬럼들에 동일한 처리를 해주고 싶으면 Column List Loop Start 노드를 사용한다.

 

Loop Start 노드가 더 종류가 많고 Loop End는 따로 종료에 대한 조건을 추가해줘야 하는게 아니라면 그냥 Loop End 노드를 사용하는 경우가 많다.

 

Loop End 노드

 

본 포스팅에서는 

1. Counting Loop Start

2. Group Loop Start

3. Column List Loop Start

4. Window Loop Start

5. Generic Loop Start

+

6. Loop End

7. Loop End (Column Append)

8. Variable Condition Loop End 

 

노드들에 대해 알아보고 Flow variable에 대해서도 알아보도록 하겠다.

 


 

실습에 사용할 데이터는 다음과 같다.

 

9주차loop실습데이터.csv
0.00MB

 

 

csv 확장자이며, 11개의 행과 5개의 열로 이루어진 런닝맨 멤버에 대한 데이터이다.

하차한 멤버도 포함되어있으며, isExit 열로 하차여부를 구분한다.

 

실습 데이터

 

 

각 열의 의미는 다음과 같다.

 

컬럼명 설명
name 이름
isExit 하차여부(하차시 o)
gender 성별
birth 생년월일
height

 


 

Loop 실습에 앞서서 CSV Reader 노드로 해당 데이터를 불러오고 String to Date&Time 노드로 birth 컬럼의 타입을 바꿔준다.

(String to Date&Time노드에 대한 설명은 직전 포스팅에 있다.)

 

String to Date&Time 옵션은 다음과 같이 설정한다.

 

String to Date&Time 옵션 설정

 

 

11개의 행과 5개의 열이 있으며, birth 컬럼의 type이 Date이면 실습 준비 완료이다.

 

Loop 실습 준비

 


 

1. Counting Loop Start 

 

가장 먼저 

Counting Loop Start 노드에 대해 알아보겠다.

 

Counting Loop Start

 

 

String to Date&Time 노드에 연결해주고 Counting Loop Start 노드의 옵션창을 들어가면 Number of loops를 지정하는 옵션만 뜬다. 

즉, 지정해준 숫자만큼만 반복하는 노드이다.

아래 처럼 10으로 지정하면 10번 반복 수행한다.

 

Counting Loop Start 옵션창

 

 

다음과 같이 Counting Loop Start 바로 옆에 Loop End를 붙이고 Loop End 노드를 실행하면

 

 

Loop End 노드에 반복의 결과가 쌓인다.

Start 와 End 사이에 아무노드도 붙이지 않았기 때문에 현재는 그냥 전체 데이터를 10번 불러오는 결과가 떨어진다.

 

맨 오른쪽에 Iteration 컬럼이 생성되고, 해당 데이터가 몇 번째 반복의 결과인지 알 수 있다.

RowID로도 몇 번째 반복의 결과인지 알 수 있는데, 원래 RowID에 #으로 몇 번째 loop인지 알려준다.

 

Loop End 결과

 

11건의 데이터를 10번 불러왔기 때문에 총 110건의 데이터가 생성되었다.

Iteration은 0부터 시작해서 9까지의 값인 것을 확인할 수 있다. 

 


 

모든 노드에는 Flow variable이라는게 있는데

노드 내에서 동적으로 관리할 수 있는 변수를 의미한다.

 

예를 들어서 Loop 노드로 뭔가를 반복하는데, 매 반복 마다 옵션을 다르게 설정하고 싶다면 Flow variable로 매 loop마다 다른 옵션값을 전달할 수 있다.

 

Counting Loop StartFlow variable은 아래와 같다.

 

Counting Loop Start

 

Counting Loop Start 노드의 결과창에서 Flow variables를 클릭하면 확인할 수 있다.

 

maxIterations는 최대 반복 횟수를 의미한다.

앞서 Number of loops 옵션을 10으로 지정해줬기때문에 value에는 10이 들어가있다.

 

currentIteration은 현재 몇 번째 반복중인지를 알려준다.

Loop End를 실행함으로써 마지막 Loop에 도달했기 때문에 9로 되어있다.

 

Loop End 노드 실행을 취소하고 

 

Loop End 실행 취소

 

Counting Loop Start 노드만 다시 실행하면 첫 번째 loop 실행 결과를 확인 할 수 있는데, 

이 때 Flow variables를 확인해보면 currentIteration이 0으로 되어있다.

 

Counitng Loop Start

 

 

 

 

이 Flow variable을 활용해서 새로운 변수를 만들거나 있던 변수에 더하거나 빼는 등 계산도 해 줄 수 있는데

height컬럼에 currentIteration을 더해서 새로운 컬럼을 만들어보겠다.

 

Counting Loop Start와 Loop End 사이에 Math Formula 노드를 추가한다.

 

Math Formula 노드 추가

 

 

Math Formula 노드의 옵션창을 켜보면 다음과 같다.

 

Math Formula 옵션창

 

왼쪽에는 수식에 사용할 수 있는 변수 및 이전 노드에서 넘겨준 Flow variable에 대한 List가 있다.

Math Formula는 수치형 컬럼에만 적용할 수 있기 때문에 Column List에는 heigth 컬럼만 존재한다.

 

height 컬럼에 currentIteration을 더해줄거기 때문에 Expression에 다음과 같이 작성한다.

 

$height$ + $${IcurrentIteration}$$

 

왼쪽에서 height 더블클릭하고 "+" 하고 다시 왼쪽에서 currentIteration 더블클릭해주면 된다.

 

Math Formula

 

그리고 Loop End 노드를 실행해주면 10번을 반복하면서 height에 currentIteration값이 더해진 new column이라는 이름의 컬럼이 새로 생성된다.

 

첫 번째 loop 실행 결과

 

마지막 loop 실행 결과

 

첫 번째 loop때는 currentIteration이 0이므로 height에 0을 더하면 new column과 height의 결과가 동일하다.

마지막 loop때는 currentIteration 값이 9이므로 height에 9를 더한 값이 new column이 된다.

 

즉, Flow variable은 각 노드들 내에서 관리되는 어떤 값들을 의미한다.

 


 

Group Loop Start부터 다음 포스팅에 이어서 작성하도록 하겠다.

 

반응형