관리 메뉴

물 만날 물고기

[KNIME] Workflow - Missing Value(결측치) 확인 및 처리하기 본문

KNIME

[KNIME] Workflow - Missing Value(결측치) 확인 및 처리하기

Lung Fish 2023. 1. 28. 12:55

🔍 예상 검색어

더보기

# KNIME 결측치 찾기

# KNIME missing value 찾기

# KNIME Nan 찾기

# KNIME ? 찾기

# KNIME 결측치 시각화

# KNIME 결측치 채우기

# KNIME 결측치 처리하기

# KNIME 결측치 보간하기

# KNIME Statistics

# KNIME Data Explorer

# KNIME Python View

# KNIME Missing Value Column Filter

# KNIME Missing Value

# KNIME GroupBy

# KNIME GroupBy 결측치 확인

# KNIME 타이타닉 데이터 분석


해당 포스팅은 KNIME 데이터분석 솔루션을 활용하여 데이터셋의 결측치를 탐색하고, 이를 보간하는 방법에 대해서 정리한 내용입니다.

 

▼ 문제

다음은 캐글에서 다운받은 타이타닉 데이터 셋입니다. 빨간색으로 표시한 것과 같이 해당 데이터셋에는 다음과 같이 결측치들이 존재합니다. 이러한 결측치들이 어디에 얼마나 존재하고 있는지를 탐색해 보고, 이를 보간하여 결측치가 없는 데이터 셋으로 만들어보세요.

 

 

▼ Workflow

사용 노드 : <Groupby>, <Transpose>, <Statistics>, <Row Filter>, <Data Explorer>, <Python View>, <Missing Value Column Filter>, <Missing Value>

 

KNIME - Missing Value (결측치) 탐색 및 처리를 위한 방법 (Workflow)

 

1. <CSV Reader> 노드를 이용하여 데이터 불러오기

이번 워크플로우에 사용된 데이터는 타이타닉 데이터셋 입니다. 데이터는 캐글에서 다운로드하였고, <CSV Reader> 노드를 이용하여 로컬 파일 형태로 불러오기 하였습니다. (데이터 출처 : Titanic - Machine Learning from Disaster | Kaggle )

 

KNIME - CSV Reader 노드를 이용한 데이터 불러오기

 

2. <Python View> 파이썬 스크립트를 이용하여 결측치 시각화

2.1 먼저 데이터셋의 결측치 존재유무를 대략적으로 확인하기 위하여 <Python View> 노드와 파이썬 스크립트를 이용하여 결측치 시각화를 진행하였습니다. 결측치 시각화 방법은 python 라이브러리 seaborn의 heatmap 방법을 사용하였고, KNIME에서 python 이미지를 출력하는 코드는 아래 코드블록에 정리해 놓았습니다. 참고하시기 바랍니다.

 

KNIME - Python View 노드를 이용한 결측치 시각화 (코드)

 

2.2 <Python View> 노드의 스크립트는 다음과 같습니다.

from io import BytesIO
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# missing value visualization
data = input_table

sns.set(font_scale=1)
plt.figure(figsize=(15, 10))
sns_plot = sns.heatmap(data.isnull(), cbar=False)

# Create plot and write it into the buffer
buffer = BytesIO()
sns_plot.get_figure().savefig(buffer, format='svg')

# The output is the content of the buffer
output_image = buffer.getvalue()

 

2.3 결측치 시각화 결과 'Age', 'Cabin', 'Embarked' 세개의 컬럼에 결측치가 존재할 것으로 확인됩니다.

 

KNIME - Python View 노드를 이용한 결측치 시각화 (결과)

 

 

3. <GroupBy> + <Transpose> 노드를 이용하여 결측치 집계 및 확인하기

3.1 <GroupBy> 노드를 실행하여 줍니다. 데이터셋의 모든 컬럼에 대해서 결측치 여부를 확인할 것이기 때문에 Groups 페이지와 Manual Aggregation 페이지에서 별도의 컬럼을 선택하지 않고, Pattern Based Aggregation 페이지에서 Aggregation methods 방법을 Missing value count로 변경해 줍니다.

(그리고 저 같은 경우는 집계 결과의 가독성을 위해 Column naming 옵션을 Keep original name(s)로 바꾸어 주었는데, 이는 집계 결과에 영향을 주는 옵션이 아니므로 필요에 맞게 선택하여 사용하시면 됩니다.)

 

KNIME - Missing Value (결측치) 확인을 위한 GroupBy 노드 설정방법


3.2 옵션 설정을 완료한 후 <GroupBy> 노드를 실행하면 아래와 같이 컬럼별 결측치 개수를 확인할 수 있습니다.

 

KNIME - Missing Value (결측치) 확인을 위한 GroupBy 노드 실행결과

 

