TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 기초>

[파이썬] 시각화 - 타이타닉 데이터셋 활용 seaborn 실습

by 기록자_Recordian 2024. 11. 6.
728x90
반응형
파이썬 시각화 도구 기초 관련 글 모음

 

[파이썬] 지도 시각화 도구 - Folium

[파이썬] 파이썬 시각화 도구 - Seaborn

[파이썬] 파이썬 시각화 도구 - Matplotlib

 

[데이터 시각화 차트 관련 글]

https://modulabs.co.kr/blog/data-visualization/

 

데이터 시각화 차트 디자인에 필요한 사례와 종류 알아보기

다양한 데이터 시각화 유형 중 가장 적합한 형태를 어떻게 선택하면 좋을지 사례를 통해 알아봅니다.

modulabs.co.kr


머신러닝을 데이터 분석 시 유용한 시각화 플롯

 

출처: https://seaborn.pydata.org/

차트 유형 설명
히스토그램 연속형 값에 대한 도수 분포를 나타낸다.
X축 값은 도수 분포를 원하는 연속형 값의 구간.
Y축 값은 해당 구간의 도수 분포(건수)를 나타낸다.
바 플롯 특정 칼럼의 이산 값에 따른 다른 칼럼의 연속형 값(평균, 총합 등)을 막대 그래프 형태로 시각화한다. (수직 막대 그래프 적용 시) X축 값은 특정 칼럼의 이산값, Y축 값은 다른 칼럼의 연속형 값으로 나타낸다
박스 플롯 연속형 값의 사분위 IQR와 최대, 최소, 이상치 값을 시각화한다.
보통 단일 칼럼의 연속형 값에 적용하지만, 이 연속형 값의 사분위를 다른 칼럼의 이산값별로 시각화할 때 사용할 수 있다
바이올릿 플롯 히스토그램의 연속 확률 분포 곡선과 박스 플롯을 바이올린 형태로 함께 시각화.
보통 단일 칼럼의 연속형 값에 적용하지만, 이 연속형 값의 분포를 다른 칼럼의 이산값별로 시각화할 때 유용.
스캐터 플롯(산점도) 2개의 연속형 값들을 X, Y 좌표상의 점으로 시각화하여 해당 값들이 어떻게 관계되어 있는지 나타낸다.
상관 히트맵 다수의 연속형 칼럼들에 대해서 상호 간의 상관 관계를 시각화

 

[Seaborn의 시각화 예시]

 

Example gallery — seaborn 0.13.2 documentation

 

seaborn.pydata.org


시본(Seaborn)

 

시본은 맷플롯립보다 쉬운 구현, 수려한 시각화, 그리고 편리한 판다스(Pandas)와의 연동을 특징으로 하고 있으며, 맷플롯립보다 상대적으로 적은 양의 코딩으로도 보다 수려한 시각화 플롯을 제공한다.

또한 판다스의 칼럼명을 기반으로 자동으로 축 이름을 설정하는 등 편리한 연동 기능을 가지고 있다.

시본은  X축과 Y축으로 구성된 2차원 축에서 데이터를 시각화해주므로 2개의 변수(칼럼)에 대한 정보를 기본적으로 표출해주는데, 시본의 대부분 시각화 함수들은 hue라는 인자를 통해서 또는 플롯의 유형에 따라 연속형 데이터의 정보를 다른 이사현 데이터 값으로 세분화된 정보로 표현할 수 있게 만들어줘서 2개의 변수가 아닌 3개의 변수도 함께 정보로 시각화할 수 있다.

 

[Seaborn 사이트]

 

seaborn: statistical data visualization — seaborn 0.13.2 documentation

seaborn: statistical data visualization

seaborn.pydata.org

 


히스토그램

 

히스토그램은 데이터의 통계적인 분석을 위해 매우 많이 활용되며, 특히 머신러닝 학습 데이터의 중요 피처들 값이 어떠한 분포도를 가지고 있는지 확인하는 것은 모델 성능을 위해 매우 중요하다.

히스토그램은 시본, 맷플롯립, 판다스에서 제공되는데, 막대 차트처럼 보이지만 연속형 값을 범위 또는 구간으로 그룹화해 개별 구간에 해당되는 데이터의 건수를 시각화해준다.

 

