FastCampus UpStage AI/Python

데이터 시각화 (그래프 그리기) - Seaborn (2)

하오츠(해석:맛있다) 2024. 10. 2. 16:51

목표 

데이터 시각적으로 그래프화 하자


환경설정
seaborn library,  matplotlib library가 설치된 환경이여야 한다.

 

1. 라이브러리 로드

import matplotlib.pyplot as plt 

import seaborn as sns

 

2. Seaborn 라이브러리가 제공하는 데이터 불러오기 

Seaborn 라이브러리에는 테스트해볼 수 있는 내장 데이터가 있는데, 그중 titanic.csv 를 읽어오자 

 

 

test_data = sns.load_dataset(' titanic ')

test_data.head()

 

3. 산점도

언제 산점도를 사용할까?

우리는 그 답을 그래프를 보면서 확인할 수 있다.

1. 증가관계가 있을때, x 값이 늘어남에 따라 y 값이 늘어나는지 확인하고자 할때,

2. 상관관계가 없을때, x값이 늘어나도 y값은 늘어나지 않는다. 

 

 

1) 기본 도화지 준비

import matplotlib.pyplot as plt
import seaborn as sns

fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)

 

2) 산점도 표시(regplot)

 

test_data = sns.load_dataset('titanic')

sns.regplot(x='age', y='fare', data=test_data, ax=ax1)
sns.regplot(x='age', y='fare', data=test_data, ax=ax2, fit_reg = False)

 

plt.show()

3) 산점도  - 범주형(stripplot, swarmplot)

 

 

stripplot 함수 : 데이터 포인트가 중복되어 범주별 분포를 시각화

  • x축 변수
  • y축 변수
  • 데이터 셋
  • axe 객체
  • hue : 특정 열 데이터로 색상을 구분하여 출력

swarmplot 함수 : 데이터의 분산까지 고려하여 데이터 포인트가 서로 중복되지 않도록 시각화. 즉, 데이터가 퍼져 있는 정도를 입체적으로 파악 가능

  • x축 변수
  • y축 변수
  • 데이터 셋
  • axe 객체
  • hue : 특정 열 데이터로 색상을 구분하여 출력

 

# 그래프 객체 생성 (figure에 2개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
  
sns.stripplot(x='class', y='age', data=titanic, ax=ax1)
ax1.set_title('strip plot')

sns.swarmplot(x='class', y='age', data=titanic, ax=ax2, hue='sex')
ax2.set_title('swarm plot')

 

 

 

4. 히스토그램과 커널 밀도 그래프

히스토그램은 범위가 있는 연속적인 값을 표현할 때 사용합니다. (6~9kg 바벨 10개 범위(6~9), 갯수10)

커널 밀도 그래프는 히스토그램을 부드럽게 하는 메서드라고 할 수 있다. 

 

1) 도화지 준비

fig = plt.figure(figsize=(15,5))
ax1  = fig.add_subplot(1,3,1)
ax2= fig.add_subplot(1,3,2)
ax3= fig.add_subplot(1,3,3)

 
test_data = sns.load_dataset('titanic')
test_data.head()

 

2) 히스토그램 + 커널밀도그래프(distplot) ,히스토그램, 커널 밀도 그래프 

sns.distplot(test_data['fare'], ax = ax1)
sns.distplot(test_data['fare'], kde = False, ax = ax2)
sns.distplot(test_data['fare'], hist = False, ax = ax3)

 

5. 빈도 그래프(countplot, jointplot, pairplot)

1) countplot

- 범주를 특정 hue를 사용해서 특정 인원별로 그래프를 표시한다

import seaborn as sns
import matplotlib.pyplot as plt


fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,3,1)
ax2 = fig.add_subplot(1,3,2)
ax3 = fig.add_subplot(1,3,3)


test_data = sns.load_dataset('titanic')
test_data.head()

# class별 인원 파악
# x축 변수, 데이터 셋, axe 객체(1번째 그래프) 
sns.countplot(x='class', palette = 'Set1', data = test_data, ax= ax1)


# hue 옵션에 'who' 추가 
# x축 변수, 데이터 셋, axe 객체(2번째 그래프)
sns.countplot(x='class', hue = 'who', palette = 'Set2', data = test_data, ax= ax2)


# dodge=False 옵션 추가 (축 방향으로 분리하지 않고 누적 그래프 출력)
# x축 변수, hue, 데이터 셋, axe 객체(3번째 그래프)
sns.countplot(x='class', hue = 'who', palette = 'Set3', dodge = False, data = test_data, ax= ax3)
    

# 차트 제목 표시
ax1.set_title('titanic class')
ax2.set_title('titanic class')
ax3.set_title('titanic class')

 

2) jointplot
- 범주를 산점도와 그래프로 표시한다.

j1 = sns.jointplot(x='fare', y='age', data = test_data)
j1.fig.suptitle('titanic fare - scatter', size = 15)

plt.show()

 

3) pairplot 

- 그리고자 하는 범주의 키워드가 2개일때, 4개로 산점도와 그래프로 표현된다.

 

 

pair_list = test_data[['age', 'fare']]

# 3개의 열이라면 3행 x 3열의 크기로 모두 9개의 그리드 생성
# 각 그리드의 두 변수 간의 관계를 나타내는 그래프를 하나씩 그림
# 같은 변수끼리 짝을 이루는 대각선 방향으로는 히스토그램 시각화
# 서로 다른 변수 간에는 산점도 시각화
sns.pairplot(pair_list)