3.3 <Transpose> 노드를 이용하여 행열 전환을 통해 가독성 있도록 테이블을 만들어 보겠습니다. <Transpose> 노드는 별도의 설정을 하지 않고 실행하셔도 됩니다. 실행한 결과 다음과 같이 각 컬럼별 결측치 개수를 확인할 수 있는 테이블이 생성되었고, 저는 개인적으로 KNIME에서 <Statistics> 노드보다 이 방법으로 결측치 확인하는 방법을 더 선호하는 편입니다.

 

KNIME - Transpose 노드로 행열 전환

 

4. <Statistics> , <Data Explorer> 데이터셋 통계정보를 이용하여 결측치 확인하기

<Statistics>, <Data Explorer> 노드를 이용하면 데이터셋의 평균, 최댓값, 최솟값 등과 함께 결측치 정보도 확인할 수 있습니다. 두 개 노드 모두 비슷한 형태로 결과를 출력해주고 있기 때문에 취향에 맞게 사용하시면 될 것 같습니다.

 

KNIME - Statistics 노드를 이용한 통계정보 확인하기

 

KNIME - Data Explorer 노드를 이용한 통계정보 확인하기

 

5. <Missing Value Column Filter> 노드로 결측치 컬럼 제거하기

5.1 <Missing Value Column Filter> 노드는 사용자가 각 컬럼에 포함되어 있는 결측치 비율을 설정하고, 결측치가 설정한 비율 이상일 경우에 데이터셋에서 컬럼을 필터링(제외) 해주는 역할을 합니다. 저는 결측치가 컬럼에 50% 이상일 때, 해당 컬럼은 사용하지 않도록 Missing Value trreshold (in %) 를 50%로 설정하여 실행하였습니다.

KNIME - Missing Value Column Filter 노드 결측치 비율 설정

 

5.2 앞선 노드들에서 결측치를 탐색했던 결과 [ 'Age', 'Cabin', 'Embaked' ] 세 개의 컬럼에서 결측치가 있는 것으로 확인되었는데, <Missing Value Column Filter> 노드를 실행한 결과 891개 데이터 중에서 687개의 결측치가 있었던 ['Cabin'] 컬럼이 삭제되었음을 확인할 수 있습니다.

 

KNIME - Missing Value Column Filter 노드 실행결과

 

6. <Missing Value>

6.1 <Missing Value> 노드를 이용하면 다양한 방법을 이용하여 결측치를 손쉽게 보간할 수 있습니다. 저는 모든 컬럼의 결측치를 일괄적으로 보간할 것이 아니고 [ 'Age', 'Embarked' ] 컬럼의 결측치만 보간하면 되기 때문에 Column Settings 페이지에서 해당 컬럼과 결측치 보간방법을 직접 선택하였습니다.
( [ 'Age' ] 컬럼은 Mean 평균값으로 보간하였고, [ 'Embarked' ] 컬럼은 Most Frequent Value 최빈값으로 보간하였습니다.)

KNIME - Missing Value 노드로 결측치 보간하는 방법



6.2 마지막으로 결측치 보간이 잘 되었는지 확인을 위하여 앞서 사용하였던 <Python View> 노드를 이용하여 결측치 시각화를 진행하였고, 이제 결측치가 더 이상 존재하지 않는 것을 확인할 수 있습니다.

KNIME - Python View 노드를 이용한 전처리 완료 후 결측치 시각화

 

 




이상으로 KNIME을 활용하여 데이터셋의 결측치를 탐색하고, 탐색한 결측치에 대해서 보간하는 방법을 확인해 보았습니다. 워크플로우에 결측치 시각화 하는 방법 중 파이썬 Missingno 모듈을 이용하는 방법도 포함되어 있는데, 이 부분은 분량 관계상 별도로 정리하여 공유해 놓도록 하겠습니다.

 KNIME은 같은 작업, 동일한 결과도 다양한 노드를 활용할 수 있다는 게 큰 장점이라고 생각합니다. 우리가 하는 데이터 분석 방법에 정답이 정해진 것이 아니기 때문에 모든 분들이 자신감을 가지고 데이터 분석을 하셨으면 좋겠습니다.

 


 

# 참고자료
GroupBy – KNIME Community Hub

 

GroupBy

Groups the rows of a table by the unique values in the selected group columns. A row is created for each unique set of values of the selected group column. The…

hub.knime.com


Missing Value – KNIME Community Hub

 

Missing Value

This node helps handle missing values found in cells of the input table. The first tab in the dialog (labeled "Default") provides default handling options for …

hub.knime.com

Missing Value Column Filter – KNIME Community Hub

 

Missing Value Column Filter

This node removes all columns from the input table which contain more missing values than a certain percentage. The filtering is only applied to the columns in…

hub.knime.com