래피드마이너 셀프스터디 3편 :  데이터 병합 & 행열 전환

데이터의 용량이 커서 분할 저장된 경우,데이터가 각각 수집된 경우 등등여러 개로 분할된 데이터를 합치는 방법데이터의 행과 열을 바꾸는 방법래피드마이너로 실습해 보겠습니다!

저번 포스팅 바로가기 : https://blog.altair.co.kr/rapidminer-self-study-visualization-grouping/


 

데이터 붙이기

– Append

(실습을 위해 마케팅 캠페인 데이터(출처: Kaggle)에서 임의로 일부만 추출하여 구성함)

위의 실습 데이터를 다운로드한 후, 래피드마이너에서 데이터를 로딩하겠습니다.

 

Read Excel 오퍼레이터를 복사하여 시트 개수만큼 준비하고, 각각의 오퍼레이터별로 시트를 지정해 줍니다.

(Parameters 패널의 sheet selection – sheet number/sheet name 으로 엑셀 시트를 지정)

 

Read Excel = sheet number : 1

Read Excel (2) = sheet number : 2

Read Excel (3) = sheet number : 3

 


 

 

 

● Append

현재 실습 데이터처럼 sheet 1, 2, 3의 데이터 구조가 동일할 때 수직 통합(행 + 행)하여 하나의 데이터로 병합할 수 있는 오퍼레이터입니다.

 

※ 데이터 타입 확인

– 컬럼명 & 컬럼 개수 & 데이터 타입이 일치해야 합니다. (컬럼 순서는 상관 없음)

 

세 개의 데이터를 각각 지정한 Read Excel 오퍼레이터의 out 포트(=출력)를 Append 오퍼레이터의 exa 포트(=예제)에 연결하고 mer 포트(=병합)와 res 포트(=결과)를 연결하여 실행합니다.

 

※ 포트 연결 순서 확인 (하나씩 추가하기)

Append의 1번 exa 포트로 연결된 데이터 → 위에 위치

Append의 2번 exa 포트로 연결된 데이터 → 중간에 위치

Append의 3번 exa 포트로 연결된 데이터 → 아래에 위치

↓ 3개의 데이터가 아래(행 단위)로 합쳐진 것을 확인할 수 있습니다. ↓

 

 

데이터 조인 & 집합

– 조인 기능 : Join

– 집합 기능 : Union / Set Minus / Intersect / Cartesioan Product

데이터 조인과 집합은 타이타닉 데이터셋의 일부로 실습해 보겠습니다.

첨부파일

Titanic Dataset.xlsx

파일 다운로드

Personal info 시트에는 타이타닉호 탑승자의 개인정보가 있고, Ticket info 시트에는 티켓정보가 있습니다.

이 두 데이터는 다른 시트에 저장되어 있지만 고유번호인 passenger_id를 통해 같은 탑승자임을 확인할 수 있습니다!

 

 

 

● Join

데이터베이스에서 사용되는 개념인 Join을 래피드마이너에서도 구현할 수 있습니다.

Join관계형 데이터베이스에서 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 작업입니다.

 

* 조인 관련 개념 익히기 : https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/

 

SQL 기본 문법: JOIN(INNER, OUTER, CROSS, SELF JOIN)

조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.OUTER JOIN(외부 조인)은 두 테이블을 조인할 때…

hongong.hanbit.co.kr

 

그럼 Passenger_id를 기준으로 두 개의 데이터(시트)를 하나의 데이터로 조인해 보겠습니다.

Join 오퍼레이터의 lef 포트에는 왼쪽에 올 데이터를 연결하고 rig 포트에는 오른쪽에 올 데이터를 연결합니다.

 

※ 왼쪽 데이터와 오른쪽 데이터 연결 주의!

※ 조인 유형과 key 지정

remove double attributes : 중복된 컬럼 제외

join type : 조인 유형 지정 (inner / left / right / outer)

use id attribute as key : 컬럼의 역할(role)이 id로 지정된 컬럼을 key로 사용

key attributes : key로 사용할 컬럼을 지정 (여러 개 가능)

 

조인 유형

조인 결과

inner join

데이터의 공통된 정보

left join

왼쪽 데이터의 모든 정보 + 왼쪽과 오른쪽의 공통된 정보

right join

오른쪽 데이터의 모든 정보 + 오른쪽과 왼쪽의 공통된 정보

outer join

모든 데이터를 조인

 

* inner join은 공통된 값만 반환하므로 결측값이 발생하지 않음.

* left join / right join / outer join은 결측값 발생 가능성이 높음.

 

remove double attributes 체크하여 중복되는 컬럼(name, pclass, survived)을 제거,

두 데이터에 공통으로 존재하는 값으로만 조인하기 위해서 join typeinner(내부 조인)로 지정,

key attributes passenger_id로 설정합니다.

 


 

 

 

inner(내부조인)으로 설정했기 때문에 Passenger_id를 기준으로 공통된 데이터만 병합되었습니다.


INNER JOIN 결과

 

 

● Union

Union 은 데이터를 단순히 합쳐놓는 합집합의 기능을 수행하는 오퍼레이터입니다.

SQL의 집합 연산자인 UNION ALL(중복된 행을 포함하는 합집합)과 같은 작업을 수행합니다.

 