시본에서는 히스토그램을 위해 histplot() 또는 displot() 함수 사용을 권장하고 있다.

  • histplot(): Axes 레벨 함수
  • displot(): Figure 레벨 함수

[histplot()]

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

titanic_df = pd.read_csv('C:/Users/niceq/Documents/DataScience/Python ML Guide/Data/01. titanic_train.csv')

plt.figure(figsize=(8,3))

# DataFrame의 칼럼명을 자동으로 인식해서 xleble 값 할당. ylebel 값은 Count로 설정
sns.histplot(titanic_df['Age'], bins=20)
plt.show()

▶ 20개의 bin 구간에 따라 연속으로 이어지 ㄴ막대 그래프 형태의 도수 분포를 가진 히스토그램이 만들어졌다.

 

시본의 많은 시각화 함수들은 판다스 DataFrame과 잘 통합되어 있다. 이들 시각화 함수들은 X축과 Y축 각각에 DataFrame을 칼럼명을 입력받아서 처리할 수 있도록 설계되어 있다.

 

시본의 기본 인자값(data, x, y)을 histplot() 함수에 입력해 다시 시각화하는데, 

  • data: 시각화 대상 DataFrame 객체 (타이타닉 DataFrame 객체변수 titanic_df)
  • x: X축에 사용될 칼럼명 ('Age')
  • y: Y축에 사용될 칼럼명(히스토그램은 기본적으로 한 개의 변수만 시각화 하므로 생략)

이번엔 bins=30으로 구간 개수를 늘리고, kde=True 로 설정해 히스토그램의 연속 확률분포 곡선까지 함께 시각화 해본다.

sns.histplot(x='Age', data=titanic_df, bins=30, kde=True)
plt.show()

 

[displot()]

displot() 함수는 Figure 레벨 함수며, Figure 레벨 함수의 특징은 맷플롯립 API 사용을 최소화하고, 기본 맷플롯립에서 사용하는 기능들을 Figure 레벨 함수의 인자 등으로 대체하게 설계되었다. 그 예로 Figure의 크기는 plt.figure() 로 조절하는 게 아닌, 해당 함수에서 인자로 Figure의 크기를 조절해야 하는 식이다.

 

displot() 함수를 통해 Age 칼럼값의 히스토그램을 시각화해 본다.

import seaborn as sns

# seaborn의 figure 레벨 그래프는 plt.figure()로 figure 크기를 조절할 수 없다
plt.figure(figsize=(8,4))
sns.displot(x='Age', data=titanic_df, kde=True)
plt.show()

▶ plt.figure(figsize=(8,4))를 이용해 가로의 길이를 8, 세로의 길이를 4로 설정하였으나, 오히려 세로가 더 긴 히스토그램이 생성되었다.

 

displot() 함수의 Figure 크기를 조절하기 위한 인자로 height와 aspect가 주어진다.

  • height: 세로(높이)의 크기
  • aspect: 가로와 세로의 배율

width와 같은 별도의 가로(너비) 크기를 설정하는 인자는 제공되지 않고, height * aspect 를 적용하여 자동으로 가로의 크기가 결정된다.

import seaborn as sns

sns.displot(titanic_df['Age'], kde=True, height=4, aspect=2)
plt.show()

▶ 가로 길이가 더 큰 Figure가 만들어졌다.

 


카운트 플롯

 

카운트플롯은 이산형 값의 건수를 막대 그래프 형태로 시각화하며, 주로 카테고리성 칼럼 값별 건수를 시각화하는 데 사용된다. 카운트플롯은 시본의 countplot() 을 사용한다.

 

타이타닉 데이터의 Pclass(선실 등급) 값별 건수 시각화

sns.countplot(x='Pclass', data=titanic_df)
plt.show()


바 플롯(barplot)

 

바 플롯은 막대 그래프 형태의 플롯으로, 간단한 시각화이지만, 2차원 축 기반의 시각화에 널리 활용된다.

X축 값이 이산형 값으로 값의 종류가 너무 많지 않을 때 유용하게 사용될 수 있다.

 

