본문 바로가기
국비 교육/데이터

[데이터 분석] Seaborn

by 육츠 2023. 11. 6.
Contents 접기

Seaborn
matplotlib의 성능 및 디자인을 업그레이드
Pandas의 DataFrame을 대상으로 시각화 한다. EDA(Exploring Data Analysis) 작업에 많이 사용
URL : http://seaborn.pydata.org

 

seaborn: statistical data visualization — seaborn 0.13.0 documentation

seaborn: statistical data visualization

seaborn.pydata.org

 

Seaborn 패키지가 있는지 확인한다.
Seaborn은 아나콘다 패키지를 설치할때 같이 다운되지만, 만약 설치되어 있지 않는다면 아나콘다 프롬포트에서 설치하여 사용하면 된다.

!pip show seaborn

이렇게 써야한다고 정해놓은 것은 아니지만 묵시적으로 모두가 이렇게 별칭을 지어 사용하고 있다.

# 묵시적 별칭
import numpy as np 
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns

Seaborn 은 깃허브에서 데이터를 가져와 사용한다. 쓰임의 형태는 R이나 SQL과 비슷한 것 같다.

# 데이터셋을 준비
# seaborn 데이터셋 위치: https://github.com/mwaskom/seaborn-data
df = sns.load_dataset('mpg') # DataFrame 객체로 데이터셋 반환
# display(df.head()) # head(): DataFrame의 상위 5개(default)를 불러온다.
display(df.head(10))
print(df.shape) # 행과 열의 값을 보여준다.

데이터 요약본 

df.info()
# object: 문자형(범주형)데이터
# int, float : 수치형 데이터

기술통계 확인

df.describe() # 수치형 컬럼에 대해서만 기술통계값 출력

# 범주형 데이터에 대한 기술통계
df.describe(include='object')
# unique = 데이터 셋 내에서 중복 요소 없앰
# top = 가장 많은 빈도수를 가지고 있는 데이터

범주형 데이터에 대한 기술 통계

values_counts()

# df['origin'] # 1차원 벡터 형태
df['origin'].value_counts() # 레코드 별 데이터 개수

 

관계형 그래프
> relplot()
변수간의 상관성을 시각화하는 그래프
매개변수 kind = 'scatter' or kind = 'line'을 통해서 그래프의 종류를 선택할 수 있고, 매개변수를 지정하지 않으면 'scatter'가 기본으로 적용된다.
hue 매개변수를 통해 범주형 데이터별 포인트의 색을 다르게 지정할 수 있다.

sns.relplot(data = df, x ='weight' , y = 'mpg', hue = 'origin') # , kind= 'line') 
# sns.relplot(data= 데이터프레임 객체)
plt.show() # matplotlib 에 속해져 있기 때문에

col 매개변수에 범주형 컬러를 지정하면 해당 컬럼의 범주값만큼 그래프를 분할하여 그려준다.

sns.relplot(data = df, x ='weight' , y = 'mpg',  kind= 'scatter', col = 'origin') 
plt.show()

> regplot()
선형 회귀선을 추가적으로 그림 y = wx + b : 선형회귀식 (w: 기울기, b:절편)

sns.regplot(data= df, x = 'weight' , y ='mpg', marker= '+')
plt.show()

> lmplot()
데이터의 산점도와 함께 선형회귀 모델 적합을 플롯팅한다.

sns.lmplot(data= df , x = 'weight' , y = 'mpg', col = 'origin', truncate= False) 
# truncate= False # 전체 데이터 구간에 맞춰 출력
plt.show()
# 반투명 : 오차범위 내의 신뢰구간

> pairplot():
각 변수들의 분포의 모든 변수들간의 분포관계를 보여준다. 시간이 오래걸림 -> 원하는 컬럼만 추출해서 그리는 경우가 많다.
vars : 보고 싶은 컬럼명을 리스트로 전달

# 수치형 데이터에 대해서만
sns.pairplot(data= df,hue = 'origin')
plt.show()

> lineplot()
연속형 데이터들에 대한 관계를 보여주는데 적합한 그래프
lineplot()은 기본적으로 그래프를 그리기 전에 x값을 기준으로 데이터를 정렬(오름차순)하고 그래프를 그린다.
동일한 x값에 대해 여러개의 y값을 갖는 경우에 각 x값에 대한 평균과 95% 신뢰구간을 평균 위주로 표시한다.

sns.lineplot(data= df, x= 'model_year', y = 'mpg')
plt.show()

> heatmap()
데이터의 상관관계 정도에 따라 색차이를 부여한 그래프

iris = sns.load_dataset('iris')
iris.head()

# 밑에 사진 예시 코드
iris.pivot_table(index='species')# ,aggfunc = ['mean','min','max']) 
# 행의 값으로 해당 데이터셋을 보여줌
# aggfunc= 집계값을 문자열로 리스트 형태

corr = iris.corr(numeric_only= True)
corr # 각 컬럼별 상관계수 1 에 가까울수록 상관관계가 높다

sns.heatmap(corr, annot= True)
plt.show()
# 꽃잎의 길이가 길면 너비도 넓다.

 

분포형 그래프
히스토그램
bins: 최소 최대값 사이 몇 칸으로 나눠서 그릴지 지정(데이터 구간의 개수) binwidth 와 같이 쓸 수 없다.

# sns.displot(data= df, x = 'mpg' , binwidth =1)
sns.displot(data= df, x = 'mpg' , bins =10)
plt.show() # 연비별 도수분포표

# y 파라매터만 지정하면 가로로 된(수평) 히스토그램을 그린다.
sns.displot(data= df, y = 'mpg', bins =10)
plt.show()

barplot()
x 축에는 범주형 변수, y 축에는 연속형 변수를 입력. / x 에 연속형, y 에 범주형을 = 수평 막대 그래프
estimator 의 집계함수 이름을 지정한다. (평균(기본값, np.mean), 합(np.sum), 카운트(len), 중앙값(np.median), 표준편차(np.std))

# style 종류: 'default', 'ggplot', 'classic', 'bmh'
plt.style.use('ggplot')

sns.barplot(data = df, x = 'origin', y = 'horsepower' , estimator= 'median')
plt.show()

boxplot()

sns.set_style('whitegrid')
sns.boxplot(data = df, x = 'origin' , y = 'mpg')
plt.show()

violinplot()
데이터 분포에 따라 통통하고 홀쭉하게 표현한 모습이 바이올린을 닮은 그래프
boxplot 은 이상치를 한눈에 파악하는데 용이하다면, violinplot 은 데이터 분포를 한 눈에 파악할 수 있다.

sns.violinplot(data= df, x ='origin', y ='mpg')
plt.show()

 

'국비 교육 > 데이터' 카테고리의 다른 글

[데이터 분석] Numpy - 2  (0) 2023.11.07
[데이터 분석] Numpy -1  (0) 2023.11.07
[데이터 시각화] matplotlib - 2  (0) 2023.11.04
[데이터 시각화] matplotlib - 1  (0) 2023.11.04