Seaborn 시각화(2)

막대그래프

다음으로 막대그래프에 대해 알아볼 것이다. 막대그래프에 텍스트를 추가하는 작업을 진행할 것이다. 기본 그래프는 빈도 그래프인 countplot()을 활용하면 구현하기 쉽다.

sns.countplot(x = 'day', data = tips)
plt.show()

요일별로 정렬되어 있어 좋지만 오름차순 또는 내림차순으로 정렬을 할 수도 있다. 이때는 Pandas 문법인 value_counts()를 활용하면 된다.

sns.countplot(x = 'day', data = tips, order = tips['day'].value_counts().index)
plt.show()

이에 더해 각각의 막대에 숫자를 표시할 것이다. 이때는 반복문을 사용하면 구현하기 쉽다.

ax = sns.countplot(x = 'day', data = tips,
                  order = tips['day'].value_counts().index)

for p in ax.patches:
    height = p.get_height()
    ax.text(p.get_x() + p.get_width() / 2., height + 3, height, ha = 'center', size = 9)
ax.set_ylim(-5, 100)
plt.show()

다음으로는 Hue 옵션을 추가해 그룹 간 비교를 하는 그래프를 작성할 것이다. 

ax = sns.countplot(x = 'day', data = tips, hue = 'sex', dodge = True,
                  order = tips['day'].value_counts().index)

for p in ax.patches:
    height = p.get_height()
    ax.text(p.get_x() + p.get_width() / 2., height + 3, height, ha = 'center', size = 9)
ax.set_ylim(-5, 100)
plt.show()

Hue 옵션에서 성별을 의미하는 'Sex' 칼럼만 추가했을 뿐인데 더 많은 정보를 알 수 있다.


상관관계 히트맵

두 개 이상의 변수 간 상호 관련성을 판단하도록 상관관계 분석 및 시각화를 진행할 것이다.

상관관계 분석의 종류는 변수의 특성 및 표본의 개수에 따라 여러 갈래로 나뉜다.

여기서는 수치형 변수로 이뤄진 두 변수 간 연관성을 파악하도록 시각화만 작성할 것이다.

데이터는 자동차 연비와 관련된 데이터 세트인 Mpg 데이터셋을 사용할 것이다.

import numpy as np

mpg = sns.load_dataset('mpg')
print(mpg.shape)

num_mpg = mpg.select_dtypes(include = np.number)
print(num_mpg.shape)

총 변수는 9개이다. 하지만 select_dtypes() 함수를 이용해 변수를 수치형 변수만 추출했다.

num_mpg.info()

결과를 보면 수치형 데이터 타입인 int64, float64만 추출된 것을 확인할 수 있다.

이제 corr() 함수를 사용해 상관 계수를 구한 뒤 Seaborn 라이브러리의 히트 맵 그래프 입력값으로 넣으면 그래프를 작성할 수 있다.

num_mpg.corr()

이제 결과값을 기반으로 히트 맵 그래프를 작성해보자. 숫자가 없는 히트맵은 왼쪽, 숫자가 있는 히트맵은 오른쪽에 배치할 것이다.

fig, ax = plt.subplots(nrows = 1, ncols = 2, figsize = (16, 5))

sns.heatmap(num_mpg.corr(), ax = ax[0])
ax[0].set_title('Basic Correlation Heatmap', pad = 12)

sns.heatmap(num_mpg.corr(), vmin = -1, vmax = 1, annot = True, ax = ax[1])
ax[1].set_title('Correlation Heatmap with Number', pad = 12)

plt.show()

vmin, vmax는 각각 최솟값, 최댓값을 의미하며, annot은 각 Cell의 값 표기 유무를 표기한다.

좀 더 가독성이 좋은 그래프를 작성하기 위해 계단식 그래프로 바꿀 것이다.

이때는 heatmap()에 mask 파라미터를 사용해 입력값을 추가하면 된다.

 

True 값만 heatmap 형태로 추가하면 True 값에 해당하는 Cell만 사라진다.

fig, ax = plt.subplots(figsize = (16, 5))

ax = sns.heatmap(num_mpg.corr(), mask = mask,
                vmin = -1, vmax = 1,
                annot = True,
                cmap = 'BrBG', cbar = True)

ax.set_title('Triangle Correlation Heatmap', pad = 16, size = 16)
fig.show()

처음 작성한 히트 맵보다 더 가독성이 높아진 것을 확인할 수 있다. 동일한 시각화도 각각의 인수를 추가하면서 더욱더 간결하지만 가독성 높은 그래프를 구현할 수 있다.

'파이썬 시각화' 카테고리의 다른 글

Seaborn 시각화(1)  (0) 2021.09.28
Matplotlib 시각화(2)  (0) 2021.09.28
Matplotlib 시각화(1)  (0) 2021.09.27
TAGS.

Comments