빅데이터 분석기사/작업 유형 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()