* 자료 출처: Kaggle - Google Analytics Customer Revenue Prediction
1. 문제 배경
- 데이터 전처리 과정에서 문자열(str)과 정수(int) 타입으로 데이터 타입 변경 필요
2.데이터 타입 변경
1) astype()을 활용한 문자열 변환
- astype()은 열 기준으로 데이터 타입을 변경하는 함수로, 여러 칼럼을 원하는 타입으로 한 번에 변경 가능
# 모든 열의 데이터 타입 변경
DataFrame.astype(dtype, copy=True, errors='raise')
## dtype: 변경할 type
## copy: 사본 생성 여부
## errors: {'raies', 'ignore'} 변경 불가 시 오류 발생 여부
# 한 개 열의 데이터 타입 변경
DataFrame.astype({'col1':'dtype'})
# 특정 열의 데이터 타입 변경
DataFrame.astype({'col1':'dtype', 'col2':'dtype'})
- 단, 칼럼 내 null값(NaN) 포함 시 오류 발생해 변환이 안 됨 (사용 전 결측치 처리)
- inplace* 지정이 안되므로 원본 타입을 바꾸고 싶다면 변수를 생성하여 재정의 필요
* inplace 란?
기존 데이터 프레임 내 변경된 설정 저장 여부를 결정하는 코드
inplace = True는 변경된 설정을 덮어쓰겠다는 의미
- 문자열 변환 코드
└ str()는 객체를 문자열로 바꿔주는 파이썬 내장 함수로, 열 전체 값 변경을 위해 astype() 활용
# int to str
df = df.astype({'fullVisitorId':'str', 'visitNumber':'str})
# 데이터 프레임 뒤에 붙이는 방식도 가능
df[['fullVisitorId', 'visitNumber']].astype(str)
2) pd. to_numeric()을 활용한 수치형 변환
- pd. to_numeric()은 데이터 타입을 숫자로 바꿔주는 판다스 라이브러리 함수
pd.to_numeric(적용할 값, errors='에러 처리 방식')
## 에러 처리 방식
# raise: 에러 표시
# coerce: 에러 발생 시 NaN으로 처리
# ignore: 에러 무시
- 상수, 리스트, 튜플, 배열, 시리즈 자료형에 적용
└ 데이터프레임에 적용하려면, 각 열을 시리즈로 뽑아서 반복분으로 바꾸거나 apply 함수 사용
- 수치형 변환 코드
└ astype() 사용 시 일부 null값이 포함된 열 때문에 오류 발생하여 to_numberic으로 적용
# 정수형으로 변환
# astype으로 변경 시 'totals.pageviews'에서 에러(float NaN) 발생하여 to_numeric으로 조정
numberic_list = ['totals.visits','totals.hits','totals.pageviews','totals.bounces','totals.newVisits','totals.transactionRevenue']
for num_col in numberic_list:
df[num_col] = pd.to_numeric(df[num_col], errors='coerce') #coerce는 오류 발견시 NaN으로 변경
# totals_transactionRevenue 금액 조정
# GA상 매출액 10^6 값으로 표기 (ex. 2.4는 2400000로)
df['totals.transactionRevenue'] = (df['totals.transactionRevenue']**(1/6)).round(2)
'TIL' 카테고리의 다른 글
[240213] 유저ID와 방문시작시간으로 세션ID/평균세션시간 생성(feat. ECDF) (0) | 2024.02.14 |
---|---|
[240208] 날짜 데이터 타입 변환 및 처리(to_datetime, datetime) (0) | 2024.02.08 |
[240206] 중첩 딕셔너리? JSON 포맷 데이터프레임으로 평면화 (0) | 2024.02.06 |
[240205] SQL: 코드카타 119~121 & 파이썬: 코드카타 29~30 (0) | 2024.02.05 |
[240201-02] 머신러닝 - 회귀/분류 모델링 심화, 비지도 학습, 딥러닝 (0) | 2024.02.02 |