Read Excel 오퍼레이터 2개의 out 포트(=출력)를 Union 오퍼레이터의 exa 포트(=예제)에 연결하고 uni 포트(=합집합)와 res 포트(=결과)를 연결하여 실행합니다.

 


 

Union은 단순히 행을 합치기 때문에 존재하지 않는 값은 ?로 비워져서 나타나고,

100개의 예제가 있는 데이터 두 개를 합쳤기 때문에 최종 결과는 200개로 나타납니다.

(일반적으로, UNION ALL 집합 연산자는 데이터가 상호 배타적인 경우에 주로 사용함)

 


UNION 결과

 

 

< 데이터 병합 관련 오퍼레이터 차이점 정리>

오퍼레이터

입력

기능

특징

Append

2개 이상

행 단위로 아래에 붙이기

데이터의 구조가 같아야 함

join

2개

key 값을 기준으로 조인

왼쪽/오른쪽 데이터 지정 필요

Union

2개

합집합 (모두 합침)

중복 행이 포함되는 UNION ALL 형태

Intersect

2개

교집합 (공통부분만 반환)

id 역할인 컬럼 필요

Cartesian Product

2개

곱집합 (모든 조합으로 행을 반환)

 

Set Minus

2개

차집합 (A에서 B를 뺀 부분을 반환)

id 역할인 컬럼 필요

 

※ 헷갈릴만한 개념?

① 조인과 집합의 차이점?

= 조인은 key 속성을 필요로 하고 두 개의 데이터를 컬럼 단위로 결합한다.

= 집합은 key 속성이 필요 없으며 두 개의 데이터를 행 단위로 결합한다.

 

 

② Union ALL과 FULL OUTER JOIN의 차이점?

= Union ALL은 행의 합집합으로 위아래로 결합된다.

= FULL OUTER JOIN은 열의 합집합으로 옆으로 결합된다.

 

 

③ Append와 Union의 차이점?

= Append는 데이터 구조(컬럼)가 같아야 한다.

= Union은 컬럼과 데이터 값이 달라도 합치는 것이 가능하다.

 


 

데이터 행열 전환

– Transpose

● Transpose

우리가 사용하는 데이터는 보통 열(컬럼)과 행(데이터)로 이루어져 있습니다.

데이터를 수집해서 사용하다 보면 일부 공공데이터 및 통계표들이 사용 형식에 맞지 않게 기록되어 있는 경우가 종종 있습니다.

 

※ 관계형 데이터베이스에 저장되는 일반적인 데이터 형식

· 열(column, 속성) : 동일한 의미 & 도메인(속성이 가질 수 있는 값의 범위)을 가지는 값들로 구성됨

· 행(row, 튜플) : 하나의 사례(데이터)를 의미함 (행 하나가 한 사람의 정보를 나타냄)

 


 

다음과 같이 데이터가 누워있는 경우를 예로 들어 보겠습니다.

이런 경우에는 일반적인 데이터 형식에 맞게끔 누워있는 데이터를 세우는 작업을 수행해야 합니다.

 

 

Transpose 오퍼레이터를 사용하여 현재의 행 → 컬럼 & 현재의 컬럼 → 행으로 전환해 보겠습니다.

Read Excel 오퍼레이터의 out 포트(=출력)를 Transpose 오퍼레이터의 exa 포트(=예제)로 연결한 후 res 포트(=결과)를 연결합니다.

 


 

실행 결과, 우리가 흔히 아는 데이터의 형태로 행과 열이 전환되었습니다.

 


 


Transpose 오퍼레이터는 단순히 행열 전환만 수행하기 때문에 사진과 같이 컬럼명이 지정되지 않은 형태로 출력됩니다.

첫 번째 행을 컬럼명으로 사용하기 위해 다음과 같은 작업을 추가로 수행해 주었습니다.

 

Transpose 사이에 Write Excel 를 추가하여 Read Excel 오퍼레이터와 연결합니다.

Transpose 오퍼레이터의 출력인 exa 포트와 Read Excel 오퍼레이터를 입력인 fil 포트가 일치하지 않아 에러가 발생하기 때문에 Write Excel 오퍼레이터를 추가로 배치하였습니다.

 


 

Read Excel 오퍼레이터의 파라미터를 다음과 같이 조정합니다.

first row as names (첫 행을 컬럼명으로 사용) 체크 해제

annotations 을 클릭하여 첫 행(1)을 Name으로 지정

 


 

 

실행 결과, 첫 번째 행이 컬럼명으로 변경되었지만 기존의 컬럼(att_1 ~ id)이 첫 번째 행으로 인식되고 있습니다.

 

Filter Examples Range 오퍼레이터를 사용하여 인덱스 범위 지정을 통해 첫 번째 행을 제외시킵니다.

first example을 2번째 행으로 지정

lastt example을 10번째 행으로 지정

이렇게 지정하면 1번 행이 제외되고, 2번 행부터 10번 행까지를 데이터로 반환하게 됩니다.

 


 

위의 과정을 모두 연결하여 실행하면 컬럼명이 제대로 지정된 데이터를 확인할 수 있습니다!

 

 

 


 

다음 포스팅을 기대해주세요!