빅데이터 분석기사/작업 유형 2 (ML)
Machine Learning 사전 학습 1 전처리, 탐색, 타입 확인, 인코딩
유방울
2023. 5. 27. 22:23
2유형 과정
주의사항
객체 출력 안 됨 -> print()사용 !
코랩환경 아님 -> 코드를 길게 쭉 입력해야 함 !
전처리 파트
문제지 요구사항ㅇㅔ 제시된 칼럼의 타입이 파일에서 읽어온 데이터와 동일한가?
숫자가 아닌 문자 포함 -> object로 표기되며 해당 문자를 찾아서 없애기
1. astype('int') or float로 변환 시도 -> 오류시
2. series.replace(regex=True) or Series.str.replace()사용
3. 다시 astype() 변환
날짜/시간
1. pd.to_datetime(Series, forma='%Y%m%d') 사용
1.1 일반적으로 astype('datetime64')로 가능
# 새로운 칼럼으로 추가하는 것이 좋음
# 원본으로 돌리지 않아도 됨!
# way 1
df['point'].replace('\*','',regex=True).astype('int64')
0 1
1 2
2 3
3 4
4 1
Name: point, dtype: int64
# way2 엑세스 사용
df['point_num'] = df['point'].str.replace('*','').astype('int64')
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 point 5 non-null object
1 date 5 non-null object
2 gender 5 non-null object
3 point_num 5 non-null int64
dtypes: int64(1), object(3)
memory usage: 288.0+ bytes
# 일반적인 경우
df['date'].astype('datetime64')
# 형식 지정하는 경우
df['datetime']= pd.to_datetime(df['date'], format='%Y-%m-%d')
모든 칼럼의 타입 확인
머신러닝은 범주형 데이터가 작동되지 않음
-> 라벨인코딩, 원핫인코딩으로 수치형으로 변경
날짜/시간 데이터는 dt를 사용해 year, month, day, hour, weekdays, quarter로 분할해 Feature로 사용gka
but nunique()가 1 or var() 0인 값은 의미가 없음으로 사용 x
ex) year가 모두 2021, month는 1로 동일하면 학습용으로 큰 의미가 없음
print(df['datetime'])
0 2021-01-02
1 2021-01-03
2 2021-01-04
3 2021-01-05
4 2021-01-06
Name: datetime, dtype: datetime64[ns]
print(df['datetime'].dt.year.var())
0.0
그래서
# 코랩환경이 아니기 때문에 코드를 길게 쭉 입력해야 함
df['point_num'] = df['point'].str.replace('*','').astype('int64')
df['datetime']= pd.to_datetime(df['date'], format='%Y-%m-%d')
# day만 넣기
df['day'] = df['datetime'].dt.day
df.info()
0과 1로 바꾸는 원핫 인코딩
df['gender'].unique()
array(['F', 'M'], dtype=object)
# 코랩환경이 아니기 때문에 코드를 길게 쭉 입력해야 함
df['point_num'] = df['point'].str.replace('*','').astype('int64')
df['datetime']= pd.to_datetime(df['date'], format='%Y-%m-%d')
# day만 넣기
df['day'] = df['datetime'].dt.day
# 원핫인코딩
df['gender_LE'] = df['gender'].replace({'F':0,'M':1})
df.info()
사용할 데이터!!!!
df2 = df[['point_num','day','gender_LE']]
df2.info()