함께하는 데이터 분석

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

데이터분석 공부/Python

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

JEONGHEON 2022. 3. 19. 00:38

안녕하세요!

 

이번에는 Python에서 Seaborn을 활용하여 범주형 변수의 시각화를

 

공부해보겠습니다.

 

라이브러리 실행

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

 

데이터 불러오기

mpg = sns.load_dataset('mpg')

 

1개의 범주형 변수에 대한 시각화

sns.countplot(data = mpg, x='origin')

countplot은 x나 y에 하나의 범주형 변수만 넣으면

 

나머지는 개수로 표현됩니다.

 

sns.countplot(data = mpg, y='origin')

 

mpg['origin'].value_counts()
>>> usa       249
    japan      79
    europe     70
    Name: origin, dtype: int64

'origin'의 개수를 표로 나타낸 것입니다.

 

sns.countplot(data = mpg, x='origin', hue='cylinders')

 

pd.crosstab(mpg['origin'], mpg['cylinders'])

 

 

barplot

sns.barplot(data = mpg, x='origin', y='mpg') #default = mean, ci=95

x축은 origin, y축은 mpg인 barplot입니다.

 

검은 선은 CI 95%를 나타냅니다.

 

mpg.groupby('origin')['mpg'].mean()
>>> origin
    europe    27.891429
    japan     30.450633
    usa       20.083534
    Name: mpg, dtype: float64

groupby를 이용하여 표로 나타낸 것입니다.

 

pd.pivot_table(data=mpg, index='origin', values='mpg') #DataFrame형태로 반환(보기 편리)

pivot_table을 이용하면 DataFrame 형태로

 

groupby를 편하게 볼 수 있죠.

 

sns.barplot(data = mpg, x='origin', y='mpg', estimator=np.sum, ci=None)

estimator=np.sum 인자를 이용해 y값을 총합으로 볼 수 있어요.

 

sns.barplot(data = mpg, x='cylinders', y='mpg', hue='origin', ci=None)

 

mpg.groupby(['cylinders', 'origin'])['mpg'].mean()
>>> cylinders  origin
    3          japan     20.550000
    4          europe    28.411111
               japan     31.595652
               usa       27.840278
    5          europe    27.366667
    6          europe    20.100000
               japan     23.883333
               usa       19.663514
    8          usa       14.963107
    Name: mpg, dtype: float64

 

pd.pivot_table(data=mpg, index='cylinders', columns='origin', values='mpg')

 

boxplot

sns.boxplot(data=mpg, x='origin', y='mpg')

 

origin_desc = mpg.groupby('origin')['mpg'].describe()
origin_desc

 

europe = origin_desc.loc['europe']
europe
>>> count    70.000000
    mean     27.891429
    std       6.723930
    min      16.200000
    25%      24.000000
    50%      26.500000
    75%      30.650000
    max      44.300000
    Name: europe, dtype: float64

df.loc를 이용하여  원하는 행 또는 열 추출

 

Q1 = europe['25%']
Q2 = europe['50%']
Q3 = europe['75%']
IQR = Q3 - Q1
out_max = Q3 + 1.5*IQR
out_min = Q1 - 1.5*IQR
out_max, out_min
>>> (40.625, 14.025000000000002)

IQR을 이용하여 이상치 범위 구하기.

 

violinplot

sns.violinplot(data=mpg, x='origin', y='mpg') #분포까지 보기 쉽게

boxplot보다 분포를 쉽게 볼 수 있는 장점!

 

산점도를 이용한 범주형 시각화

sns.scatterplot(data = mpg, x='origin', y='mpg') #범주형 데이터 표현 적합x

범주형 변수를 scatterplot를 통해 시각화하는 것은 적합하지 않습니다.

 

sns.stripplot(data = mpg, x='origin', y='mpg') #밀도 정도만 알 수 있음

stripplot은 밀도는 알 수 있지만 부족한 것을 볼 수 있죠.

 

sns.swarmplot(data = mpg, x='origin', y='mpg')

swarmplot은 violinplot을 점으로 표현한 것을 알 수 있죠.

 

catplot

sns.catplot(data = mpg, x='origin', y='mpg', kind='swarm') #kind로 변경가능

catplot은 kind인자를 통해 여러 가지 plot을 시각화할 수 있어요.

 

sns.catplot(data = mpg, x='origin', y='mpg', col='cylinders', kind='box') #col로 서브플랏 생성가능

 

sns.catplot(data = mpg, x='origin', col='cylinders', kind='count') #col로 서브플랏 생성가능

col인자를 이용하여 서브플랏도 그릴 수 있습니다.


Copyright

 

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

 

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

부스트코스 무료 강의

www.boostcourse.org