데이터 전처리
head(), tail()
describe()
info()
데이터 확인
데이터 불러오고 탐색 시작
1. 데이터 확인하기
df.info()
df.head()
df.tail()
df.describe()
cust=df[["cust_class", ...]]
간단하게 만들기
cust = cust.rename(columns = {"cust_class" : 'class', "sex_type":'sex' ...}
오브젝트 타입의 연산은 문자가 붙여서 나옴
예를들어 나이 12+12를 했을 때
24가 아닌 1212가 나옴

cust=cust.astype({'age': int})
but _라는 단어가 들어있기 때문에 에러가 발생할 수 있음
따라서 전처리가 필요함

cust = cust.replace("_", np.NaN)
NaN의 경우 int를 지원하지 않기 때문에 float type으로 변경
cust=cust.astype({'age': float})
결측치 처리
표현법
N/A, Null, NaN
데이터에 값이 없다
0은 결측치가 아니다
1. 결측치 처리 = 실무자의 견해가 많이 반영
2. 시간이 많이 투자 되어야 함 = 데이터의 현실을 반영한 결측치처리가 되어야 함
3. 결측치 그냥 제거 해버리면 빠르고 간편하게 제거. 하지만, 막대한 손실 동반
4. 데이터에서 편향이 생길 수 있음
제거하기
Listwise
결측치가 존재하는 전체 행 삭제
PairWise
결측치로 존재하는 변수만 삭제
모든 변수가 결측치인 경우 해당 행 삭제
모든 변수가 결측치인 E유저의 데이터만 제거되고 B와C는 유지
다만 결측값이 있는 변수는 향후 무시됨

제거하기 방법을 사용하여 결측치를 처리하면 정보가 손실될 수 밖에 없음
Listwise 최대치 정보 손실
Pairwise 매번 샘플이 달라 분석을 비교할 수 없음
채우기
평균화 값으로 대체
평균, 중앙, 최빈
예측하기
결측치 상관관계를 예측하여 값을 채우되 결측치의 특성이 무작위로 관찰되는 것이 아니라고 가정하고 상관관계나 예측 모델을 사용하여 채움
모든 결측치가 동일한 값을 가질 순 없음
결측치를 지정한 값으로 채우는 메소드
Dataframe명.fillna('standard')

결측치를 같은 간격으로

dropna()결측치 제거
데이터 전처리 시 반드시 원본 데이터를 copy해서 사용
원본 항목을 보전하면서 데이터를 보정하려면 copy메서드를 사용
fillna(method='backfill')
뒤에있던 인덱스값을 앞에다 복사
fillna(method='ffill')
앞에있던 인덱스 값을 복사
backfill
맨 뒤에 있는 결측치는 뒤가 없기 때문에 처리가 안된다
따라서 tail을 사용하는게 좋음
ffill도 마찬가지
replace함수를 사용해도 가능
interploate()
기본적으로 선형으로 진행
연속형 변수가 아닐 경우 NaN값이 처리가 되지 않음
결측치 제거하기
listwise방식 = record의 항목 중 1개의 값이라도 NA이면 해당 데이터 행 전체 제거
pairwise방식 = 모든 항목이 NA인 데이터 행만 제거 : 모든 컬럼이 NA값이아니라면 제거 안댐
how='all' 기본은 any로 되어있음
dropna(thresh=10)
listwise방식과 동일 할 수 있음
NA가 아닌 값이 n개 이상이어야 함
특정 열 NA만 참고하여 제거
dropna(subset=['class'])
이상치 처리
데이터를 시각화해서 확인
특정 추세를 크게 벗어난 데이터
중앙값을 크게 벗어난 데이터
이상치 데이터 처리
범주형 데이터의 경우 value_counts메소드를 사용
cust['class']!='H' --> H제거
cust['class'].replace('H','F')
이상치 변경
def removeQutliers(x, colum):
q1 = x[column].quantile(0.25)
q3 = x[column].quantile(0.75)
iqr = 1.5 * (q3-q1)
y = x[(x[column] < (q3 + iqr)) & (x[column] > (q1 - iqr))]
return(y)
Feature Engineering
데이터의 도메인 지식을 활용하여 변수를 가공, 데이터를 비교적 간단 명로하게 만드는 것
Feature = 각 데이터의 특징
Binnung
연속형 변수를 범주형 변수로 만드는 방법
동일 길이로 나누기 사용자가 구간값을 입력cut,
동일 개수로 나누기 사용자가 구간 개수를 입력qcut

Scaling
숫자 데이터간의 상대적 크기 차이를 제거
StandardScaler()
평균을 0, 분산을 1로 스케일링 함
즉 데이터를 정규분포로 만듦
RobustScaler()
평균과 분산대신에 중간값(정렬 시 중간에 있는 값)과 사분위 값(1/3, 3/4에 위치한 값)을 사용함
전체 데이터와 아주 동떨어진 데이터에 영향을 받지 않음
mibnmaxScaler()
모든 값이 0과 1사이에 위치하도록 만듦
MaxAbsScaler()
각 특성의 절대값이 0과 1사이가 되도록 스케일링
모든 값이 -1과 1사이로 표현
데이터가 양수일 경우 minmax와 같음
one hot encoding
하나의 데이터만 1 나머지는 0
cust_data_end = pd.get_dummies(cust_data, columns=['class'])
cust_data_end
'Tech Stack > AICE - Associate' 카테고리의 다른 글
| AICE - Associate - 7 딥러닝 모델링 (0) | 2024.01.19 |
|---|---|
| AICE - Associate - 7 머신러닝 모델링 (0) | 2024.01.18 |
| AICE - associate - 4 pandas 2 (0) | 2024.01.15 |
| AICE - Associate - Python 기본 2 - pandas (1) | 2023.12.28 |
| AICE - Associate 2 - python 기본 (0) | 2023.12.27 |