오늘은 파이썬 전처리 개인과제를 해보았다.

기본적으로 코드가 다 들어가 있었고 중간중간 해결할 부분들을 비워놓는 식이였다.
풀어보는 중에 어려웠던 부분을 정리해보자

python 개인과제 정리

날짜 전처리

데이터프레임 안에 날짜 데이터가 object 타입으로 되어 있었고 이걸 datetime으로 변환했어야 했는데

이렇게 19-02-01 로 써져 있어서 pd.to_datetime으로 해결해야겠다 했는데 연도가 인식을 제대로 못하는 것이었다...

# 안되던 코드
df['log_date'] = pd.to_datetime(df['log_date'], format='%Y-%m-%d')

# 성공한 코드
df['log_date'] = pd.to_datetime(df['log_date'], format='%y-%m-%d')

-> 두 코드의 차이점은 그저 'Y'가 'y'로 소문자로 써야 인식이 되었다...

컬럼 추가 assign

데이터프레임에 assign 함수로 컬럼을 추가할 수 있는걸 지금껏 처음 알았다... 배우지 않았는데 문제에 딱! 등장해서 찾아보니 괜찮은 방법인 것 같다.

df = df.assign(day_of_week = df['log_date'].dt.day_of_week)

-> assign함수 괄호 안에 앞에 컬럼명을 지정해주는데 따옴표는 필요가 없다. '='뒤에 넣을 데이터를 써주면 된다. 생각보다 심플한데 처음 보는 함수라서 어리둥절했었다.

이상치 제거

함수 메서드가 길게 나와있는데 뭘 어디서부터 이해하고 써야되는지 감이 잘 안잡혔었다.
천천히 하나씩 고민하길 두시간이 걸려서 뭔가를 쓰긴 했는데...출제자의 의도를 많이 벗어난 것 같은 느낌이 들었다.
순서대로 내가 쓴 코드를 제대로 이해하고 있는지 체크해보자

1번) 평균, 표준편차 구하기

m, s 만 달랑 있어서 그 뒤에 답을 적어본 것이다. 날짜 데이터와 숫자데이터 두 컬럼밖에 없어서 숫자형 데이터의 평균과 표준편차를 각각 넣어주었다.

2번) 이상치 범위를 4분위수를 활용

quantile() 함수를 사용하여 1분위, 3분위를 각각 구해놓고 이 다음에 이 값 바깥에 있는 데이터를 이상치로 보기로 했다.
괄호안에는 몇 퍼센트를 지정할건지 숫자로 넣으면 되는데 이건 q=0.25 이런식으로 넣어도 된다.

3번) 이상치를 구하기, 이상치 카운트, 이상치 여부 컬럼 추가

ser_outlier_bool 을 고민하면서 한줄 코드를 사용해보았다. 나는 if문도 for문도 필요했기에 둘다 사용 가능한 방법을 구글링해보았다.
if문에 적용되는 값을 if 앞에 써준다. 나는 이상치이면 1, 아니면 0으로 했다.
if문을 그대로 적어주고 else까지 이어서 적어준다.
그 뒤에 i로 뽑아낼 값을 for문을 사용했다. for문에서 순회하는 i값이 if문에 들어가서 검사하고 리스트 형태로 나오게 된다.

이 코드를 그대로 assign함수를 이용해서 df에 컬럼추가를 해주었다.

4번) df에 이상치를 제거한 데이터만 남기기

마지막으로 끝에 리턴값으로 df가 나와야하는데 이상치가 제거된 df만 출력되는게 맞다고 생각하여 boolean 조건으로 이상치 여부컬럼(outlier_bool)에서 이상치가 아닌 0만 뽑아내도록 했다.
이 뒤에 다음 if문 앞에 원래는 else: 가 있었는데 이러면 계속 df의 모든 데이터가 출력되어서 빼고 다음 if문을 이어줬더니 정상적으로 작동된 것 같다.

사실 이게 코드는 정상작동을 하고 그 뒤로 ANOVA 검정도 있고 했는데 문제는 여기까지만 이었고 이게 잘 돌아간다면 그 뒤에도 돌아가는 거라고 생각했다. 다 잘 돌아가긴 하는데 정답이 이게 맞는지 솔직히 잘 모르겠어서 우선 과제를 제출하고 해설때 어떻게 접근하여 푸는건지 다시 확인해보아야할 것 같다.

profile
Data analyst를 향해 도전하는 이야기

0개의 댓글

Powered by GraphCDN, the GraphQL CDN