본문 바로가기

데이터 분석/파이썬

5-4) 범주형 변수 분석

#0. 준비단계 : 데이터셋 로드 및 라이브러리 import

 

- 라이브러리 불러오기

 

-seaborn에 내장된 데이터셋 'mpg' 로드


 

#1. Count : 각 범주별 빈도수 세기

 

 

-1개 변수의 빈도수 => series

: 변수. value_counts()

 

-2개 변수 빈도수 => table

: 데이터셋. crosstab( 변수1, 변수2)

df['origin'].value_counts()
pd.crosstab(df['origin'], df['cylinders'] )

 

- 빈도수 그래프=> countplot

: 데이터셋. countplot( data=데이터셋, x= 변수1)

 

#옵션

- hue : 범주별로 다른 색상 표현

 


#countplot ->origin 빈도수 시각화 하기

sns.countplot(data=df, x='origin')
#2개 이상의 빈도수
#origin 빈도수 시각화 하고 cylinders로 다른 색상으로 표현

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

 


- 2. 두 변수의 관계

 

# 막대 그래프=> barplot

: 데이터셋. barplot( data=데이터셋, x= 변수1, y=변수2)

 

#옵션

- estimator  = np.mean /np.sum 등 값 지정 가능

- ci : 신뢰구간 / = 'sd' 지정하면 표준편차

 

ex)

sns.barplot(data= df, x='origin', y='mpg', estimator=np.mean , ci='sd')

 

#groupby  = > series

: 데이터셋. groupby('기준')

 

-> 슬라이싱을 통해 원하는 열만 추출 가능

-> 메소드 체이닝으로 .sum / ,mean등의 통계 가능

 

ex)

df.groupby('origin') ['mpg']. mean()
df.groupby(['cylinders','origin'])['mpg'].mean().unstack()

 

# pivot_table  = > series

: pd. pivot_table(data = 데이터셋, index= '열1', values = '열2')

-> table로 나타남

 

 

ex)

index = origin / values = mpg
pd.pivot_table(data=df, index='origin', values='mpg')
pd.pivot_table(data=df, index= ['cylinders''origin'], values= 'mpg')

#3. boxplot 으로 이상치 구하기

 

=> outer(이상치)는 각 minumum과 maximum 밖에 있는 숫자들을 뜻함

 


예제 : origin에 따른 mpg 값을 구하는데 있어 이상치를 구해보자!

 

먼저 boxplot을 나타내 보면

 

이상치가 존재함을 알 수 있다.

 

그럼 어떻게 그 기준을 구할 수 있을까?

 

1단계 : 묶을 데이터 변수 파악

>> df.groupby('origin').describe()

=> 여기서 우린 25%, 50%, 75%의 행을 사용할 거임

=> 우선 mpg 만 슬라이스해서 저장해보자

 

 

2단계 : 관계를 파악할 변수의 기술통계값 저장

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

 

 

3단계 : 각 사분위수와 IQR 구하기

#IQR, 이상치를 제외한 최댓값, 최솟값 구하기

europe = origin_desc.loc['europe']
Q3 = europe['75%']
Q1 = europe['25%']
IQR = Q3-Q1
OUT_MAX = Q3+1.5*IQR
OUT_MIN = Q1 -1.5*IQR
 

=> OUT_MAX와 OUT_MIN 밖에 있는 수가 이상치

 


#4. 산점도로 범주형 변수 시각화하기

- scatterplot
- stripplot
- swarmplot
- catplot
 
 

# sns.scatterplot ( data = 데이터셋,  x = 변수1 , y = 변수2)  // 점그래프

 

ex)

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

# sns.stripplot ( data = 데이터셋,  x = 변수1 , y = 변수2)  // 점그래프 흩뿌리기

 

ex)

sns.stripplot(data=df, x='origin', y='mpg', hue='origin')

# sns.swarmplot ( data = 데이터셋,  x = 변수1 , y = 변수2)  // 점그래프 분포 표시

 

ex)

sns.swarmplot(data=df, x='origin', y='mpg', hue='origin', size=3)
#size : 마커의 크기 표시
#hue : 각 범주별 색깔 표시

# sns.catplot ( data = 데이터셋,  x = 변수1 , y = 변수2)  // 점그래프 분포 표시

=> kind로 종류 지정 가능(기본 : scatter)

 

#옵션

col : 서브플롯 분기 기준 지정 가능

col_warp : 한 줄에 보여주는 그래프 개수

 

 

ex)cylinder 별 origin-mpg의 관계

sns.catplot(data=df, x='origin', y='mpg', col = 'cylinders', col_wrap=3)
sns.catplot(data=df, x='origin', y='mpg', col = 'cylinders', col_wrap=3, kind='box')
sns.catplot(data=df, x='origin', y='mpg', col = 'cylinders', col_wrap=3, kind='violin')
sns.catplot(data=df, x='origin',  col = 'cylinders', col_wrap=3, kind='count')