패스트캠퍼스 데이터사이언스스쿨 과정 환불을 고민하면서 다른 교육과정들도 찾아보게 되었다. 솔직히 아무것도 안하고 잠시 쉴까도 고민했었다. 하지만, 나의 리프레시 휴직의 목적 '데이터분석을 제대로 배워보자'를 생각하면 마냥 놀 수만은 없었나보다.
그로스해킹 수업에서 알게된 혜린이가 알려준 탈잉. 탈잉에서 퍼스널컬러 수업을 들어볼까 몇번 기웃거리면서 회원가입을 했었는데, 여기에도 데이터분석 수업이 있었다. 생각보다 많이... 그 중 왠지 흥미를 유발시킬 것만 같은(+그래서 나에게 동기부여 뿜뿜 해줄 수 있을것 같은!!) 수업을 발견했다.
바로 이것!
4월에는 화요일 저녁8시~11시, 토요일 1시~4시 2개 클래스가 있는데, 이미 1주차는 개강을 했다. 실시간 톡으로 2주차부터 들어도 따라가는데 문제가 없는지 확인해보니, 1주차는 워밍업인 아주 기초만 설명하신거라며 교안을 보면 충분히 이해할 수 있다고 했다. 게다가 1주차 수강료 환불까지! (오예!)
수강료를 입금하고 강남역으로 Go~! 강의장소가 스터디룸인데 바코드가 있어야 입장이 가능하다. (핸드폰이 꺼질까봐 조마조마했다.) 수업은 8시 정각에 시작한다.
2주차 수업내용 1. 표준편차에 대한 설명 2. 공공데이터 포털의 건강검진 데이터(100만 샘플) 분석 - 목적 : 허리둘레에 영향을 미치는 요인이 무엇인가? - 데이터 요약 표를 보고, 분석시 문제가 될 것 같은 점을 조별로 토론(20분) 후 발표 - 분석 방법에 대한 설명
|
수업내용 복습 겸, 분석방법에 대한 설명에서 알게 된 점 몇가지를 적어보고자 한다.
데이터 전처리
1) 컬럼 정리 : 목적에 필요없는 컬럼(기준년도, 가입자 일련번호 등), 데이터가 없거나 부실한 경우 다 날려버린다.
df2 = df.copy() df2 = df2[[ '컬럼명1', '컬럼명2', ...., '컬럼명N']] df2.head()
|
2) Null(=NaN) 확인
df2.isnull().sum()
|
각 컬럼 중 빈칸이 하나라도 있는 raw는 날려버림(너무 많이 날라가면 나중에 조절)
df3 = df2.copy() df3 = df3.dropna() # na를 drop하라는 명령어 df3.dscribe()
df3.isnull().sum() # null을 더한 값이 0이 되었는지 확인.
|
분석 목적을 다시 생각하자!
1) outlier가 예상됨. 어떤 기준으로 제거할 것인가? →여기서 표준화가 나옴!
표준화란, 평균을 0으로 그래프 밑넓이가 1이되는 표준정규분포(Z분포)로 만드는 것으로, z-score의 경우 약 -2~2(정확히는 1.96)이 전체 수치의 95%로 알려짐.
from scipy import stats #표준화는 scipy에 있다.
df4=df3.copy() df4['z_신장'] = stats.zscore(df4['신장(5cm단위)']) #이게 표준화 코드! df4.head()
df5 = df4.copy df5 = df5[df5['z_신장']<2][df5[df['z_신장']>-2] #표준화후, 95%내에 있는 것만 가져오기 df5.head()
# 확인해보면 2만건의 record가 제거되고 신장의 min, max값이 reasonable해짐.
|
* 아웃라이어는 모든 컬럼에 독립적으로 존재하기 때문에 각 컬럼마다 따로 표준화를 해줘야한다.
이제 알고리즘을 고민하자.
1) 카테고리 데이터를 넣을 것인가?
성별, 시도코드는 제외하는게 좋을듯.(이산 데이터이기 때문)
df6 = df5.copy() df6 = df6.drop['성별코드', '시도코드', 'z_신장', '흡연상태']. axis = 1) df6.head()
|
2) scale문제
신장은 cm 인데 체중은 kg으로 단위가 서로 다르다. 최대 최소값은 말할것도 없다. 이것을 그대로 넣어버리면 변화 패턴이 잘 잡히지 않게 된다. 이럴 때 scale을 통일해야한다. 어떻게? 데이터를 해당 컬럼의 최대값으로 나눠주면 0~1 사이의 비율값으로 변경된다.
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df7 = df6.copy() df7[:] = scaler.fit_transform(df7[:]) #이게 바로 rescale 코드! df7.head()
|
3) 이제 허리둘레에 영향을 주는 요인을 찾아보자(=상관을 내보자.)
df7.corr()['허리둘레'].sort_values(assecnding = False)[1:]
|
그러면 가장 영향을 주는 변수부터 순서대로 보여준다.
뒤에 결과정리도 있으나, 생략.
오늘 수업을 통해 일하면서 궁금했던 아래 2가지의 문제를 해결할 수 있었다.
1. 표준화는 언제 쓰이는 것일까? → outlier 제거시
2. 단위가 다른 경우 어떻게 비교할 수 있을까? → rescaling
더 정확히는 내가 어떤 것들을 궁금해했었는지, 명문화 할 수 있었다. 원래 문제(여기서는 모르는 것)를 정의하는게 가장 어려운 일이다. 문제가 정의되면 그 문제는 어떻게든 풀면 되는거니깐.
그리고, 튜터가 어떤 질문이든 잘 받아주시고, 잘 대답해주신다. (스웩넘치는 스타일뿐만 아니라 이름이 '김덕중'이라 DJ라고 하신듯) 나에게 맞는 강의를 찾아서 너무나 다행이다.
다음주에는 A/B테스트 결과에 대한 분석에 대해서도 한다니, 기대된다! 꼭 가야지!!
'낭만적(?) 일상 > 세미나, 교육' 카테고리의 다른 글
캐릭터버블바 만들기 원데이클래스(문정동 헤이센트) (0) | 2019.04.23 |
---|---|
패스트캠퍼스 데이터사이언스스쿨FIT 3주만에 환불.. (14) | 2019.04.22 |
패캠_데이터사이언스스쿨_파이썬2일차 (0) | 2019.04.01 |
패캠_데이터사이언스스쿨_파이썬1일차 (0) | 2019.03.31 |
패캠_ 데이터사이언스스쿨_수학2일차 : 어제보다는 낫지만.. (0) | 2019.03.28 |