바 플롯은 시본의 barplot() 함수로 간단하게 구현할 수 있으며,

  • data: 시각화 대상 DataFrame 객체 (타이타닉 DataFrame 객체변수 titanic_df)
  • x: X축에 사용될 칼럼명 ('Pclass')
  • y: Y축에 사용될 칼럼명 ('Age')

위의 기본 인자들을 입력하면 자동으로 바 플롯을 시각화 해준다.

 

시본을 이용하여 타이타닉 데이터 세트의 Pclss 1, 2, 3 값 별로 Age 의 평균 값을 바 플롯으로 표현

# 자동으로 xlabel, ylabel을 barplot()의 x 인자값인 Pclass, y 인자값인 Age로 설정
sns.barplot(x='Pclass', y='Age', data=titanic_df)
plt.show()

barplot() 함수는 기본적으로 Y축 값의 평균 값을 나타내는데, 평균 외에도 총합, 중앙값 등을 나타낼 수 있으며 이는 estimator 인자값을 설정하여 변경할 수 있다.

 

barplot() 함수는 수직 또는 수평 막대 그래프를 시각화 선택을 orient 인자로 설정할 수 있는데, orient가

  • v일 경우는 수직(Vertical) 막대그래프
  • h일 경우는 수평(Horizontal) 막대그래프

를 그리며, orient 값을 별도로 설정하지 않을 경우 barplot() 함수는 입력된 X축 값과 Y축 값의 데이터 유형을 판단하여 자동으로 수직 또는 수평 막대 그래프를 그려주지만, X축과 Y값이 모두 숫자형 값이면 수직 막대 그래프를 우선하여 그려준다.

 

바 플롯은 수직 막대 그래프의 경우

  • X축 값을 이산형 값으로 설정하며 이산형 값은 숫자값 또는 문자열값 모두 가능
  • Y축 값을 문자열 값으로 설정하면 안됨. (문자열 값의 평균, 총합은 정보로서 완전히 다른 의미이며, 시각적으로 이해할 수 없기 때문). 만약 Y축 값을 문자형으로 입력하고, X축 값을 숫자형으로 입력하면 자동으로 수평 막대 그래프로 시각화해줌.

barplot() 함수에 x 인자로 Pclass(숫자형), y인자로 Sex(문자열) 을 입력할 경우

### y축을 문자값으로 설정하면 자동으로 수평 막대 그래프 변환
sns.barplot(x='Pclass', y='Sex', data=titanic_df)
plt.show()

▶ 수평 막대 그래프의 X축 값인 Pclass는 1, 2, 3밖에 없으나, 수평 막대 그래프의 경우 X축 값을 연속형 값을 기대하게 되므로 Pclass 값이 평균값으로 만들어져 표현된다. (수직 막대 그래프의 경우 Y축 값이 연속형 값을 기대하게 된다)

 

X축, Y축 모두 이산값을 입력한다면 바 플롯으로 표현되는 정보를 시각적으로 잘못 이해될 수 있기 때문에 바 플롯은 수직 막대 그래프의 경우 Y축 값을 연속형 값으로, 수평 막대 그래프는 X축 값을 연속형 값으로 설정해 줘야 시각적으로 정보가 의미하는 바를 명확하게 파악할 수 있다.

또한 바 플롯 생성 시 X축 값과 Y축 값을 모두 문자열 값으로 입력하면 바 플롯이 의미하는 정보의 표현 의도와 완전히 어긋나기 때문에 barplot() 함수는 오류를 발생시킨다.

 

수직 막대 그래프의 Y축 표현값을 평균이 아니라 총합으로 나타낼 수도 있는데, 이때 estimator=sum 으로 설정하면 된다.

 

선실 등급(Pclass) 별 생존자 수 시각화하기

# estimator=sum 적용하여 평균이 아니라 총합으로 표현
sns.barplot(x='Pclass', y='Survived', data=titanic_df, ci=None, estimator=sum)
plt.show()

 


 

 

 

 


[출처]

파이썬 머신러닝 완벽 가이드

모두의 연구소

https://seaborn.pydata.org/

 

 

 

728x90
반응형