반응형
파이썬 데이터 전처리 patsy를 활용한 전처리¶
In [2]:
import pandas as pd
from patsy import demo_data
예시 데이터 만들기¶
In [3]:
df = pd.DataFrame({"score1" : [99, 65, 79, 94, 87],
"score2" : [79, 85, 78, 93, 97],
"score3" : [59, 65, 39, 94, 85],
"score4" : [89, 61, 59, 91, 67],
"weight" : [5.43, 0.12, 10.44, 9.33, 4.22],
"diff" : [-2.1, 5, 2, -5.4, -3.3],
"place":["A", "B", "A", "A", "B"]})
df
Out[3]:
score1 | score2 | score3 | score4 | weight | diff | place | |
---|---|---|---|---|---|---|---|
0 | 99 | 79 | 59 | 89 | 5.43 | -2.1 | A |
1 | 65 | 85 | 65 | 61 | 0.12 | 5.0 | B |
2 | 79 | 78 | 39 | 59 | 10.44 | 2.0 | A |
3 | 94 | 93 | 94 | 91 | 9.33 | -5.4 | A |
4 | 87 | 97 | 85 | 67 | 4.22 | -3.3 | B |
컬럼 선택¶
- 원하는 컬럼만 가져올 수 있습니다.
- 예시 데이터에서 "score1, score3, weight, diff, place" 5가지 컬럼만 가져오는 코드는 아래와 같다.
- 카테로리컬 변수(명명척도)를 포함하고 있는 데이터는 dummy 처리가 됩니다.
In [4]:
from patsy import dmatrix
dmatrix("score1 + score3 + weight + diff + place + 0", data=df)
Out[4]:
DesignMatrix with shape (5, 6) place[A] place[B] score1 score3 weight diff 1 0 99 59 5.43 -2.1 0 1 65 65 0.12 5.0 1 0 79 39 10.44 2.0 1 0 94 94 9.33 -5.4 0 1 87 85 4.22 -3.3 Terms: 'place' (columns 0:2) 'score1' (column 2) 'score3' (column 3) 'weight' (column 4) 'diff' (column 5)
컬럼 연산¶
- 간단한 전처리도 가능하다.
- numpy의 일부 Mathematical functions을 적용 할 수 있습니다.
- 예시로 weight 컬럼에는 소수점 지정(np.round)을 diff 컬럼에 절대값(np.abs)을 적용하였습니다.
In [9]:
import numpy as np
dmatrix("score1 + score3 + np.round(weight) + np.abs(diff) + place + 0", data=df)
Out[9]:
DesignMatrix with shape (5, 6) place[A] place[B] score1 score3 np.round(weight) np.abs(diff) 1 0 99 59 5 2.1 0 1 65 65 0 5.0 1 0 79 39 10 2.0 1 0 94 94 9 5.4 0 1 87 85 4 3.3 Terms: 'place' (columns 0:2) 'score1' (column 2) 'score3' (column 3) 'np.round(weight)' (column 4) 'np.abs(diff)' (column 5)
- 커스텀한 함수를 적용할 수 있습니다.
- score1에 50을 더하는 커스텀 함수를 적용하였습니다.
In [10]:
def plus50(x):
return x + 50
dmatrix("plus50(score1) + score3 + np.round(weight) + np.abs(diff) + place + 0", data=df)
Out[10]:
DesignMatrix with shape (5, 6) place[A] place[B] plus50(score1) score3 np.round(weight) np.abs(diff) 1 0 149 59 5 2.1 0 1 115 65 0 5.0 1 0 129 39 10 2.0 1 0 144 94 9 5.4 0 1 137 85 4 3.3 Terms: 'place' (columns 0:2) 'plus50(score1)' (column 2) 'score3' (column 3) 'np.round(weight)' (column 4) 'np.abs(diff)' (column 5)
- 상호작용항 생성 또한 가능합니다.
- place와 score3의 상호작용항을 만들었습니다.
In [11]:
dmatrix("place:plus50(score1) + 0", data=df)
Out[11]:
DesignMatrix with shape (5, 2) place[A]:plus50(score1) place[B]:plus50(score1) 149 0 0 115 129 0 144 0 0 137 Terms: 'place:plus50(score1)' (columns 0:2)
- 변수간 연산이 가능합니다.
In [12]:
dmatrix("I(score1+score3) + 0", data=df)
Out[12]:
DesignMatrix with shape (5, 1) I(score1 + score3) 158 130 118 188 172 Terms: 'I(score1 + score3)' (column 0)
반응형
'python' 카테고리의 다른 글
파이썬 이미지 반점 제거 cv2 erode (0) | 2023.03.08 |
---|---|
파이썬 문자열 띄어쓰기 거르기, 특수문자 거르기 isalnum (0) | 2023.03.07 |
판다스 최대값, 최소값 인덱싱 pandas idxmin(), idxmax() (0) | 2023.03.02 |
datetime을 이용하여 일주일치 날짜 만들기 (0) | 2023.03.01 |
datetime to str 파이썬 데이트타임을 문자열로 (0) | 2023.03.01 |
댓글