본문 바로가기

Code/Phyton

pandas/Textual Categorical-Features/ordinal/nominal

Textual Categorical-Features

데이터의 분석방식은

데어터 셋이 순서자료인지 아니면 명목자료인지에 따라(ordinal or nominal) 분류된다.

 

ordinal

데이터가 순서자료일때는

증가형태의 정수를 설정하면된다.

만일 데이터가 설정된 정수형에 해당하지않는다면

'-1'로 표기될 것이다.

 

 

>>> import pandas as pd
>>> ordered_satisfaction = ['Very Unhappy', 'Unhappy', 'Neutral', 'Happy', 'Very Happy']
>>> df = pd.DataFrame({'satisfaction':['Mad', 'Happy', 'Unhappy', 'Neutral']})
>>> df.satisfaction = df.satisfaction.astype("category",
  ordered=True,
  categories=ordered_satisfaction
).cat.codes
	
>>> df
   satisfaction
0            -1
1             3
2             1
3             2

 


이와반대로
nominal

데이터가 명목자료인경우 두가지 경우가 존재한다.

첫번째는 위와 같은 방식으로 진행하는 경우이다.

적은양의 데이터를 빠르게 분류하고 싶은 경우

다음 방식은 유용하다.

>>> df = pd.DataFrame({'vertebrates':[
...  'Bird',
...  'Bird',
...  'Mammal',
...  'Fish',
...  'Amphibian',
...  'Reptile',
...  'Mammal',
... ]})

# Method 1)
>>> df['vertebrates'] = df.vertebrates.astype("category").cat.codes
	
>>> df
  vertebrates  vertebrates
0        Bird            1
1        Bird            1
2      Mammal            3
3        Fish            2
4   Amphibian            0
5     Reptile            4
6      Mammal            3

 

물론 이러한 방식은 데이터 양이 커지면 반드시 문제가 생긴다.

 

따라서 이러한 문제를 방지하기위해서

다음과 같은 

individual boolean features의 특징을 이용한다.

# Method 2)
>>> df = pd.get_dummies(df,columns=['vertebrates'])
	
>>> df
   vertebrates_Amphibian  vertebrates_Bird  vertebrates_Fish  \
0                    0.0               1.0               0.0   
1                    0.0               1.0               0.0   
2                    0.0               0.0               0.0   
3                    0.0               0.0               1.0   
4                    1.0               0.0               0.0   
5                    0.0               0.0               0.0   
6                    0.0               0.0               0.0   
	
   vertebrates_Mammal  vertebrates_Reptile  
0                 0.0                  0.0  
1                 0.0                  0.0  
2                 1.0                  0.0  
3                 0.0                  0.0  
4                 0.0                  0.0  
5                 0.0                  1.0  
6                 1.0                  0.0  

 

boolean features를 이용하여

0은 불포함, 1은 포함으로 표시가능하다.

 

Pandas .get_dummies() 방식은 

single, nominal의 특징을 multiple, boolean 으로 변환시켜준다.

이는 Method #1에서의 에러를 해결해주는 강력한 방식이다.