데이터분석 공부/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