-
<TIL> 2024-01-29내일배움캠프(데이터 분석 부트캠프 1기)/TIL & WIL 2024. 1. 29. 22:03
- 오늘 진행한 일
- 데이터 개인과제 해설 강의 수강
- 머신러닝 기초 강의 수강
오전에는 지난 주에 출제되었던 데이터 전처리 및 시각화에 대한 개인과제 해설 강의가 있었다.
문제 자체 난이도는 전처리와 시각화에 대한 내용이라 간단했으나
그 문제 내용을 응용해서 했던 ANOVA 분석 코드를 보면서 공부가 되는 내용들이 많았다.
사용한 데이터는 Git public repository의 push 횟수로 공개 저장소에 대한 기록은 모두에게 공개되어 Bigquery의 데이터 베이스 형태로도 저장되어 있다고 한다. 그 중에 2019년도 2월 1일부터 2020년 1월 11일까지 약 1년 간의 일자별 push 횟수에 대한 데이터이다.
1번 문제는 log_date의 날짜변환에 관한 문제였다.
## 날짜를 변환 df.log_date = pd.to_datetime(df['log_date'], format='%y-%m-%d') ## 변환된 날짜 칼럼으로부터 요일dayofweek을 숫자로 추출 df = df.assign(day_of_week = df.log_date.dt.day_of_week)
1번 문제에서 약간의 함정(?) 이라고 하면 19-02-01에 관해서 pd_to_datetime에 대한 format을 지정해주지 않으면
19-02-01을 2002년 1월 19일로 인식을 한다는 점이다. 날짜 타입은 항상 헷갈리기 때문에 신경써서 전처리를 해줘야하는 것 같다.
2번문제는 한번에 요일별 평균과 중앙값을 출력하는 문제였다.
이를 위해서는 pandas의 groupby() 함수를 사용하는데 거기에 집계함수로 agg()를 써서 복수의 집계를 할 수 있도록 하여서 문제를 풀었다.
## 요일별 푸시 횟수의 평균과 중간값 추출 push_count_by_dow = df.groupby('day_of_week')['push_count'].agg(['mean','median']) push_count_by_dow = push_count_by_dow.sort_index() display(push_count_by_dow)
3번 문제는 그렇게 집계한 데이터의 평균을 막대그래프로 시각화 하는 문제였다.
## 요일별 평균을 bar chart로 시각화 push_count_by_dow["mean"].plot.bar() plt.show()
DataFrame.plot.bar()를 이용해서 간단하게 시각화 해줄 수 있었다.
약간 어려웠던 문제는 필수문제가 아니었던 4번 문제였는데 그마저도 사실 그렇게 어렵지는 않았다.
def z_score_outlier_remover(df:pd.DataFrame, threshold:float) -> pd.DataFrame : total_outlier_count = 0 if threshold <= 0: raise ValueError("Threshold must larger than zero") while True: m = df['push_count'].mean() s = df['push_count'].std() ser_outlier_bool = ((df['push_count']-m)/s).abs() > threshold outlier_count = ser_outlier_bool.sum() if outlier_count > 0: total_outlier_count += outlier_count df = df[~ser_outlier_bool] else: if total_outlier_count > 0: print(f"The number of outliers(z-score > {threshold}): {total_outlier_count}") break return df
문제 자체는 z-score의 주어진 임계값을 기준으로 그 임계값을 넘어서는 값을 이상치로 판단하여 삭제해주는 함수를 짜는 것인데 문제보다는 튜터님의 코드가 인상이 깊었다.
우선 타입힌트를 걸어준 부분도 코드를 짤 때 생각하지 못했던 부분들이었는데 앞으로 좀 신경을 써서 함수에 타입힌트를 걸어줘야겠다는 생각이 들었다.
그리고 기존에 이상치를 정제할 때는 나의 경우에는 z-score가 절댓값 3을 넘어가는 데이터에 대해서 단순하게 삭제를 진행해주고 마무리하는 방식으로 수행을 했었는데, 위 코드에서는 무한 반복문을 이용해 한번 이상치를 처리 한 뒤 새롭게 생겨나는 이상치들까지 지속적으로 정제를 해주는 방식으로 짜여진 코드였다.
한 번 정제한 이상치에 대해서 다시금 이상치로 나오는 값들은 없는지 정제해볼 생각은 대학원을 다니면서도 해본 적이 없었던 것 같은데 새롭게 하나 배우는 하루였다.
그리고 이번주 주차부터 머신러닝에 대한 학습이 시작되었다. 머신러닝 기초 강의를 수강중에 있으며 현재는 선형회귀에 대해서 학습하고 있는 중이다.
내일은 기초 수강을 끝낸 뒤에 통계학의 내용과 함께해서 블로그에 선형회귀에 대해서 작성하려고한다. 그리고 수요일까지는 머신러닝 심화 강의까지도 수강을 마무리할 예정이다.
이번주 주말 이사 일정으로 인해서 바쁠 예정이지만 시간이 좀 남는다면 머신러닝에 대해 학습한 내용들도 차근차근 블로그에 올리려고 한다.
'내일배움캠프(데이터 분석 부트캠프 1기) > TIL & WIL' 카테고리의 다른 글
<TIL> 2024-01-31 (0) 2024.01.31 <TIL> 2024-01-30 (0) 2024.01.30 <WIL> 2024년 1월 마지막 주차 회고 (1) 2024.01.26 <TIL> 2024-01-26 (1) 2024.01.26 <TIL> 2024-01-25 (1) 2024.01.25 - 오늘 진행한 일