728x90
연속 데이터를 일정한 구간 (bin) 으로 나눠서 분석하는 것이 효율적인경우가 있다.
가격, 비용, 효용 등 연속적인 값을 일정한 수준이나 정도를 나타내는 이산적인 값으로 나타내어 구간별 차이를 드러내는 것
구간 분할
- 각 구간을 범주형 이산 변수로 변환하는 과정을 구간 분할(binning)이라고 한다.
np.histogram
bins = 구간 갯수, 반환값 -> count = 각 구간에 속하는 값의 개수
bin_dividers = 경계값 리스트
import numpy as np
# np.histogram 함수로 3개의 bin으로 구분할 경계값의 리스트 구하기
count, bin_dividers= np.histogram(df.horsepower, bins =3)
print(count, bin_dividers)
<결과>
[257 103 32] [ 46. 107.33333333 168.66666667 230. ]
데이터 구간 분할
pd.cut(x , bins, labels, include_lowest)
# 데이터 구간 분할
# pd.cut(x , bins, labels, include_lowest)
bin_names = ['저출력','보통출력','고출력']
df['hp_name'] = pd.cut(x = df['horsepower'], # 데이터
bins = bin_dividers, # 경계값 리스트
labels = bin_names, # 경계 내 이름
include_lowest = True)# 첫 경계값 포함
df[['horsepower', 'hp_name']].head(15)
<결과>
horsepower hp_name
0 130.0 보통출력
1 165.0 보통출력
2 150.0 보통출력
3 150.0 보통출력
4 140.0 보통출력
5 198.0 고출력
6 220.0 고출력
7 215.0 고출력
8 225.0 고출력
9 190.0 고출력
10 170.0 고출력
11 160.0 보통출력
12 150.0 보통출력
13 225.0 고출력
14 95.0 저출력
더미변수
카테고리를 나타내는 범주형 데이터를 회귀분석 등 머신러닝 알고리즘에 바로 사용할 수 없는 경우가 있다.
컴퓨터가 인식 가능한 입력값으로 변환해야한다.
더미변수로 숫자 0 또는 1로 표현되는 더미 변수를 사용한다. -> 어떤 특성이 있는지 없는지 여부만 표시
이처럼 범주형 데이터를 컴퓨터가 인식할 수 있도록 숫자 0과 1로만 구성되는 원핫벡터로 변환한다고 해서 원핫인코딩이라고도 부른다.
option : prefix='컬럼명' -> 컬럼명_저출력
drop_first=True : 만약 남성, 여성을 더미 변수로 만들 때 여성 컬럼이 1이면 여성을 의미 0이면 남성을 의미하기 때문에 일부러 남성 열을 만들 필요가 없다. 그렇기 때문에 각 더미 변수에서 하나씩 지워야 하는 것이 좋다.
# 카테고리를 나타내는 범주형 데이터를 회귀분석 등 머신러닝 알고리즘에 사용할 수 없는 경우가 있다.
# 더미 변수를 이용하여 원핫인코딩 진행
horsepower_dummies = pd.get_dummies(df['hp_name'])
horsepower_dummies
<결과>
저출력 보통출력 고출력
0 0 1 0
1 0 1 0
2 0 1 0
3 0 1 0
4 0 1 0
factorize
개체를 열거형 또는 범주형 변수로 인코딩
예제코드)
학교명 지역 설립구분 1학년 2학년 3학년 4학년 5학년 6학년 특수학급 순회학급 학급당학생수 년도 계(남) 계(여) 총계 남-여 남녀성비(A÷B×100)
가락초등학교 부산광역시 공립 1 1 1 1 1 1 1 0 8.14 2021 22 35 57 -13 63.0
codes , uniques = pd.factorize(df['설립구분'])
print(codes,uniques)
<결과>
[0 0 1 ... 1 1 1] Index(['국립', '공립', '사립'], dtype='object')
# 설립구분 맵핑
df['설립구분_매핑']=df['설립구분'].factorize()[0]
<결과>
설립구분 설립구분_매핑
978 공립 1
979 공립 1
980 사립 2
981 공립 1
데이터 병합
.concat
ndf = pd.concat([df, horsepower_dummies],axis= 1)
ndf.head()
concat , merge 잘 설명한 블로그
https://velog.io/@moksu/Merge로-데이터-합치기join
댓글