관리 메뉴

물 만날 물고기

[KNIME] Workflow - 데이터셋에 특정 문자열로 컬럼을 추가하고 싶을 때 본문

KNIME

[KNIME] Workflow - 데이터셋에 특정 문자열로 컬럼을 추가하고 싶을 때

Lung Fish 2023. 1. 13. 05:23

🔍 예상 검색어

더보기

# KNIME 데이터셋에 특정 문자열 컬럼 추가하기

# KNIME 솔루션 특정값으로 컬럼만들기

# String Manipulation Node

# Rule Engine Node

# Column Expressions Node

# Python Script Node


본 포스팅은 데이터 분석 솔루션 KNIME을 이용하여 기존 데이터셋에 특정 문자열로 컬럼을 추가하고 싶을 때 사용할 수 있는 노드 및 방법에 대하여 정리하였습니다. python 판다스를 이용했을 때, 코드 한줄이면 되는 쉬운 과정이지만, KNIME에서는 다양한 방법으로 진행할 수 있었으므로 참고하시기 바랍니다.

 

 아래 UCI 레드와인 데이터셋 샘플이 있습니다. 그런데 사실 와인 품질 데이터셋은 레드와인과 화이트와인 두 가지 데이터셋이 있는데 현재 데이터셋에는 화이트와인 데이터셋인지 레드와인 데이터셋인지 구분을 할 수가 없습니다. 그래서 [quality] 컬럼 옆에 각 인덱스 모두에 'red'라는 문자가 들어가있는 [type] 컬럼을 만드는 것을 진행해볼 예정입니다.

 

UCI 레드와인 데이터셋 샘플


해당 작업은 아래처럼 파이썬 데이터프레임을 이용했을 때, 코드 한줄로 끝나는 작업이지만, KNIME을 사용해서 데이터를 분석하다보면 어려운 작업보다는 지금처럼 간단한 작업을 처리하는 경우, 그 때 어떤 노드를 쓰면 좋을지 생각나지 않을 때가 종종 있습니다.

import pandas as pd
whitewine = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv", sep=";", header = 0)   

whitewine["type"] = "red"



1. 그럼 데이터셋을 불러오는 과정부터 시작해보록 하겠습니다. <CSV Reader> 노드를 불러와 Configure를 실행합니다.

2. 현재 와인 데이터셋은 UCI 저장소에서 URL 링크를 통해 가져온 데이터셋이며 레드와인 데이터셋을 Read from을 'Custom/KNIME URL'로 변경하고, URL에 데이터셋 링크를 입력합니다. 다음 Column delimiter를 ' ; ' 으로 변경해준 뒤 Apply를 진행하면 레드와인 데이터셋을 불러올 수 있습니다.

 

▶ URL : https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv

 


3. KNIME 노드를 통해 진행할 방법은 4가지 정도를 뽑을 수 있었습니다. 각 노드별로 간단하게 설명드리도록 하겠습니다.

3.1 <String Manipulation> 노드를 활용한 방법입니다. 해당 노드는 엑셀의 left, right함수나 특정 문자를 찾아서 수정하거나 바꿀 때 처럼 노드의 문자열을 조작할 때 사용하는 노드입니다. 해당 노드에서 join() 함수를 이용하는 방법으로 red값이 입력된 컬럼을 추가할 수 있습니다. join함수는 문자열을 결합할 때 사용하는 함수인데, 단일값만 입력해도 해당 문자를 리턴해 줄 수 있습니다.

 

3.1 String Manipulation Node


앞서 설명처럼 Expression에 join('red')를 입력한 뒤, Append Column 에 컬럼명을 'type'으로 입력하고 apply를 실행하면 아래와 같이 [Type] 컬럼에 'white'값이 채워진 열이 새로 생긴 것을 확인할 수 있습니다.

 

3.1 String Manipulation Node 실행결과

 

그럼 다음 노드들 부터는 출력결과는 동일하여 생략하고, 방법들만 설명드리도록 하겠습니다.

3.2 다음은 <Rule Engine> 노드를 사용하는 방법입니다. 해당 노드는 보통 Rule 기반의 조건으로 컬럼을 Replace 또는 Append 할 수 있는 기능을 가지고 있는데, 아래와 같이 'TRUE => red'를 입력해주면 모든 조건이 참값이라는 연산아래에 'red'를 결과값으로 도출해줍니다.

3.2 Rule Engine Node


3.3 <Column Expressions> 노드를 활용해서도 같은 결과를 만들 수 있습니다. 해당 노드는 KNIME에서 자유도가 가장 높은 노드라고 볼 수 있을 것 같습니다. 지금처럼 데이터 TypeOutput Column을 입력해주고, 아래 코드창에 함수 없이 출력을 하고자 하는 값만 입력하면 됩니다. KNIME에서 IF, ELSE 조건이 필요한 경우 많이 사용하는 노드인데 문자열 조작시에도 유용하게 활용할 수 있습니다.

3.3 Column Expressions Node


3.4 앞서 파이썬에서는 코드한줄이면 되는 간단한 작업이라고 언급하였는데 <Python Script> 노드를 사용하는 것도 방법이 될 수 있습니다. 스크립트 창을 실행하고 pandas 모듈을 불러오고 코드를 입력해주면 됩니다. 다만 <Python Script> 노드를 사용할 때는 KNIME의 Preference에서 python 환경을 미리 설정해두어야 되는 점 참고하시기 바랍니다.

 

3.4 Python Script Node


4. 마지막으로 각 노드별로 워크플로우 실행한 결과를 보면 아래 처럼 'red' 가 입력된 [type] 컬럼을 만들 수 있었고, KNIME을 통해서 같은 결과도 다양한 방법으로 만드는 방법을 확인할 수 있었습니다.

 


물론 위 방법들 말고 다른 방법들도 있지만 다소 억지스러운 방법의 노드도 있고 (예를 들면 Numeric Binner 같은 노드로 실수값 컬럼을 아무거나 찾아서 -무한대 ~ +무한대 값에 라벨링을 하는 방법?, R 스크립트 노드를 이용하는 방법, Table을 만들어서 concat하는 방법 등) 있는데 지금 위에서 보여드린 방법이 가장 적절하지 않은가 싶었습니다.

 


 

 이상이며 KNIME에서는 같은 작업도 다양한 방법을 사용하여 진행할 수 있고, 그것에 대한 정답이 정해진 것이 없으니 모든 분들이 자신감있게 데이터 분석을 진행하시면 좋겠습니다.

 

 

해당 내용으로 2편 추가 포스팅이 있습니다. 참고하시기 바랍니다.

[KNIME] Workflow - 데이터셋에 특정 문자열로 컬럼을 추가하고 싶을 때 - 2편 (Constant Value Column 노드)

 

[KNIME] Workflow - 데이터셋에 특정 문자열로 컬럼을 추가하고 싶을 때 - 2편 (Constant Value Column 노드)

🔍 예상 검색어 더보기 # KNIME 데이터셋에 특정 문자열 컬럼 추가하기 # KNIME 솔루션 특정값으로 컬럼만들기 # 단일 상수값 포함한 열 추가 # String Manipulation Node # Rule Engine Node # Column Expressions Node #

lungfish.tistory.com