본문 바로가기
Data Science

범주형 변수 비중 분석, geom_mosaic()

by Jacey312 2023. 12. 31.

Titanic 데이터셋

'Titanic.data'는 타이타닉호 승객에 대한 데이터셋으로, 생존 여부 및 다양한 속성에 관한 정보를 포함합니다. 이 데이터셋은 타이타닉호의 여객들에 대한 기본적인 특성과 생존 여부를 나타내며, 데이터 분석이나 머신 러닝 연습에 자주 사용됩니다. 

 

이번 포스팅에서는 Titanic 데이터셋 중에서 Class(선실 등급), Age(나이)를 기준으로 승객이 생존한 비중을 살펴보도록 하겠습니다. Titanic 데이터셋에서 승객 생존 여부는 Survived 변수에서 0은 사망, 1은 생존으로 표시되고, Class(선실 등급)은 원래 데이터셋 중 Pclass라는 데이터 중 null 값이 있는 것을 삭제한 변수입니다.

 

< 표 1. Titanic 데이터셋 중 시각화에 활용한 변수 >

변수 내용 종류 기타
Survived 0은 사망, 1은 생존 범주형 0을 "No", 1을 "Yes"로 변경
Pclass 1st, 2nd, 3rd, crew(직원) 중 하나로 표시 범주형 null 값을 제외한 변수를 Class 변수로 추가하여 시각화함
Age 나이 수치형(이산형) child와 adult로 구분

 

 

geom_mosaic() 함수, Class별 생존 비중 살펴보기

geom_mosaic() 함수는 ggplot2의 확장 함수로, 모자이크 그림(Mosaic Plot)을 생성하는 데 사용됩니다. 모자이크 그림은 범주형 변수들 간의 관계를 시각적으로 나타내는 효과적인 도구 중 하나입니다. geom_mosaic() 함수를 그리기 위해서는 우선 ggmosaic 패키지를 설치하여 불러와야 합니다.

 

# ggmosaic 패키지 설치
install.packages("ggmosaic")

# ggmosaic 패키지 로드
library(ggmosaic)

 

ggmosaic 패키지를 로드했다면 Titanic.data를 geom_mosaic() 함수에 입력하여 Class 기준의 생존 여부를 확인해보도록 하겠습니다. Class를 X축에 두고 Survived를 Y축에 배치하고 싶다면 아래 코드 중 상측 코드를 이용하고, 그 반대라면 아래측 코드를 이용하면 됩니다.


첫번째 그림은 "Class - Survived" mosaic 으로, 생존 비중이 1등칸(1st)이 가장 높고 2등칸(2nd)에서 3등칸(3rd)으로 갈수록 낮아지는 것을 확인할 수 있습니다.

 

두번째 그림은 "Survived - Class" mosaic 으로, 전체 생존한 사람들 중 2등칸을 제외한 나머지 class 사람들의 수가 비슷한 것을 알 수 있는데 이는 3등칸과 직원들 수가 1등칸에 비해 3배 이상 되기 때문인 것으로 보입니다. 이는 전체 사망자 중 직원과 3등칸 사람 수가 현저히 많은 것을 보고 유추해볼 수 있습니다.

 

# Class - Survived
ggplot(Titanic.data)+ geom_mosaic(aes(x=product(Class), weight=Freq, fill=Survived))

# Survived - Class
ggplot(Titanic.data)+geom_mosaic(aes(x=product(Survived), weight=Freq, fill=Class))

Class-Survived mosaic
Survived-Class mosaic

 

Age별 생존 비중 살펴보기

 

이번에는 타이타닉호의 Age별 생존 비중을 살펴보겠습니다. 먼저, "Class - Age" mosaic을 이용하여 class별 나이 비중을 확인해보겠습니다. 아래 그림을 살펴보면 어린이(child)의 비중이 3등칸에서 가장 많은 것을 알 수 있고, 1등칸과 2등칸의 어린이들은 모두 생존한데 반해 3등칸의 어린이들은 다수 사망한 것을 알 수 있습니다.

 

ggplot(Titanic.data)+ geom_mosic(aes(x=product(Age), conds=product(Class), weight=Freq, 
                                     fill=Survived))

Class-Age mosaic

 

하지만 위의 "Class-Age" mosaic은 class별 너비가 균등 배치되어 있어 class별 인원 차이를 확인하기가 어렵습니다. 만약 class별 인원 차이를 확인하고 싶다면 X축과 Y축의 변수를 바꿔주어 "Age-Class" mosaic을 그려주는 것이 필요합니다. 아래 코드와 같이 변경해주면 class별 인원 비중이 다른 것을 확인할 수 있고, 1등칸과 2등칸의 어린이들이 한 명도 사망하지 않은 내용도 함께 확인할 수 있습니다.

 

ggplot(Titanic.data)+ geom_mosic(aes(x=product(Class), conds=product(Age), weight=Freq,
                                 fill=Survived))

Age-Class mosaic

 

'Data Science' 카테고리의 다른 글

geom_freqpoly vs. geom_density  (0) 2024.01.01
2차원 밀도 시각화, contour 및 rater  (0) 2023.12.31
geom_histogram() 살펴보기  (0) 2023.12.30
geom_point() vs. geom_jitter()  (0) 2023.12.30
대표적인 범주형 plot, geom_bar()  (0) 2023.12.30