낭만적(?) 일상/세미나, 교육

탈잉에서 나한테 맞는 데이터 분석 수업을 찾았다!

Soo♥JJeong 2019. 4. 17. 03:54

패스트캠퍼스 데이터사이언스스쿨 과정 환불을 고민하면서 다른 교육과정들도 찾아보게 되었다. 솔직히 아무것도 안하고 잠시 쉴까도 고민했었다. 하지만, 나의 리프레시 휴직의 목적 '데이터분석을 제대로 배워보자'를 생각하면 마냥 놀 수만은 없었나보다.

 

그로스해킹 수업에서 알게된 혜린이가 알려준 탈잉. 탈잉에서 퍼스널컬러 수업을 들어볼까 몇번 기웃거리면서 회원가입을 했었는데, 여기에도 데이터분석 수업이 있었다. 생각보다 많이... 그 중 왠지 흥미를 유발시킬 것만 같은(+그래서 나에게 동기부여 뿜뿜 해줄 수 있을것 같은!!) 수업을 발견했다.

 

바로 이것!

 

 

 

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테스트 결과에 대한 분석에 대해서도 한다니, 기대된다! 꼭 가야지!!