이번 포스팅에서는 두개 이상의 다변량 범주형 자료 시각화(visualization with multiple categorical data)의 하나로서 모자이크 그래프 (mosaic chart)를 그리는 방법을 소개하겠습니다.
statsmodels 라이브러리의 statsmodels.graphics.mosaicplot 내 mosaic 클래스를 사용하면 매우 간단한 코드로 그릴 수 있습니다.
import numpy as np import pandas as pd from statsmodels.graphics.mosaicplot import mosaic import matplotlib.pyplot as plt import seaborn as sns plt.rcParams['figure.figsize'] = [12, 8]
|
예제로 사용할 데이터는 Titanic 침몰로 부터 생존/사망자 데이터셋입니다. 몇 년 전에 Kaggle에서 생존 vs. 사망 분류 모델 만들기 competition을 했었던 데이터입니다.
# Getting Titanic dataset url = "https://raw.github.com/mattdelhey/kaggle-titanic/master/Data/train.csv" titanic = pd.read_csv(url) titanic.info() <class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 11 columns):
survived 891 non-null int64
pclass 891 non-null int64
name 891 non-null object
sex 891 non-null object
age 714 non-null float64
sibsp 891 non-null int64
parch 891 non-null int64
ticket 891 non-null object
fare 891 non-null float64
cabin 204 non-null object
embarked 889 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 76.6+ KB
|
모자이크 그래프 시각화에 사용할 3개의 범주형 변수만 남겨놓았으며, 변수 이름과 코드값을 map() 함수를 사용하여 바꾸어보았습니다.
titanic = titanic[['survived', 'pclass', 'sex']] # make new variables of 'survived' and 'pclass' with the different class name titanic["SURVIVE"] = titanic.survived.map({0: "DEAD", 1: "ALIVE"}) titanic["CLASS"] = titanic.pclass.map({1: "1ST", 2: "2ND", 3: "3RD"}) titanic["GENDER"] = titanic.sex.map({'male': 'MAN', 'female': "WOMAN"}) titanic.head()
|
mosaic() 함수를 사용하여 생존여부('SURVIVE')와 티켓 등급('CLASS') 간의 관계를 알아볼 수 있는 모자이크 그래프를 그려보았습니다. 'CLASS' 변수의 코드값을 titanic.sort_values() 로 먼저 정렬을 한 후에 모자이크 그림을 그렸습니다. 1등석('1ST') > 3등석('3RD) > 2등석('2ND')의 순서로 생존율이 높게 나왔군요.
from statsmodels.graphics.mosaicplot import mosaic
mosaic(titanic.sort_values('CLASS'), ['SURVIVE', 'CLASS'], title='Mosaic Chart of Titanic Survivor') plt.show() |
이번에는 생존 여부('SURVIVE')와 성별('GENDER')와의 관계를 알아볼 수 있는 모자이크 그래프를 그려보았습니다. '여성('WOMEN')'의 생존자 비율이 높게 나왔습니다.
mosaic(titanic, ['SURVIVE', 'GENDER']) plt.title('Mosaic Chart of Titanic', fontsize=20) plt.show() |
생존 여부('SURVIVE'), 티켓 등급('CLASS'), 성별('GENDER') 3개 범주형 변수를 모두 한꺼번에 사용해서 모자이크 그림을 그릴 수도 있습니다.
mosaic(titanic.sort_values('CLASS'), ['CLASS', 'SURVIVE', 'GENDER']) plt.title('Mosaic Chart of Titanic', fontsize=20) plt.show()
|
조금 더 가독성을 높이기 위해서 gap argument를 사용하여 변수 내 계급 간에 간극(gap)을 좀더 벌려서 모자이크 그림을 그릴 수 있습니다.
mosaic(titanic.sort_values('CLASS'), ['CLASS', 'SURVIVE', 'GENDER'], gap=0.02) plt.title('Survivor of Titanic', fontsize=20) plt.show()
|
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요. ;-)
'Python 분석과 프로그래밍 > Python 그래프_시각화' 카테고리의 다른 글
[Python] Python에서 R ggplot2 함수로 그래프 그리기 (by PlotNine library) (0) | 2019.01.20 |
---|---|
[Python] 히트맵 그리기 (Heatmap by python matplotlib, seaborn, pandas) (1) | 2019.01.19 |
[Python] 선 그래프 (Line Graph) (3) | 2019.01.16 |
[Python] 산점도 행렬 (Scatterplot Matrix) (4/4) (0) | 2019.01.15 |
[Python] 4개 변수로 점의 크기와 색깔을 다르게 산점도 그리기 (Scatter plot with 4 variables, different size & color) (3/4) (2) | 2019.01.13 |