함께하는 데이터 분석

[Python] Seaborn을 활용한 수치형 변수의 시각화 본문

데이터분석 공부/Python

[Python] Seaborn을 활용한 수치형 변수의 시각화

JEONGHEON 2022. 3. 18. 19:16

안녕하세요!

 

오늘은 Python에서 Seaborn을 이용하여 수치형 변수의 시각화를

 

공부해보겠습니다.

 

Seaborn은 Matplotlib보다 고수준으로 코드도 간단하고

 

미학적으로도 괜찮습니다. 그렇다면 Matplotlib보다 Seaborn이 좋다는 것일까요?

 

결론적으로는 두 가지 라이브러리를 다 사용할 줄 알아야 합니다.

 

Matplotlib과 Seaborn을 같이 사용했을 때 Seaborn만을 사용했을 때 보다

 

더 좋은 결과물을 얻어낼 수 있습니다.

이처럼 결국에는 두 가지 라이브러리를 함께 사용하는 것이 효과적입니다.

 

그러면 오늘은 Seaborn을 이용하여 시각화를 시작해볼까요?

 

라이브러리 실행

import numpy as np
import pandas as pd
import seaborn as sns

numpy와 pandas 그리고 여기서 핵심인 seaborn을 불러와줍니다.

 

데이터 불러오기

mpg = sns.load_dataset("mpg")

seaborn에서 제공하는 mpg데이터를 활용하겠습니다.

 

데이터 일부분 불러오기

mpg.head() #5까지가 default

head와 tail은 default값이 5입니다.

 

 

mpg.tail(3)

만약 3행만 보고 싶으면 위와 같이 3을 넣으세요.

 

데이터 요약정보

mpg.info()

mpg, cylinders... 와 같은 독립변수들이 있습니다.

 

여기서 Dtype가 중요한데 float이 연속형 변수

 

int가 이산형 변수로 둘 다 수치형 변수입니다.

 

object는 범주형 변수입니다.

 

결측치 확인하기

mpg.isnull().sum()

변수 중 horsepower변수에 결측치가 6개가 있습니다.

 

데이터 기술통계

mpg.describe()

 

mpg.describe(include = 'object') #범주형 변수 기술통계

describe에 include = 'object' 인자를 넣으면 범주형 변수에 대해서도

 

기술통계 값을 제공해줍니다.

 

unique는 고유한 값의 개수고, top이 빈도수가 가장 높은 것

 

freq는 그것의 빈도수를 나타냅니다.

 

히스토그램

mpg.hist(figsize = (10, 8), bins = 50) #bins = 막대 갯수

 

왜도 구하기

mpg.skew() #양수일 때 오른쪽 부분에 긴 꼬리, 음수일 때 왼쪽 부분에 긴 꼬리, 정규분포 0에 가깝다
>>> mpg             0.457066
    cylinders       0.526922
    displacement    0.719645
    horsepower      1.087326
    weight          0.531063
    acceleration    0.278777
    model_year      0.011535
    dtype: float64

양수일 때 오른쪽 부분에 긴 꼬리, 음수일 때 왼쪽 부분에 긴 꼬리

 

0에 가까울수록 정규분포와 유사한 형태를 갖습니다.

 

첨도 구하기

mpg.kurt() #3보다 작으면 정규분포보다 뾰족한 분포, 3보다 크면 정규분포보다 납작한 분포
>>> mpg            -0.510781
    cylinders      -1.376662
    displacement   -0.746597
    horsepower      0.696947
    weight         -0.785529
    acceleration    0.419497
    model_year     -1.181232
    dtype: float64

값이 3보다 작으면 정규분포보다 뾰족한 분포이고

 

값이 3보다 크면 정규분포보다 납작한 분포를 따릅니다.

 

Seaborn 시각화(1개 변수)

 

displot

sns.displot(data = mpg, x = 'mpg', kde = True) #kde = 선

 

mpg['mpg'].agg(['skew', 'kurt']) #왜도와 첨도 확인
>>> skew    0.457066
    kurt   -0.510781
    Name: mpg, dtype: float64

 

boxplot

sns.boxplot(data = mpg, x = 'mpg') # 사분위수 보기 편함

boxplot에서 처음 선은 min 가장 마지막 선은 max값을 나타냅니다.

 

그리고 가운데 상자의 선은 순서대로 Q1, Q2(median), Q3를 나타냅니다.

 

위의 사진에 보이는 오른쪽 점은 이상치(outlier)를 나타내죠.

 

mpg['mpg'].describe()
>>> count    398.000000
    mean      23.514573
    std        7.815984
    min        9.000000
    25%       17.500000
    50%       23.000000
    75%       29.000000
    max       46.600000
    Name: mpg, dtype: float64

 

sns.boxplot(data = mpg)

 

violinplot

sns.violinplot(data = mpg, x = 'mpg') #boxplot 단점 보완(전체적인 데이터 분포 볼 수 있음)

violinplot은 boxplot에서 분포까지 더해주는 효과가 있습니다.

 

오른쪽 꼬리가 긴 것을 보아 왜도가 양수임을 알 수 있죠.

 

sns.violinplot(data = mpg)

 

Seaborn 시각화(2개 변수)

 

scatterplot

sns.scatterplot(data = mpg, x = 'weight', y = 'mpg', hue = 'origin') #hue 색상 표현

hue = 'origin'인자를 추가하면 origin 개체의 색깔을 나눠서 표시해줍니다.

 

회귀 시각화

sns.regplot(data = mpg, x = 'weight', y = 'mpg')

 

sns.lmplot(data = mpg, x='weight', y='mpg', hue='origin', col='origin', truncate=False) #truncate=False -> 연장선

lmplot은 regplot은 표현할 수 없는 개체마다 다른 서브 플랏을 표현해줄 수 있고

 

확장된 회귀선을 표시해줄 수 있습니다.

 

잔차 시각화

sns.residplot(data = mpg, x='weight', y='mpg')

 

jointplot

sns.jointplot(data = mpg, x='weight', y='mpg')

 

pairplot

sns.pairplot(data = mpg, hue='origin') #시간이 오래걸림, 전체적인 수치변수에 시각화 가능(상관)

 

lineplot

sns.lineplot(data = mpg, x='model_year', y='mpg') #ci=95 default

lineplot은 평균을 이어주는 선 그래프입니다.

 

주변의 그림자 같은 것은 CI이고 default는 95%입니다.

 

relplot

sns.relplot(data=mpg, x='model_year', y='mpg', col='origin', kind='line')

relplot은 col인자로 서브플랏을 그릴 수 있고

 

kind인자를 통해 여러 가지 플랏을 그릴 수 있습니다.

 

상관분석

mpg.corr()

 

sns.heatmap(mpg.corr(), annot=True, cmap='coolwarm', vmax=1, vmin= -1)

 

annot=True인자는 상관계수 숫자를, cmap='coolwarm'은

 

상관계수가 1에 가까울수록 빨간색, -1에 가까울수록 파란색으로 표시해줍니다.


Copyright

https://www.boostcourse.org/ds101/joinLectures/261910

 

모두를 위한 데이터 사이언스

부스트코스 무료 강의

www.boostcourse.org

 

'데이터분석 공부 > Python' 카테고리의 다른 글

[Python] Matplotlib 기본 설정 & 선 그래프  (0) 2022.03.27
[Python] Seaborn을 활용한 범주형 변수의 시각화  (0) 2022.03.19
[Python] Pandas - ②  (0) 2022.01.24
[Python] Pandas - ①  (0) 2022.01.24
[Python] NumPy  (0) 2022.01.23